GnuPG 中的许多标识符有什么区别?

信息安全 密钥管理 gnupg 身份 指纹
2021-09-05 02:54:20

GnuPG 似乎有许多不同的方式来引用(子)密钥(对):

  • 密钥 ID
  • 指纹
  • 按键

此外,gpg --list-sigs似乎还显示了签名等的十六进制标识符。有时此类 ID 会被缩写。

所有这些都非常令人困惑,我希望有人能对此有所了解。

GnuPG 使用了哪些不同类型和形式的标识符(密钥 ID、签名 ID、指纹、钥匙扣……)?它们的格式和目的是什么?其中哪些可以以缩写形式使用?是否有任何(安全)理由更喜欢使用一种类型或形式而不是另一种?

3个回答

有关密钥指纹/密钥 id 计算的信息可在 RFC4880(和 RFC4880bis)中找到。对于仅限 RSA 的 v3 密钥(现已弃用),密钥 id 是 RSA 模数的低 8 字节,指纹是密钥特定数据的 MD5 哈希。

对于 v4 密钥,密钥 id 是指纹最右边的 8 个字节,它本身是一些特定于密钥的数据 + 密钥材料的 SHA1 哈希。对于 v5 密钥,指纹将使用 SHA256 哈希。

关键抓地力在 GnuPG 内部使用,它是密钥材料的 SHA1 哈希,带有一些额外的格式,但没有 OpenPGP 特定的数据。Grip 用于在 GnuPG 密钥环中构建密钥的文件名,并且可能是关于它的唯一可用信息 :)

我正在研究相同的主题,我发现了以下内容:

1) Key ID 是指纹的最后 8 或 16 个字符,具体取决于您使用的 Key ID 版本 - 短或长。您可以通过在 ~/.gnupg 目录中使用字符串创建 gpg.conf 来进行实验性检查:

keyid 格式 0xlong

或者

keyid 格式 0xshort

键入命令“gpg --list-key --with-fingerprint”进行检查。

2)指纹和钥匙扣是哈希和(?)。主要区别在于 keygrip 计算的算法与协议无关。这对于不同的标准很常见,例如 OpenPGP X.509 ( https://lists.gnupg.org/pipermail/gnupg-users/2014-November/051769.html )。因此,您可以使用 keygrip 在使用不同标准的加密系统中识别您的密钥。

希望对你有帮助)

来自info gnupg

  • 要点

    GnuPG 使用这个术语来描述一个 20 字节的散列值,用于在不参考具体协议的情况下识别某个键。它在内部用于访问私钥。通常它以 40 个字符的十六进制格式字符串显示和输入。