让我尝试总结一下用于群聊的端到端加密消息协议的前景:
像PGP这样的协议已经存在了一段时间,它通过简单地使用随机生成的对称密钥加密内容,然后使用每个接收者的公钥对该密钥进行非对称加密来提供“群组消息传递”。这些协议只发送一次加密内容,但将加密密钥加密给组中的每个成员。请注意,与 PGP 类似,此方法不提供任何完美的前向保密、可否认性或对话完整性(因此没有记录一致性)。
引入 OTR 是为了解决 PGP 的一些缺点,改进了完美的前向保密性、对话完整性和可否认性。OTR 的作者 Ian Goldberg 还写了一篇关于该协议的多方变体的论文,名为mpOTR。mpOTR在设计时考虑了 XMPP 传输,并且在设计中本质上是同步的,这意味着每个组成员都应该随时在线协商新的密钥材料。所描述的协议不提供会话中的完美前向保密,并且尚未大量部署。N+1Sec是一个类似的协议,但有一些改进。请注意,这些协议具有很多算法复杂性并且往往难以扩展,尤其是当您将延迟添加到组合中时。
然后你就有了一整类协议,我们简称为N 次协议,因为它们只是发送每条消息。这些协议具有重用现有一对一协议的优势,当您已经拥有一个可以为您提供诸如异步完美前向保密等不错功能的通道时,这非常方便。在这种情况下,组结构不是密码概念,失去了密码保证但降低了算法复杂性。Open Whisper Systems 博客有一篇很棒的文章,介绍了为什么 Signal 这样做而不是 mpOTR 样式的消息传递。此类协议违反了您的第二个要求,因为它们是我们所说的“客户端扇出”,客户端加密并发送所有不同的消息。
WhatsApp 采用了对 Signal 的优化,您可以在他们的名为Sender Keys的白皮书中找到它,它具有“服务器端扇出”。它在设置时使用了N 次,但在第一条消息之后,该组的每个成员都可以向该组发送一条消息。该协议通过使用散列棘轮具有完美的前向保密性(但不提供完美的未来保密性)。脚本一致性由服务器端强制执行(因为服务器端扇出),但不是从加密的角度来看。
这些是我见过的正在实施的协议类型。在可用性和加密研究方面都存在挑战,即如何在组设置中将异步性与完美的未来保密性和转录一致性相结合。
如果您想要一个同时满足您的两个要求的协议,我认为您正在寻找类似 Signal 协议的Sender Keys变体的协议。