指纹与长短键 ID 的关系如何
每个 OpenPGP 密钥都附有一个指纹,主要根据其公钥数据包计算得出,该数据包还包含创建时间。该计算在RFC 4880、OpenPGP、12.2 中定义。密钥 ID 和指纹。
有短密钥和长密钥 ID,它们类似于指纹的低 32 个相应的 64 位。例如,查看我的 OpenPGP 密钥的 ID:
fingerprint: 0D69 E11F 12BD BA07 7B37 26AB 4E1F 799A A4FF 2279
long id: 4E1F 799A A4FF 2279
short id: A4FF 2279
使用指纹和密钥 ID,因为共享和比较通常为 1024 到 8096 位的整个密钥(为诸如创建日期之类的标头添加更多)是非常不切实际的。
使用长密钥 ID
每当指定 OpenPGP 密钥时,您不仅可以传递短密钥 ID,还可以传递长密钥 ID 甚至整个指纹。而不是传递短键 ID
gpg --recv-keys A4FF2279
你总是可以写长密钥ID
gpg --recv-keys 4E1F799AA4FF2279
甚至是完整的指纹(推荐用于脚本和类似目的)
gpg --recv-keys 0D69E11F12BDBA077B3726AB4E1F799AA4FF2279
打印长键 ID
但是从哪里获取长密钥 ID?如果有人通过了他的短 ID,您只能尝试获取该 ID 的所有密钥,并查看是否存在冲突(并希望没有人向您隐藏真正的密钥,只传递伪造的密钥)。
因此,每当交出您的 OpenPGP 密钥 ID 时,请公布长 ID!您可以通过添加以下--keyid-format long
选项轻松地使 GnuPG 打印这个:
gpg --keyid-format long --list-keys email@jenserat.de
此选项采用值short
或0xshort
用于短键 ID(不带或带有0x
前缀以指示它是十六进制数字)和long
或0xlong
用于长键 ID。
将长密钥 ID 配置为默认值
要确保 GnuPG始终打印长密钥 ID,请在~/.gnupg/gpg.conf
文件中添加选项以去除--
. 例如,我已将 GnuPG 配置为始终0x
通过添加一行打印 -prefixed long key ID
keyid-format 0xlong
打印指纹
遗憾的是,您不能将 GnuPG 设置为以这种方式打印整个指纹,可能是因为它会破坏 GnuPG 对于几乎所有屏幕尺寸的输出格式。相反,通过运行请求它
gpg --fingerprint 4E1F799AA4FF2279
这将转储类似
pub 8192R/0x4E1F799AA4FF2279 2012-12-25
Key fingerprint = 0D69 E11F 12BD BA07 7B37 26AB 4E1F 799A A4FF 2279
由于这具有包含空格的缺点(在脚本中使用它的坏事),您可以使用冒号分隔的机器可读输出代替:
gpg --with-colons --fingerprint 4E1F799AA4FF2279
要过滤除指纹以外的所有内容,请另外使用grep
and cut
:
gpg --with-colons --fingerprint 4E1F799AA4FF2279 | grep fpr | cut -d ':' -f 10