Paperkey
Paperkey 是一个在纸上导出 GnuPG 密钥的命令行工具。它通过从私钥中删除公钥部分来减小导出密钥的大小。Paperkey 还在密钥中包含 CRC-24 校验和,以允许用户检查其私钥是否已正确恢复。
安装[编辑 | 编辑源代码]
用法[编辑 | 编辑源代码]
备份[编辑 | 编辑源代码]
警告: 恢复纸质密钥备份时,您需要有可用的公钥!由于使公钥公开是安全的,故请考虑将其上传到公钥服务器。
要创建 GnuPG 密钥的备份,请将私钥通过管道符传输到 paperkey:
$ gpg --export-secret-key key-id | paperkey --output secret-key-paper.asc
恢复私钥[编辑 | 编辑源代码]
要恢复密钥,您需要有一个包含 paperkey 数据和公钥的文件。然后运行以下命令将私钥导入 ~/.gnupg
:
$ paperkey --pubring public-key.gpg --secrets secret-key-paper.asc | gpg --import
或者,将私钥恢复到一个文件:
$ paperkey --pubring public-key.gpg --secrets secret-key-paper.asc --output secret-key.gpg
Error: unable to parse OpenPGP packets (is this armored data?)[编辑 | 编辑源代码]
如果在恢复密钥时收到此错误,则需要先解除(dearmor)公钥:
$ gpg --dearmor public-key.asc
提示和技巧[编辑 | 编辑源代码]
直接打印私钥[编辑 | 编辑源代码]
如果没有说明 --output
参数,paperkey 会将其输出打印到 stdout
。可以直接打印密钥而无需中间文件,这可能会产生安全隐患。为此,请安装 CUPS,并通过管道符传输到 lpr
:
$ gpg --export-secret-key key-id | paperkey | lpr
将私钥转换成二维码[编辑 | 编辑源代码]
默认情况下,paperkey 会将密钥输出为可读的文本格式。虽然这种格式保证了有能力读取和恢复已打印出的信息,但它不是很方便。--output-type raw
选项告诉 paperkey 要输出原始(raw)密钥数据。这允许了其他编码方式的使用,包括计算机可读的编码,例如二维码。
qrencode包 程序可以这样使用:
$ gpg --export-secret-key key-id | paperkey --output-type raw | qrencode --8bit --output secret-key.qr.png
可以使用 --level H
选项将纠错级别提升到最大值。这可以恢复约 30% 的丢失数据,但代价是减少了二维码的容量。如果密钥不适合(高纠错级别的)二维码,也可以使用较低的 Q
和 M
纠错级别,恢复率分别约为 25% 和 15%。默认纠错级别为 L
,允许恢复约 7% 的丢失数据。
从二维码恢复私钥[编辑 | 编辑源代码]
$ zbarcam -1 --raw -Sbinary | paperkey --pubring public-key.gpg | gpg --import
相同的选项也适用于 zbarimg
:
$ zbarimg -1 --raw -q -Sbinary secret-key.qr.png | paperkey --pubring public-key.gpg | gpg --import
提示:使用
-q
选项运行 zbarimg 会在打印解码数据后禁止打印其状态文本。不使用该选项,传递到 paperkey 中的数据可能会被污染。如果您使用的是扫描的图像,则可能必须通过此命令对其进行模糊处理。
$ convert secret-key.qr.png -blur 0 secret-key-blurred.qr.png