好的,好的,所以我可能忽略了一些非常明显的东西,但这是我的情况。
几个月前,我决定“嘿,我应该开始保留敏感数据的纸质副本,以防我的所有硬盘崩溃。”我认为第一个需要备份的数据虽然很小,但很重要,那就是我的 PGP 密钥,尤其是考虑到我已经将其上传到 SKS 池。
因此,经过艰苦的研究,我确定 OCR 软件不是解决问题的办法(失败的几率实在太大),并将目光集中在二维码上。遗憾的是,我很快了解到字母数字二维码的最大字节容量为 4296,而我的私人 PGP 密钥在经过保护后大约有 6.7KB。即使删除 ASCII 保护,它仍然大约有 4.9KB。根本无法实现。
好吧,我之前和一个朋友聊天,告诉他我必须把钥匙分成 3 页巨大的二维码,他奇怪地看着我,然后解释了 PaperKey 软件。完美!
所以我又读了一些资料,觉得这是完美的解决方案!嗯。是的,应该是,而且显然对大多数人来说都是如此……但在从我的 GPG 密钥环(一个 4096 位 RSA/RSA PGP 密钥,带有单独的子密钥用于加密)中提取私钥后,我将其通过 paperkey 运行,输出是11 千字节大...
输出的格式如下
# Secret portions of key [key-id]
# Base16 data extracted Mon Oct 31 20:08:43 2016
# Created with paperkey 1.3 by David Shaw
#
# File format:
# a) 1 octet: Version of the paperkey format (currently 0).
# b) 1 octet: OpenPGP key or subkey version (currently 4)
# c) n octets: Key fingerprint (20 octets for a version 4 key or subkey)
# d) 2 octets: 16-bit big endian length of the following secret data
# e) n octets: Secret data: a partial OpenPGP secret key or subkey packet as
# specified in RFC 4880, starting with the string-to-key usage
# octet and continuing until the end of the packet.
# Repeat fields b through e as needed to cover all subkeys.
#
# To recover a secret key without using the paperkey program, use the
# key fingerprint to match an existing public key packet with the
# corresponding secret data from the paper key. Next, append this secret
# data to the public key packet. Finally, switch the public key packet tag
# from 6 to 5 (14 to 7 for subkeys). This will recreate the original secret
# key or secret subkey packet. Repeat as needed for all public key or subkey
# packets in the public key. All other packets (user IDs, signatures, etc.)
# may simply be copied from the public key.
#
# Each base16 line ends with a CRC-24 of that line.
# The entire block of data ends with a CRC-24 of the entire block of data.
[hexadecimal output]
令我印象深刻的是,一款旨在提取密钥最小值的软件竟然能够将输出内容膨胀到已经被认为“很大”的近 2 倍大小。或者这是 PICNIC 场景?
即使删除注释掉的标题,只保留私钥数据的十六进制值,其大小仍然有 9.4KB,太大了,无法有效地放入纸质副本中。
那又怎么样,是不是我的密钥太大了?PaperKey 不支持子密钥?我还有什么其他选择?还是我太蠢了,有人会用一行字回复说“你忘了添加这个参数”?还是我只能拿着 3 张贴满二维码的纸了?
答案1
Paperkey 从存储的信息和私钥中提取重建密钥所需的最少信息。
但默认情况下,paperkey 打印以 16 为基数(十六进制)的输出,因此现在每个字节需要两个字符(两个字节)。布局使用第三个字符来分隔每两个字节,并在每行末尾添加行号和校验和,进一步扩大了文档的大小。paperkey 的原始任务不是以最少的字节数导出文档,而是获得可以安全重建的打印副本——最小化密钥只是为了减少重建过程中的手动工作量。
使用该--output-type raw
标志来导出二进制文档,这些文档要小得多并且与您预期的输出相似。