关于这个输出的官方 GnuPG 文档相当尴尬。
OpenPGP 信任模型
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
默认情况下,GnuPG 使用 OpenPGP 信任模型。在这种情况下,您可以信任一个密钥,这允许它验证其他密钥。
可信密钥
可以信任密钥。信任允许密钥验证其他密钥。尽管信任是对其他密钥的一种签名,但在将密钥上传到密钥服务器时它不会被分发。
有不同的信任级别:
-
未分配所有者信托/尚未计算
e
信任计算失败;可能是由于密钥过期
q
计算信息不足
n
永远不要相信这把钥匙
m
勉强信任
f
完全信任
u
最终值得信赖
(取自GnuPG 手册,章节密钥管理)
最重要的是最后三个类别:您自己的密钥最终是可信的;完全受信任的密钥的签名被认为同样值得您自己的签名;而边缘可信密钥需要更多的签名路径才能使密钥有效。
有效密钥
在默认的 OpenPGP 信任模型中,如果满足以下条件,则密钥是完全有效的:
- 它由足够多的有效密钥签名,这意味着
- 您已亲自签署,
- 它已由一个完全受信任的密钥签名,或
- 它已由三个边缘受信任的密钥签名;和
- 从 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,您应该能够弄清楚这是什么。[...]您应该将其视为调试输出。