为什么 gpg --list-keys 有时会打印子键,有时则不会?

为什么 gpg --list-keys 有时会打印子键,有时则不会?

这个问题出现在“我如何以一种不太黑客的方式显示我的加密密钥的使用标志?“,并且似乎值得以问答形式来回答,因为答案实际上并不明显。

要查看 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]

相关内容