可以在没有 IRL 会议的情况下签署 PGP 密钥吗?

信息安全 密码学 验证 pgp gnupg
2021-08-21 09:39:46

[PGP] 可能会因过度肛门而瘫痪。菲尔齐默尔曼

前言

我正在建立自己的信任网络也就是说,我希望人们(PGP 用户……)能够——相当地——确定,通过使用我的公共 PGP 密钥,他们实际上是在与真实的我交流(这可以通过检查谁签署了我的公共密钥来实现,如果他们看起来值得信赖,那么我也可以)。

当我的 [public] 密钥将有足够的可信签名时,我自己在其他人密钥上的签名将更有意义。糟糕的示例场景:我签署了 Mallory(一个坏人)的密钥,然后一年后,我的密钥由 Debian 维护者(一个非常值得信赖的人)签署。如果那个人是受信任的并签署了我的密钥,那么这意味着我也受信任;如果我也被信任,那就意味着马洛里也被信任,对吧?

问题

我使用以下 GPG 命令(在 Linux 上)签署其他人的公钥:

gpg --ask-cert-level \
    --cert-policy-url http://diti.me/pgp/ \
    --sign-key 0xFFFFFFFE

上面的命令使我能够使用策略 URL签署 0xFFFFFFFE 密钥(提供有关我如何验证和签署密钥的信息)并允许我选择:

How carefully have you verified the key you are about to sign actually belongs
to the person named above?  If you don't know what to answer, enter "0".

   (0) I will not answer. (default)
   (1) I have not checked at all.
   (2) I have done casual checking.
   (3) I have done very careful checking.

问题是:我可以用 3 级签署我认识多年的朋友的钥匙吗?不用说我信任他(以及他在密钥签名方面的认真态度),并且仍然会进行仔细检查(扩展询问,在他的域名记录中添加 TXT 字段,等等?)。

Phil Zimmermann 希望人们使用 PGP,而不仅仅是极客我想避免他所谓的“过度肛门”,同时仍然被认为是一个严肃的人(因为信任网络很重要)。因此,我想将两者混合在一起:为我可以准确验证身份和密钥的朋友简化验证过程,同时又不会破坏我的 WoT。

希望我的问题和担忧是有道理的。

3个回答

最后,你可以签任何你想签的人没有人可以控制你,也没有人可以检查你在做什么(以及你是如何做的)。

如果我可以确定我通过安全通道收到未篡改的密钥,我会考虑签署一个(对我而言)知名人士的有效密钥。如果您完全确定能够识别他的声音或进行其他一些检查,这是正确的人(例如,通过提出问题,只有他能够在电话中回答),我会很好地签署此人的密钥通过这个已建立的可靠连接向我发送(例如,通过对着电话说话)。我不会对在密钥服务器上找到的密钥进行签名(每个人都可以上传任意 UID 的密钥,查看所有总统的密钥)或在未签名的电子邮件中收到(没有另一个已经受信任的密钥的签名) .

信任身份

当您使用该gpg sign命令在您朋友的密钥上给出“sig3”时,您证明您(非常)确定他确实是他假装使用他的 UID 的人。当 Debian 维护者签署您的密钥时,他证明您就是您伪装的那个人。

目前为止就这样了。您和 Debian 维护者都没有就他们是否信任您(或您朋友)仔细执行密钥签名的能力发表任何声明。

您提到的签名政策可以帮助其他人决定他们如何信任您发布的签名。

信任个人的能力和动机(“担保”)

如果您确定您的朋友能够可靠地签署其他密钥,则可以使用gpg trust. 使用它,您可以命令 GnuPG 将您朋友发出的签名视为您发出的签名。

此信息仅对您自己有效;它既不包含在密钥服务器中,也不包含在以其他方式导出的密钥中:

密钥的信任级别是您单独分配给密钥的东西,它被视为私人信息。导出时未与密钥打包;它甚至与您的密钥环分开存储在单独的数据库中。(来自GnuPG 手册

拥有(多个)信任路径(“身份签名”,我在这个答案中首先解释的那种信任)可以理解为暗示一切都应该没问题,但请记住,您现在信任信任链中的每个人。大多数人都是诚实的,并且能够很好地执行有效的签名,但是您是否从未被您意想不到的人察觉到?如果有人真的有理由欺骗你,他可能会以某种方式在一些奇怪的路径上获得信任链。


有一篇关于 OpenPGP 信任的优秀文章:There's Trust and Then There's Trust and Then There's Trust

如果我事先不认识你,那么对我来说,相当确定我与真实的你交流又有什么意义呢?据我所知,我无法确定你是否存在,只要你不与我互动,你的存在就与我无关。

这是 PGP 信任网络的主要、重大、公然失败:它试图确保公钥与身份的强链接,而不是首先定义一个一致的“身份”概念。

例如,现在,通过这条信息,我开始与我可以假设为(似乎是)某个有知觉的存在(假设为人类,然后)以某种方式选择,对于那个问题,使用“Diti”的笔名"还有一张看起来有点像鸭子的脸。如果我想与该人类实体交换机密电子邮件,那么我将希望将消息发送给“在 security.SE 中编写该特定问题的 Diti”。是我想要使用的身份概念。PGP 的密钥签名会将一些我事先不知道的公钥链接到我也不知道的电子邮件地址!为了有效,“签署密钥”的人必须签署如下声明:“我,bob@example.com,保证公钥 0xA7C083FE 确实属于写了‘可以签署一个没有 IRL 会议的 PGP 密钥?2013 年 9 月关于 security.SE 的问题”。

你可以遇到地球上所有的 Bob 并让他们都签署你的密钥,具有最高的“检查级别”,它不会给我任何有用的信息。将您的私钥链接到您的姓名或电子邮件地址对我来说没有任何意义,除非我出于其他原因已经认识您——此时,自动链接完全陌生的 WoT 将失去任何相关性。


同样的问题还有另一面:你为什么要以如此坚定的力量保证给定的公钥确实是你的?如果有效,它只会使您所有已签名的消息都可以追溯到您,并可以用作对您不利的证据。这就像把自己的铲子带到墓地一样。

数字签名的情况下,任何人都不应积极追求产生签名的可能性。我们想要的是其他人生成签名。


因此,我的回答是,您可以使用您希望的任何“策略级别”来签署密钥;它不会破坏 PGP 的信任网络,因为实际上没有什么可以破坏的。

(这是一种祝福。PGP 的信任网络工作的世界是一个每个人都被唯一识别、在空间和时间上精确定位、并且全球负责的世界。当你归结为它时,那将是非常奥威尔式的,即真棒但很吓人。)

事实上,信任网络并不是非常安全。绝大多数进行密钥签名的人都是基于对个人 ID 的相当粗略的了解。得到一个有点令人信服的假护照,你可以很容易地得到你想要的任何名字的签名。

与认识多年的人相比,看起来确实很安全。

您要做的是确保提出请求的人就是您认为的那个人。如果您认识的人亲自让他们通过电话读出密钥指纹,那么除了任何在线检查之外,这可能是合理的。这有助于验证这确实是您认识的人,而不仅仅是窃取其帐户凭据的人。

IMO 信任网络所做的主要事情是防止“互联网混蛋”。