如何验证 OpenPGP 密钥的所有权?

信息安全 公钥基础设施 pgp gnupg
2021-09-09 19:46:59

我添加了 Diceware creator 的公钥(请作为实例使用),我通过下载 diceware.wordlist.asc 添加了它,我没有他的密钥,无法立即找到它来导入它到 GnuPG。

所以我即兴创作gpg --verify ~/Desktop/diceware.wordlist.asc

这表明该文件是由密钥 ID 签名的:AC3184A1(短密钥 ID,我知道……但这就是 gpg 向我展示的内容!)

我接受了它并做到了gpg --recv AC3184A1我现在有。

如何确保此密钥归 Arnold G. Reinhold 所有?

当然,它会在 gpg 中显示密钥 ID 所有者中的名称,并列出在此处找到的相同指纹。但这些都不是一种值得信赖的验证方式。指纹位于不受信任的页面上,据我所知,它在到达我的电脑之前在传输过程中被更改。并且名称只是我可以使用任何 gpg 客户端复制自己的任意数据。

我记得有一次我导入了某人的密钥,他们告诉我查看“信任网络”签名。我一直在尝试找到该命令,但我无法确定地确定它。我找到了这个命令,我认为它是 WOT 命令:gpg --list-sig AC3184A1如果发出它会产生这个:

pub   1024R/AC3184A1 1995-02-23
uid                  Arnold G. Reinhold <reinhold@world.std.com>
sig          AC3184A1 1995-02-23  Arnold G. Reinhold <reinhold@world.std.com>
sig          5F63A5B9 1995-03-27  [User ID not found]
sig          0959ECA9 1995-12-02  [User ID not found]
sig          0FF98BC9 1997-04-20  [User ID not found]
sig          E3EF9085 2001-11-28  [User ID not found]
sig          AC48A400 2001-10-22  [User ID not found]
sig          066030C3 2001-11-28  [User ID not found]
sig          D782FE45 2002-03-31  [User ID not found]
sig          BBD264A6 2004-01-02  [User ID not found]
sig 1        87D1CE0F 2004-03-04  [User ID not found]

但所有这些都是[未找到用户 ID]。

再说一次,我怎样才能确保钥匙是给谁说的呢?

PS。请不要进入 1024 位密钥弱点。我知道这个。

更新:

假设我在这里做的一切都是正确的,并且我发现gpg --list-sig AC3184A1如果发布会产生这个:

pub   1024R/AC3184A1 1995-02-23
uid                  Arnold G. Reinhold <reinhold@world.std.com>
sig          AC3184A1 1995-02-23  Arnold G. Reinhold <reinhold@world.std.com>
sig          5F63A5B9 1995-03-27  [PEOPLE I TRUST@TRUSTED.ORG]
sig          0959ECA9 1995-12-02  [PEOPLE I TRUST@TRUSTED.ORG]
sig          0FF98BC9 1997-04-20  [PEOPLE I TRUST@TRUSTED.ORG]
sig          E3EF9085 2001-11-28  [PEOPLE I TRUST@TRUSTED.ORG]
sig          AC48A400 2001-10-22  [PEOPLE I TRUST@TRUSTED.ORG]
sig          066030C3 2001-11-28  [User ID not found]
sig          D782FE45 2002-03-31  [User ID not found]
sig          BBD264A6 2004-01-02  [User ID not found]
sig 1        87D1CE0F 2004-03-04  [User ID not found]

我如何确保 [PEOPLE I TRUST@TRUSTED.ORG] 并非所有人都是伪造的身份?我现在可以制作 [PEOPLE I TRUST@TRUSTED.ORG] 密钥 ID 并发布它,不是吗?

PS:这是我在这个问题中使用的Diceware 列表

1个回答

开始之前的重要提示:在 OpenPGP 中,没有人告诉你该信任谁您必须自己执行此验证,但有一些工具(如信任网络中的认证)可以帮助您执行此操作。出于同样的原因,我无法为您提供有关验证给定 OpenPGP 密钥的分步教程,但只能就如何自行验证它提供一些建议。

您有两种方式来验证密钥的所有权:直接或通过信任网络。

直接验证 OpenPGP 密钥

这是比较明显的。找到所有者,并通过可信赖的渠道询问他。与他会面可能涉及的麻烦最少——除了确定约会和旅行。

如果这太麻烦或太昂贵(可能会如此),您可以采用其他方法来验证指纹(根据您的偏执程度进行选择,并非所有这些方法都适合您的用例)。

  • 对照网站进行验证。如果它没有正确加密或者您不信任证书,还可以考虑针对诸如archive.org 之类的网络缓存进行验证,该缓存还包含网站更改的时间线。考虑使用多个连接,可能来自不同的国家(询问某人,使用 VPN,代理,...)。
  • 针对完全未连接的通道进行验证。例如,指纹可能曾经印在产品包装盒的某个地方,或者包含在受信任的地方:例如,是否有 Debian 软件包也在文档中的某个地方列出了指纹?
  • 在密切相关的新闻组和邮件列表中搜索已签名的帖子。当有签名帖子的历史并且没有人哭泣“嘿,那不是我!”时,这也表明密钥可能属于它声称的人。
  • 通常尝试尽可能多地找到关键是正确的迹象,尤其是随着时间的推移。还要尝试查找是否有其他似乎属于所有者但未广泛使用的密钥新闻组帖子,邮件列表,如上)。

最后一点只能表明一切都很好,您接受多少取决于您的需求。

通过信任网络进行验证

另一种方法是通过信任网络进行验证。PGP pathfinder是构建信任链的一个有用工具,我将一个示例与从我的密钥到 Anold Reinhold 的密钥的信任路径链接起来(顺便说一句,它的用途有限)。

为了验证整个信任网络,您必须建立信任路径,这意味着必须有一种方法来验证中间的每个步骤。如果有一个有效的密钥带有传出认证,则该认证的密钥也将是有效的;还取决于最大路径长度、认证级别和信任设置。我在“关于信任的 gpg 输出的确切含义是什么? ”中汇总了更多细节

如果您无法建立信任路径,因为您不认识其中任何人,您可以选择受信任的组织。要么获取所有颁发证书的密钥,要么查询已经知道所有证书的密钥服务器您认识任何知名且值得信赖的组织吗?您可以接受信任他们的员工/成员,并能够通过组织的网站验证他们的指纹。您认为哪些值得信赖完全取决于您的个人意见。John R. Levine从不同的密钥颁发了多个证书,并且以其出版物和工作而闻名,因此如果您能够通过上面列出的一些描述的措施来验证他的密钥,这可能是一个很好的起点。

引导这些信任路径的一个好方法是在不同的场合定期访问密钥签名方

通过证书颁发机构进行验证

这实际上与信任网络非常接近,并且确实使用了相同的工具。证书颁发机构(也从 X.509 中得知)根据一组规则颁发证书。如果您信任 CA,则可以信任他们的所有证书。OpenPGP 环境中此类 CA 的示例是

  • CAcert(他们还签署 OpenPGP 密钥)
  • Heise Verlag(德国网站,一家经营一些德国计算机科学杂志的公司,也做一些 CA 服务)
  • PGP 全球目录(仅经过验证的邮件地址,而非身份)