电子邮件是否可以进行非记录式加密?

信息安全 电子邮件 pgp 协议
2021-09-05 12:58:08

即时通讯世界具有非公开加密——这意味着您可以获得身份验证、加密和转发拒绝密钥材料在会话结束后发布,以便窃听者可以伪造消息,从而实现可否认性,即使私钥丢失也是如此。

然而,对于电子邮件,我们只有 GPG/PGP,它提供身份验证和加密,但不提供转发拒绝。如果私钥被泄露,攻击者可以证明消息是你的。此外,破坏一个私钥会破坏使用该密钥发送的所有消息,这与使用会话密钥的 HTTPS 的 PFS 实现不同。

是否可以在 SMTP 的异步多服务器环境中使用非记录式加密?这样的协议存在吗?

如果不是,如果要支持当前的转发拒绝和转发保密方法,SMTP 的下一代替代方案将有何不同?

3个回答

使用 PGP 很容易实现简单的转发否认:只需不签署您发送的电子邮件!任何人都可以发送包含任意内容和所谓发件人的电子邮件;签名专门用于取消前向否认。

但是,如果您不签名,您也会失去完整性。您想要的是能够发送这样一封电子邮件:

  • 收件人可以合理地确定电子邮件来自他认为的发件人,并且在传输过程中没有被更改
  • 但是外部攻击者或收件人自己都没有获得任何可以向第三方证明所谓的发件人确实发送了电子邮件的证据。

像即时通讯这样的连接协议可以通过使用像Diffie-Hellman这样的协议建立的共享秘密来实现这些属性。当 Alice 和 Bob 共享秘密K(并使用身份验证来建立该共享知识),并且 Bob 收到一条带有正确MAC值且使用K的消息时,Bob 知道该消息来自 Alice,因为只有 Alice 和他自己知道K,而 Bob 自己也没有发送。然而,Bob 没有什么“令人信服”的东西可以展示,因为他知道K,他可以伪造所有的消息。

对于电子邮件,没有连接,因此没有半瞬时共享秘密:发件人和收件人共享的秘密值,从未存储在文件中,但仍保留用于多个连续的消息。但是,在OpenPGP 中,第 5.13 节有一种“使用 MAC 加密”的格式该格式也非常灵活,因此可以构建一个包含以下内容的 OpenPGP 消息:

  • 一个公钥加密的会话密钥包,其中包含一个用接收者的公钥加密的随机K ;
  • 一个签名包,其中包括在前一个包上计算的签名(并且针对该包,而不是明文数据);
  • 明文数据,作为“使用 MAC 加密”的数据包。

这样一封电子邮件将体现出具有完整性的前向否认性:从外部可以证明,所谓的发件人在一天之内至少向收件人发送了一封邮件;并且接收者可以显示K并且证明告诉发送者也知道K。但是,没有人可以证明任何特定的消息内容都是用K加密的

不幸的是,尽管OpenPGP 格式可以支持很多组合,但这不一定是现有实现的情况(如GnuPG)。此外,“使用 MAC 加密”数据包使用廉价的自制 MAC(它只是附加数据的 SHA-1 哈希,并加密整个数据),这对我来说看起来不是很安全。我不知道对这种 MAC 结构的广泛研究,但我不会把我的最后一件衬衫押在它的坚固性上。

因此,您可以PGP 中通过身份验证和完整性进行前向否认,但前提是相关软件支持这种特定组合,据我所知,它们不支持这种组合。然而。


在密码学研究中,还有另一种称为环签名的算法可以应用于该主题:使用环签名,发送者(Alice)计算一种特殊类型的签名,涉及她的私钥和接收者的公钥(Bob ),这样就可以从外部证明是 Alice 或 Bob 计算了签名,但究竟是哪一个人做的却是未知的。

目前在 OpenPGP 中没有定义对环签名的支持。

当您特别要求“替代 SMTP”时,您也可以从完全不同的方向解决这个问题。

正如@Thomas Pornin 雄辩地描述的那样,邮件的 OTR 不起作用,因为邮件是一种异步的通信形式,而 Diffie-Hellman 协议需要双方在进行任何加密之前直接相互交谈。

如果您不想更改加密的工作方式,那么您必须更改邮件的工作方式。有两种选择:

  1. 为每个需要发送的通信数据包使用普通的异步电子邮件。正如@Ross Dargan 所说,OTR 非常“健谈”,因此在发送真实数据之前需要交换几条消息。根据发送方/接收方在线的时间,这可能需要一些时间。
  2. 仅通过邮件发送一种邀请,然后直接连接到接收者并继续执行正常的 OTR-for-IM 协议。

为了您的方便,电子邮件客户端可以很好地隐藏这两种情况。(Gmail 已经在其收件箱中混合了聊天和邮件(但没有加密)。)

两者都违背了电子邮件的最初目的,即终端之间的异步通信,这些终端仅在未知和短时间内处于活动状态或连接到网络。但如果你看看今天的基础设施,这无论如何都不再适用了。通常,发送者和接收者(或至少是他们的客户端机器)都是活动的并且 24/7 在线。即使没有,额外的等待时间也只是造成不便的次要原因。

好消息?两个版本都不依赖 SMTP 和 OTR 上的更改协议。您可以轻松地在客户端中实施所有必要的更改。快乐编码!

已经提到过,但 OTR 的作者在他们的论文中提供了非常好的解释:

但是,在这种情况下,Alice 可以使用一种解决方案,称为环签名。数字签名可以证明 Alice 发送了一条消息。环签名扩展了这个概念,可以用来证明给定一组人,该组的某个成员发送了消息,但无法确定是哪一个。因此,Alice 可以发送用集合 {Alice,Bob} 的环签名签名的消息(并加密给 Bob。)在这种情况下,Bob 将能够验证它确实来自 Alice(因为他知道他没有发送它自己),但无法向其他任何人证明这一点,因为他可以很容易地自己生成环签名。环签名已作为 PGP 的扩展实现。