如果我使用 Gmail 向某人发送纯文本电子邮件,包括我的 PGP 公钥块,这是否安全?

信息安全 加密 电子邮件 pgp
2021-08-11 11:59:58

多年来,我一直试图找出“实用加密”(又名“PGP”)。据我所知,这并没有根本性的缺陷:

  1. 我知道乔的电子邮件地址:cool_joe@gmail.com。
  2. 我有一个 Gmail 电子邮件地址:me_78@gmail.com。
  3. 我的电脑上安装了 GPG。
  4. 我向 Joe 发送了一封新电子邮件,其中包含从 GPG 中提取的“PGP PUBLIC KEY BLOCK”。
  5. Joe 收到了它,现在可以使用我的“PGP PUBLIC KEY BLOCK”加密文本,回复我的电子邮件,然后我可以解密它并阅读他的消息。在此消息中,Joe 包含了他自己的此类 PGP 公钥块。
  6. 我使用 Joe 的 PGP 公钥块来回复他的消息,从那时起,我们只发送使用彼此的密钥加密的实际消息(无密钥),这些消息存储在我们的 PC 上。

这有什么根本上的错误/不安全吗?一些担忧:

  1. 通过简单地操作电子邮件服务,Google 知道我的公钥(但不知道 Joe 的,因为它嵌入在加密的 blob 中)。不过,这实际上并不重要,不是吗?他们不能用我的公钥做任何事情吗?它唯一可以用来加密只有我可以解密的单向文本,因为只有我的计算机上有私钥
  2. 如果他们决定操纵我的初始电子邮件消息,更改我发送给 Joe 的密钥,那么我将无法读取 Joe 的回复,因为它不再使用我的公钥加密,而是使用 Google 截获的密钥。这意味着除了我最初的电子邮件和他的第一个回复(谷歌可以阅读)之外,乔和我不会进行任何对话,但在那之后,由于我无法阅读/解密他的回复,什么都没有发生?
4个回答

正如Steffen 已经说过的,你安全的致命弱点是确保你在和乔说话,而乔确保他在和你说话。如果初始密钥交换遭到破坏,第三方将能够读取您的消息、重新加密并发送给 Joe,反之亦然。

除非您解决此问题,否则加密无关紧要。这就是为什么在 HTTPS 世界中,有一个名为 CA(证书颁发机构)的特殊实体。CA 是为了确保 Google 无法获得 Facebook 的证书,等等。因此,除非恶意 CA 颁发了证书,否则您可以导航到 Google,并确保您在 Google 上。

初始密钥传输是关键传输,可以通过以下几种方式完成:

  • 亲自
  • 通过带外消息(推文、Instagram 帖子、蜗牛邮件)
  • 由共同的朋友推荐(您认识比尔,保存了他的密钥,比尔认识你们俩,并共享两个密钥)

在此交换之后,您的设置非常可靠。

如果他们决定操纵我的初始电子邮件消息,更改我发送给 Joe 的密钥,那么我将无法读取 Joe 的回复,因为它不再使用我的公钥加密,而是使用 Google 截获的密钥。这意味着乔和我不会在最初的电子邮件之外进行任何对话......

只要您可以确定他们只能在中间人处理初始邮件,那么这就是事实。但是,如果他们也可以在以下邮件中进行中间人处理,那么他们可以简单地解密从 Joe 发给您的消息,因为它实际上已加密给他们,并且可以为您再次加密,因为他们知道您的公钥。

要为电子邮件设置安全通信,您需要已经有一些其他安全通信通道来交换或至少验证公钥,否则 MITM 可以简单地声明这些身份而没有人可以检测到这一点。

只要您可以信任电子邮件提供商(即 Google),这种方法就非常安全。

关于 MITM 攻击的所有其他答案通常都是正确的。在这种特殊情况下,当在同一个提供商内操作时,可以成功地进行额外的考虑。

1. 乔不能(轻易)被冒充

从十年前开始,任何人都可以向您发送一封来自“一个名叫乔的人”的精心设计的电子邮件,甚至可以donaldjaytrump@whitehouse.gov使用看起来是乔的公钥的邮件。最小的提供商(非常非常小的电子邮件服务器)可能不会执行 SPF 策略。

在同一个电子邮件提供商中,Gmail 也是如此,会进行额外检查以确保没有人可以伪造 Gmail 发件人地址。必须破解 Joe 的帐户,这超出了范围。

