完美前向保密是否适用于群聊或聊天记录?

信息安全 加密 即时通讯
2021-08-11 22:47:40

我很好奇完美的前向保密是否可以在像 WhatsApp 这样的应用程序中工作,您希望在该应用程序中查看最后一条消息之前的消息或同时查看多条消息(如在群聊中)。

据我了解,完美的前向保密每次都会更改密钥,因此如果最后一个密钥丢失,未使用该密钥加密的旧消息不易被解密。如果是这样的话,我确定是这样,你只能看到最后一条消息

2个回答

我认为您的意思是完美前向保密,WhatsApp在其端到端加密中确实支持。PFS 对于聊天应用程序来说很难,因为连接的不确定性,这也是许多聊天应用程序忽略它的原因。

在正常的 PFS(如 TLS 或 SSH)中,会建立一个持续的连接,并且每隔这么多字节或分钟重新计算一次密钥。聊天应用程序无法确认收到消息(或任何数据)。事实上,通道的另一端可能从未向您发送任何数据,或者一直处于离线状态。无论如何,作为发件人的您应该能够保护您发送的消息,而不管另一端如何。

为了克服这整个问题,协议如OTR en Axolotl使用prekeys这些预密钥是预先计算的 Diffie-Hellman(或 EC,如 Curve25519)密钥。预先计算几百个键是很常见的。这些预先计算的密钥对中的所有公钥都发送到中继(聊天)服务器,并与您的公共身份密钥一起公布(公共身份密钥实际上是您对其他人的“名字” )。既然公共预密钥在中继服务器上,任何想要向您发送消息的人都可以选择您的一个预密钥并计算共享密钥。

然后使用共享密钥对消息进行加密和验证,并与预密钥 ID 一起发送给接收方。一旦接收者从服务器拉取消息,它就可以使用相应的私有预密钥对消息进行解密。生成一个新的预密钥对并将其发送到服务器以取代它。这个系统永远存在。

发送者和接收者都必须跟踪他们所有仍在使用的预密钥。这整个算法被称为双棘轮

使用Axolotl 的应用程序:

  • WhatsApp
  • 谷歌 Allo
  • 脸书信使
  • 信号
  • Viber(声称)

更新

该协议是自我修复的,因为每条消息都用另一个密钥加密。当消息被解密时,这个密钥不再是已知的,消息本身存储在本地应用程序数据库中。诀窍来了:消息没有按顺序链接,所以最多只有一个预密钥(一条消息)被泄露。这对其他消息没有影响。每条消息都用另一个密钥加密(完全保密)。消息本身不相互依赖,因此对最后一条消息的攻击不会使攻击者控制未来的通信(未来保密)。注意:该协议也有一些缺点,例如消息顺序或丢失消息。

更新 2:群聊

从协议的角度来看,没有“群聊”之类的东西。它只是将同一条消息多次发送给人们,就像电子邮件也可以发送给多个收件人一样。这些消息中的每一个都使用接收者的预密钥加密。例如,如果群组中总共有 4 个人,包括您,那么同一条消息会发送 3 次(技术上只发送一次,包含 3 条消息)给每个群组成员。因此,需要使用您和接收者之间的共享秘密对每条消息进行签名和加密。笔记:最新版本的 TextSecure 协议可以通过对消息进行一次加密并对其进行多次签名来稍微优化此过程。有人提议为较大的组引入临时组密钥。据我所知,这还没有进入 WhatsApp。

如果有新用户加入聊天,则该用户没有历史记录,因为聊天消息保存在本地设备上(显然)。将此视为一个优势,该组的每个用户都有责任将消息保密。同步解决方案将;1)增加攻击面,2)增加密码系统的复杂性,3)移动消息的所有权。

在当今大多数 E2E 应用程序中,PFS 仅适用于在途。它们的静态通常只是对称加密,加密密钥存储在本地设备中(基本上未加密)。搜索历史消息就很简单了。

一些应用程序允许用户提供额外的密码(存储在用户的大脑中)以加强本地加密。