这个 gpg 输出关于信任的确切含义是什么?

信息安全 pgp 相信
2021-08-16 21:23:56

当我使用 gpg 导入签名或接收密钥时,它会输出一些神秘的行,例如:

gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:  16  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:  16  signed: 115  trust: 1-, 1q, 1n, 1m, 12f, 0u
gpg: depth: 2  valid: 105  signed: 189  trust: 81-, 11q, 0n, 4m, 9f, 0u
gpg: depth: 3  valid:  29  signed: 120  trust: 19-, 9q, 0n, 0m, 1f, 0u

我了解信任网络和非对称密码学。但我不知道“边际”、“有效”、“签名”和信任背后的所有字母究竟是什么意思。

1个回答

关于这个输出的官方 GnuPG 文档相当尴尬。

OpenPGP 信任模型

gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model

默认情况下,GnuPG 使用 OpenPGP 信任模型。在这种情况下,您可以信任一个密钥,这允许它验证其他密钥。

可信密钥

可以信任密钥。信任允许密钥验证其他密钥。尽管信任是对其他密钥的一种签名,但在将密钥上传到密钥服务器时它不会被分发。

有不同的信任级别:

  • - 未分配所有者信托/尚未计算
  • e信任计算失败;可能是由于密钥过期
  • q 计算信息不足
  • n 永远不要相信这把钥匙
  • m 勉强信任
  • f 完全信任
  • u 最终值得信赖

(取自GnuPG 手册,章节密钥管理

最重要的是最后三个类别:您自己的密钥最终是可信的;完全受信任的密钥的签名被认为同样值得您自己的签名;而边缘可信密钥需要更多的签名路径才能使密钥有效。

有效密钥

在默认的 OpenPGP 信任模型中,如果满足以下条件,则密钥是完全有效的:

  1. 它由足够多的有效密钥签名,这意味着
    • 您已亲自签署,
    • 它已由一个完全受信任的密钥签名,或
    • 它已由三个边缘受信任的密钥签名;
  2. 从 K 到您自己的密钥的签名密钥的路径是五步或更短。

(取自GnuPG 手册,“验证公钥环上的其他密钥”一章

其他键是勉强有效的;表明存在信任路径,但还不够强大。我在上面的引文中强调了“有效”这个词:只有完全有效的密钥的信任才被考虑到计算有效性!在 GnuPG 中,可以配置默认的信任模型。

上面直接链接的手册页还包含一些信任计算示例,但请注意为简单起见应用的非默认信任模型!

GnuPG 的信任数据库信息

每当更新信任数据库时都会打印此信息,例如在从密钥服务器接收它们之后。

gpg: depth: 0  valid:   1  signed:  16  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:  16  signed: 115  trust: 1-, 1q, 1n, 1m, 12f, 0u
gpg: depth: 2  valid: 105  signed: 189  trust: 81-, 11q, 0n, 4m, 9f, 0u
gpg: depth: 3  valid:  29  signed: 120  trust: 19-, 9q, 0n, 0m, 1f, 0u

此输出描述了您的信任网络。字母代表上面列出的信任级别。级别 0上,您会找到自己的(最终受信任的)密钥。在这个级别上不应该有任何其他类型的信任。这个密钥是有效的(当然)。

进一步的输出代表我的解释,它不是基于阅读(缺失的)文档或源代码:您签署了 16 个密钥,使它们在级别 1上完全有效。对于其中的 12 个,您给予了完全信任,其中一个只是边缘性的。这些再次导致您在级别 2信任的另外 105 个有效密钥。其中一些再次被信任,导致3 级中的另外 29 个有效密钥。

将此输出与密钥服务器告诉的内容进行比较,您可能应该更新您的密钥环。;)

如果您不更改 OpenPGP 信任模型提出的最大路径长度为 5,则更深层次的更多可信密钥可能会创建级别 0-5。


GnuPG 的主要作者 Werner Koch 曾在GnuPG 邮件列表中表示:

您需要查看源代码。但是,如果您熟悉 WoT,您应该能够弄清楚这是什么。[...]您应该将其视为调试输出。