简而言之,假设 Joe 不会被黑客入侵就足以说明 Joe 不会被恶意第三方冒充,并且来自 Joe 的邮件实际上来自Joe 的电子邮件帐户中的 Joe。

2. 你(必须)信任你自己的提供者

由于您使用相同的提供商,我必须假设您信任它。无论谷歌在这种特殊情况下如何值得信赖,从安全的角度来看,都只剩下一个攻击向量。提供者应该足够流氓,用伪造的公钥更改 Joe 的公钥,从而破坏安全通信。

我的意思是,唯一能够破坏对话安全的行为者就是Google Inc.他们自己,因为第 1 点和电子邮件不会离开他们自己的系统。

回答您的疑虑

Google 知道我的公钥(但不知道 Joe 的,因为它嵌入在加密的 blob 中)。不过,这实际上并不重要,不是吗?他们不能用我的公钥做任何事情吗?它唯一可以用来加密只有我可以解密的单向文本,因为只有我的计算机上有私钥?

假设第 2 点被打破,Google 可以冒充并使用他们知道的密钥更改您自己的公钥,并根据他们的意愿重新加密和重新签署消息。

他们只有一次行动的机会,那就是你的第一封电子邮件“你好乔,这是我的公钥 ABCDEF”

如果他们决定操纵我的初始电子邮件消息,更改我发送给 Joe 的密钥,那么我将无法读取 Joe 的回复,因为它不再使用我的公钥加密,而是使用 Google 截获的密钥。这意味着除了我最初的电子邮件和他的第一个回复(谷歌可以阅读)之外,乔和我不会进行任何对话,但在那之后,由于我无法阅读/解密他的回复,什么都没有发生?

谷歌将不得不窃听和转码你交换的信息。如果发生这种情况,您将无法检测到攻击,因为两者最初都信任错误的密钥。


电子邮件 MITM 示例(与 Alice、Bob、Charlie 一起)

查理是一个流氓电子邮件服务提供商

爱丽丝(通过查理):

你好 Bob,这是我的公钥 ABC983(随附的密钥材料)

Charlie 生成一个新的密钥对并替换消息

你好 Bob,这是我的公钥 ZZZ765(随附的密钥材料)

Bob 接收到文本,用 key 加密新消息ZZZ765,这是一个流氓密钥,并将 ZZZ765 存储在他的信任库中。然后将以下电子邮件发送给查理进行交付

很高兴认识你 Alice,请使用 DEX258 作为我的密钥。

---使用ZZZ765加密,使用DEX258签名---

Charlie 截获电子邮件,使用 ZZZ765 解密以获取明文,然后生成新的密钥对。

查理将以下电子邮件发送给爱丽丝

很高兴认识你 Alice,请使用 FGN754 作为我的钥匙

---使用ABC983加密,使用FGN754签名---

Alice 将信任其信任库中的流氓密钥FGN754

双方将发誓,直到他们在酒吧见面的那一天,他们已经真正安全地交谈过。

令他们惊讶的是,他们会发现他们使用了错误的密钥,并且原始电子邮件与他们的“已发送邮件”文件夹不同。故事的结局

在您的场景中,您发送给 Joe 的 PGP 密钥可以在传输过程中被操纵,除非您使用PGP 内置的以下解决方案之一,否则Joe 将无法注意到它

初始公钥交换至关重要,但有解决方案。对于 X.509 证书(用于 S/MIME),使用分层组织的证书颁发机构可以解决相同的问题。在该系统中,如果证书由受信任的 CA 签名,则可以信任该证书。PGP 方法是信任网络,这或多或少意味着任何人都可以签署密钥,而该签名是否可以信任取决于您对签名者的个人信任。

因此,要将这种机制应用于您的问题,如果您的密钥由 Joe 信任的第三方签名,那么不可能以一种不会被注意到的方式操纵传输中的密钥,因为操纵者将无法以第三方的名义签署被操纵的密钥。请注意,如果密钥由受信任的第三方签名,则可以从任何来源获取密钥,这就是 PGP 密钥服务器应该工作的方式。

如果没有您或 Joe 信任的第三方,那么您仍然可以将您的公钥发送给 Joe,但您必须验证 Joe 收到的密钥在途中没有以其他方式被修改。为此,您可以告诉他您的密钥指纹,但您需要在独立频道上执行此操作。例如,在网站上发布指纹并不少见。除非该网站由 Google 托管,否则它不太可能被操纵以适应被操纵的密钥。