Paperkey
Paperkey 是一个命令行工具,用于将 OpenPGP 密钥导出到纸张上。它通过从私钥中移除公钥部分来减小导出的密钥大小。Paperkey 还在密钥中包含了 CRC-24 校验和,以允许用户检查他们的私钥是否已正确恢复。
安装
用法
备份
警告: 当恢复 Paperkey 备份时,您需要拥有公钥!由于公开您的公钥是安全的,请考虑将其上传到 密钥服务器。
要创建 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
错误:无法解析 OpenPGP 数据包(这是 ASCII 装甲数据吗?)
如果您在恢复密钥时收到此错误,您需要先解甲您的公钥
$ gpg --dearmor public-key.asc
技巧与诀窍
直接打印密钥
如果没有给出 --output
参数,paperkey 将将其输出打印到 stdout
。可以直接打印密钥而无需中间文件,这可能存在安全隐患。要这样做,请安装 CUPS,并通过管道传递给 lpr
$ gpg --export-secret-key key-id | paperkey | lpr
将密钥编码为二维码
默认情况下,paperkey 将以人类可读的文本格式输出密钥。虽然这种格式保证了读取和恢复打印信息的能力,但它不是很方便。--output-type raw
选项告诉 paperkey 输出原始密钥数据。这使得可以使用其他编码,包括机器可读的编码,例如 QR 码。
qrencode 程序可以用于此目的
$ gpg --export-secret-key key-id | paperkey --output-type raw | qrencode --8bit --output secret-key.qr.png
可以使用 --level H
选项将 纠错级别 提高到最大。这提供了大约 30% 的丢失数据恢复率,但代价是降低了 容量。如果密钥无法容纳在 QR 码中,则较低的 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
提示: 运行 zbarimg 时使用
-q
选项可以禁止在打印解码数据后打印状态文本。没有它,传递到 paperkey 的数据可能会被污染。如果您使用的是扫描图像,您可能需要通过以下方式对其进行模糊处理
$ convert secret-key.qr.png -blur 0 secret-key-blurred.qr.png