这个问题出现在“我如何以一种不太黑客的方式显示我的加密密钥的使用标志?“,并且似乎值得以问答形式来回答,因为答案实际上并不明显。
要查看 Torvald 的 OpenPGP 密钥 449FA3AB,我使用gpg2 --list-keys 449FA3AB
,输出
$ gpg2 --list-keys 449FA3AB
pub 1024D/449FA3AB 1999-10-05 [expired: 2001-10-04]
uid [ expired] Linus Torvalds <[email protected]>
通常,此命令还会列出子密钥,但 Torvald 的密钥不会打印任何子密钥。然而,当请求批量输出时,会包含一个子密钥。
$ gpg2 --with-colons --list-keys 449FA3AB
tru::1:1414619239:1414879758:3:1:5
pub:e:1024:17:956EB7BF449FA3AB:939086351:1002158351::-:::sca:
uid:e::::939086351::81A3799583B9B1B391E4C428112F302FF2ADF462::Linus Torvalds <[email protected]>:
sub:e:2048:16:71CE8207BFF491C5:939086545:1002158545:::::e:
看起来这个 Torvalds 密钥具有一些隐藏子密钥的特殊功能。这里发生了什么?
答案1
密钥过期
这不是什么特殊功能,但 Torvalds 的主密钥早已过期,因此子密钥也过期了。答案隐藏在 GnuPG 的--list-options
手册页部分,因为默认情况下过期的子密钥是隐藏的。来自man gpg2
:
show-unusable-subkeys
Show revoked and expired subkeys in key listings. Defaults to no.
通过指定此参数,子项将显示:
$ gpg2 --list-options show-unusable-subkeys --list-keys 449FA3AB
pub 1024D/449FA3AB 1999-10-05 [expired: 2001-10-04]
uid [ expired] Linus Torvalds <[email protected]>
sub 2048g/BFF491C5 1999-10-05 [expired: 2001-10-04]
时光倒流
您还可以使用以下有用的方法验证这一点faketime
程序将 GnuPG 的系统时间往前调几年。通过回溯到 Torvalds 密钥有效的某个日期,子密钥将再次出现:
$ faketime 2001-01-01 gpg2 --list-keys 449FA3AB
pub 1024D/449FA3AB 1999-10-05 [expires: 2001-10-04]
uid [ unknown] Linus Torvalds <[email protected]>
sub 2048g/BFF491C5 1999-10-05 [expires: 2001-10-04]