我是否应该确保我的所有 OpenPGP uid 都已签名?

信息安全 密钥管理 pgp
2021-08-15 08:14:01

我应该确保将所有与我的 OpenPGP 密钥相关联的 uid 都签名,还是让其中一个签名就足够了?

如果 Bob 可以保证 alice@example.com 属于 Alice,那么假设 Bob 也保证 alice@example.org 也属于 Alice,我看不出有任何安全问题,如果 alice@example.com 这么说的话。

3个回答

OpenPGP 依赖于一种称为Web of Trust的公钥基础设施PKI 完全是关于信任委托:您通过使用您已经信任的公钥验证的签名来获得给定密钥和身份之间关联的信心。你“知道”爱丽丝的公钥是你看到的,因为鲍勃签署了它,你可以验证它,因为你知道鲍勃的公钥;你知道 Bob 的公钥,因为 Charlie 签名了它。

信任委托不能很好地垂直扩展。在 Alice/Bob/Charlie 场景中,您认识 Charlie(您遇到了他)并且他给了您他的公钥,因此您非常确定 Charlie 的密钥,正如您所知,是正确的。因此,您可以验证 Charlie 通过 Bob 的密钥计算的签名(即,对“name=Bob,key=...”对的签名)。因此,您可以对 Bob 拥有该密钥有信心,但这需要 Charlie 诚实且不要太轻信。这可能有点太多了。知道查理的钥匙并不意味着查理签名的任何东西都是福音。然而你遇到了查理(身体上),所以也许你可以相信他。第三步,Bob 签署 Alice 的密钥,你需要 Charlie 提供的更多信息:事实上,你从未见过 Bob。因此,通过信任 Bob 的签名而不是 Alice 的密钥,你实际上是在赌鲍勃是诚实的,不会轻信的;因此,您不仅要依靠查理诚实,还要拒绝签署其他不同样诚实和不轻信的人的钥匙。所以查理必须擅长心理学和评估其他人的可靠性。

所以,综上所述,认证步骤越多,名称/密钥绑定就越松散。有两种方法可以解决这个问题:

  • 在分层 PKI(如 X.509)中,名称/密钥绑定(即保证密钥确实属于给定实体)和信任委托是不同的;只有在进行彻底调查并通过具有法律约束力的合同以完全与律师兼容的语言列出责任后,有权主张此类约束力的人(证书颁发机构)才会接受委托该权力。这使得证书树可以接受,深度可达大约三到四个证书。

  • 在 Web of Trust PKI 中,认证链(签名密钥链,从您知道的密钥到您要使用的密钥)中的每个“链接”都被授予一定程度的可靠性,并且您累积许多链,直到累积的可靠性达到预设水平。WoT PKI 依赖于群体效应:一个积极的攻击者可能会欺骗一两个容易上当的用户,但不会欺骗整个“社区”。认证图应该是强连接的。

因此,如果 Bob 签署了 alice@example.com 的密钥,而 alice@example.com 签署了 alice@example.org 的密钥,那么这是一个额外的步骤,因此是一个额外的不可靠性,必须由其他链来补偿-- 链必须以 alice@example.org 结束,而不经过 alice@example.com。由此,我们得出结论,您应该对所有 UID 进行签名:这将使您的密钥验证更加容易。

如果 Bob 愿意将该级别的信任委托给 alice@example.com,那么这听起来很合理。

OpenPGP 有两个值得信赖的维度。有一个问题是相信密钥确实属于所讨论的人,然后是相信这个人会照顾他们的密钥。如果 Alice 对她的密钥不小心,那么攻击者可能会让她在他的控制下签署一个密钥,或者他可能会窃取她的私钥。出于偏执的缘故,我建议将所有内容都签名。