为什么 PGP 密钥服务器不强制执行双重选择?

信息安全 密钥管理 pgp 信任网络
2021-08-17 20:30:47

我在开始使用 PGP 时发现的一件事:当我将我的密钥上传到 SKS 密钥服务器时,密钥服务器没有采取任何行动来验证我是我声称的那个人。

由于 PGP 密钥包含电子邮件地址,至少,密钥服务器可以发送一封电子邮件,其中包含一个链接,必须单击该链接才能使密钥在密钥服务器上生效。然后你至少知道上传 PGP 密钥的人至少控制了他声称拥有的电子邮件地址。

为什么 PGP 密钥服务器不验证声明的电子邮件帐户的所有权?

是的,我确实了解信任网络系统,但是做一个简单的自动化“单击此链接以使您的密钥在密钥服务器上生效”至少需要任何冒名顶替者都可以访问电子邮件帐户,这样的系统可以只需几行代码就可以在密钥服务器上实现。

我不知道的另一件事是,人们如何在密钥签名方验证他人声称的电子邮件?在钥匙签名派对上,人们出示他们的身份证。但是身份证上没有电子邮件地址。是的,今天随着智能手机的发展,您可以向声称的电子邮件地址发送电子邮件并要求对方大声朗读,但是当智能手机不是一件大事并且您无权访问时,人们在 KSP 的表现如何目前在 KSP 上的电子邮件帐户?尤其是防火墙后的电子邮件帐户,例如只能在授权网络内使用的企业或 ISP 帐户?

3个回答

密钥服务器可能永远不会被理解为信任和有效密钥的来源。他们唯一的工作是交换密钥,因此 OpenPGP 的用户可以使用由密钥之间的认证形成的信任网络来验证受信任的密钥。

访问邮件地址并不意味着冒充

信任密钥(对于大多数人而言)不仅仅是验证邮件地址一次。邮件地址往往会改变、失效,甚至会在之后再次分配。

基于信任验证电子邮件地址需要某种形式的失效,例如。移动。但是之后应该如何分发撤销或其他更改?

一些关键服务器可以!

但是,有一些关键服务器这样做,因此扮演着证书颁发机构的角色。有没有想过 PGP 全球目录验证密钥颁发的证书?这些是由PGP 全球目录服务在验证 UID 中包含的邮​​件地址后颁发的,在给定时间后将失效而无需重新批准(六个月,如果我没记错的话),如果认证,您的密钥将从服务器中删除已到期。

但请记住:此密钥服务器与其他密钥服务器不同,因为它提供了非常基本的密钥所有权身份验证,但不支持使用 OpenPGP“方式”使用信任网络验证密钥。

如何定义有效密钥?

由于没有中央“信任机构”,没有证书颁发机构(甚至没有数百个,如在 X.509 中);谁应该定义信任谁?关键服务器运营商?与大多数甚至没有连接到 OpenPGP 信任网络的数百万个密钥相比,这充其量只会将可用密钥的数量减少一个数量级,实际上可能减少到运营商的几十或几百个受信任的密钥。

此外,每个 OpenPGP 用户可能都有自己的规则来决定如何验证密钥,尽管这些规则在大多数情况下可能相当相似。

密钥服务器只是形成一种在 OpenPGP 客户端之间交换数据的方法。并且通常不担任认证机构的角色。

关键服务器同步

大多数关键服务器相互同步SKS 密钥服务器池列表中已经列出了大约 200 个,其中大多数是由甚至互不认识的个人操作的。

拥有这样一个分散的密钥服务器基础设施对于抵御多种攻击(拒绝服务、删除密钥、拥有请求内容的中央日志)至关重要,尤其是来自那些有权访问大部分网络的攻击(ISP、政府)。

但是:在这样一个不相关的服务器互不信任的分布式网络中,如何实现电子邮件地址验证?唯一的可能性(至少,到目前为止没有其他建议)是复制所有内容,每个密钥服务器都必须决定有效性。

您想在给定的(很可能不同且相当短的)时间间隔内将您的每个邮件地址批准到 200 多个关键服务器吗?

了解 OpenPGP 密钥服务器不是证书颁发机构非常重要。他们不负责密钥验证。OpenPGP 采用去中心化信任模型,因此用户的工作是通过直接检查指纹或使用信任网络(就像您已经说过的那样)来验证密钥。

当人们在没有进一步验证的情况下使用密钥服务器下载给定电子邮件地址的密钥时,他们从根本上误解了 OpenPGP 的信任模型。这不是密钥服务器的错。

当然,密钥服务器可以引入基本验证以减少垃圾密钥的数量。但是,这会进一步模糊密钥服务器和 CA 之间的界限,并且可能会产生错误的安全感。有人能够阅读未加密确认电子邮件中的链接这一事实并不能证明任何事情,因为电子邮件很可能在传输过程中被捕获。因此,基于这种方法提供“已验证密钥”的密钥服务器将如履薄冰。

密钥签署方的目的不是检查电子邮件地址。顾名思义,它们是关于keys准确地说:通常情况下,参与者 A 会检查另一个参与者 B 的身份,询问 B 的指纹,然后签署相应的密钥。因此,如果我想与 B 通信并且已经信任 A,我可以使用该签名密钥。当然 B 可能会撒谎并提供虚假的电子邮件地址,但这是一个社会问题,而不是技术问题。如果一个人只是拒绝进行私人电子邮件对话,那么任何协议都无法解决这个问题。

就双重选择而言,您只想对网络中的每台服务器执行一次检查,而不是一次。这意味着即使单个密钥服务器在不检查的情况下接受密钥,检查也不能证明,并且没有简单的方法来验证哪个服务器接受了密钥。可以设计一种不同的协议,其中包括验证哪个服务器接受了密钥,但转换会很困难。

在密钥签名后验证 PGP 密钥的电子邮件地址的常规方法是发送已签名的密钥、加密到该地址的密钥,然后让所有者自己解密并将其上传到密钥服务器。在您从密钥服务器下载它或从密钥所有者那里获得签名副本之前,您不会将其合并到您的常规公钥环中。可以将其视为 TOFU(首次使用时信任)安全性的一种形式,类似于 ssh 密钥的处理方式。有一些工具可以促进这个模型,例如Pius