GnuPG 如何信任 keyserver.ubuntu.com?

GnuPG 如何信任 keyserver.ubuntu.com?

我了解任何 OpenPGP 证书的有效性都基于该证书经过信任网络内的受信任方的验证。

然而,对于大多数不每天使用 GnuPG 的人来说,他们只会从keyserver.ubuntu.com一次获取密钥,并相信它们是准确的。例如,当遵循“如何验证”指南在 Ubuntu.com 上:

gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092" "C598 6B4F 1257 FFA8 6632 CBA7 4618 1433 FBB7 5451"

尽管这种沟通将会发生通过未加密的普通 HTTP,我相信我们从密钥服务器取回的证书将由密钥服务器本身签名,因此只要我们知道密钥服务器的可信证书,我们就可以信任响应。

但是,仅基于运行此命令一次,我们如何才能信任密钥服务器,因为我不相信 GnuPG 会创建文件trustdb?GnuPG 是否有一个它信任的内置证书列表,其中包括keyserver.ubuntu.com?如果有,我如何找到此列表来检查是否是这种情况?

如果没有这个受信任的列表,那么我的所有通信是否都有可能被同一个中间人 (MITM) 拦截?中间人会在向我提供keyserver.ubuntu.com伪造的签名包(例如,操作系统 ISO 本身)的同时,向我提供假证书?

答案1

接收密钥的参数是两个密钥的完整指纹:

  • 8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092
  • C598 6B4F 1257 FFA8 6632 CBA7 4618 1433 FBB7 5451

指纹是根据公钥计算得出的(I在 Super User 上讨论 OpenPGP 密钥 ID,如果您需要更多参考)。如果收到的密钥的计算指纹与请求的指纹不匹配,GnuPG 将意识到返回了错误的密钥。换句话说:您可能不信任密钥服务器(它们由随机个人操作,可能具有恶意目的),但您不必这样做,无论如何都必须验证从密钥服务器收到的所有信息。可能的指纹范围非常非常大:即使您拥有像 NSA 等机构那样强大的计算能力,也不可能找到碰撞(另一个密钥的相同指纹)。但是,不要相信短密钥 ID。

出于同样的原因,在搜索邮件收件人或用户 ID 时,您可能不会信任密钥服务器的结果。密钥服务器操作员不仅可能返回恶意信息,而且密钥服务器根本不验证任何内容(每个人都可以为任意邮件地址上传密钥)。您始终必须自行验证密钥。GnuPG 中没有默认信任的密钥,甚至 GnuPG 维护者的密钥也是如此。如果您信任列出 Ubuntu 密钥指纹的来源,您可以对其进行签名,让 GnuPG 知道您已验证这些密钥。

还有 HKPS(HTTPs 上的 HKP),但考虑到缺少密钥服务器信息的验证,这并没有改变任何东西;引入 HKPS 只是为了让中间人无法记录您从密钥服务器检索到的密钥。

相关内容