Paperkey
Paperkey 是一个命令行工具,用于将 OpenPGP 密钥打印在纸上。它通过从私钥中移除公钥部分来减小导出密钥的尺寸。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
错误:无法解析 OpenPGP 数据包(这是加密文本数据吗?)
如果您在恢复密钥时遇到此错误,您需要先对公钥进行反加密。
$ gpg --dearmor public-key.asc
技巧与提示
直接打印密钥
如果未提供 --output 参数,paperkey 将其输出到 stdout。可以直接打印密钥而不经过中间文件,这可能存在安全隐患。要做到这一点,请安装 CUPS,然后通过管道传输到 lpr:
$ gpg --export-secret-key key-id | paperkey | lpr
将密钥编码为QR码
默认情况下,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% 的丢失数据。
从QR码恢复密钥
$ 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