什么是 OpenPGP/GnuPG 密钥 ID?

什么是 OpenPGP/GnuPG 密钥 ID?

我了解密钥块本身和密钥哈希值的实用性,但我不知道为什么需要额外的信息,所以我无法猜测额外信息的实用性。

具体来说,

  • 这意味着什么,
  • 它在哪里使用,
  • (如何)根据公钥块来确定?

人们往往会在旁提及,这会导致混淆,因为很明显太空行走认识到指纹和身份证之间的区别, 尽管Fedora 发布的一些 GPG 文档包括短语

对于 KEYNAME,请替换主密钥对的密钥 ID 或指纹,

这使得两者看起来具有相同的用途;但这没有任何意义,因为如果是这样的话,为什么一开始就需要两者呢?

答案1

RFC 4880

V4 指纹是八位字节 0x99 的 160 位 SHA-1 哈希,后跟两个八位字节的数据包长度,然后是从版本字段开始的整个公钥数据包。密钥 ID 是指纹的低 64 位。

对于 V3 密钥,计算类似,但省略了密钥长度。

换句话说,指纹是根据一个常数、数据包长度以及公钥数据包的一部分计算出来的。有关所包含内容(以及如何计算)的进一步解释,请参阅链接的 RFC。

(长)密钥 ID 由最低 64 位表示,由于完整指纹是一个不方便且很长的值,因此使用。更常见的是,使用由最低 32 位组成的短密钥 ID。这些短密钥 ID 通常被认为具有发生碰撞的可能性太高并且至少使用长 ID,如果不建议甚至使用完整指纹,则建议使用。

总结一下:

指纹是根据公钥包计算出来的哈希值。密钥 ID 是指纹的一部分:

Fingerprint: 0D69 E11F 12BD BA07 7B37  26AB 4E1F 799A A4FF 2279
Long key ID:                                4E1F 799A A4FF 2279
Short key ID:                                         A4FF 2279

有时,ID 会以0x十六进制值作为前缀。

相关内容