WhatsApp 的新群聊协议是如何工作的,它有哪些安全属性?

信息安全 加密 即时通讯 whatsapp
2021-09-04 19:16:59

到目前为止,每个人都注意到WhatsApp 最近推出了完整的端到端加密,用于直接通信、媒体附件和群聊

我已经阅读了他们的白皮书 (PDF)并注意到与Signal 的群聊有所不同,其中 Signal 将群消息发送给所有成员本身(在加密的标头中有一个特殊标志),而 WhatsApp 将消息发送到分发的服务器它。

现在我很困惑 WhatsApp 的群聊协议是如何工作的,因为它不能使用简单的人与人之间的协议(就像 Signal 那样),而是使用一种有点复杂的基于“棘轮”的密钥推导(我认为)以及什么有利的WhatsApp牺牲了安全属性。

那么群聊协议具有哪些安全属性以及它是如何工作的(在高层次上)?


因为“安全属性”有点通用,所以这里是我要求的安全属性列表:

  • 被动安全(窃听者无法破解加密)
  • 主动安全(中间人无法在第一次设置后不被注意地破解加密)
  • 前向保密(今天的秘密加密密钥的妥协不会破坏过去攻击者记录的消息的安全性)
  • 似是而非的否认(没有确凿的证据表明在 X 过去后立即发送了特定消息)
  • 成绩单的一致性(有一个“硬”证据表明小组中的每个人都看到/看到了相同的消息)
2个回答

首先,从他们的论文

发送到 WhatsApp 群组的消息建立在上述成对加密会话之上,以实现对发送到群组的大多数消息的高效服务器端扇出。这是使用信号消息协议的“发送者密钥”组件完成的。

WhatsApp 群组成员首次向群组发送消息时:

  1. 发送者生成一个随机的 32 字节链密钥。
  2. 发送者生成一个随机的 Curve25519 签名密钥密钥对。
  3. 发送者将 32 字节的链密钥和来自签名密钥的公钥组合成一个发送者密钥消息。
  4. 发件人使用前面解释的成对消息传递协议单独加密组中每个成员的发件人密钥。对于该组的所有后续消息:
  5. 发送者从链密钥派生消息密钥,并更新链密钥。
  6. 发件人在 CBC 模式下使用 AES256 对消息进行加密。
  7. 发送者使用签名密钥对密文进行签名。
  8. 发送者将单个密文消息传输到服务器,服务器将服务器端扇出到所有组参与者。消息发送者的链密钥的“散列棘轮”提供前向保密。每当小组成员离开时,所有小组参与者都会清除他们的发件人密钥并重新开始。

我想说这里的关键点是第 4 点:发件人使用前面解释的成对消息传递协议单独加密组中每个成员的发件人密钥

这是建立在一对一协议之上的巧妙改编:使用它将共享密钥分发给组中的每个单独成员,因此组可以使用服务器以提供有效的“扇出” (以及 blob 存储),而服务器不知道所需的私钥。

“那么群聊协议具有哪些安全属性以及它是如何工作的(在高层次上)?”

至于它是如何工作的,我认为在其他人进行全面(应用)分析之前,该论文的详细程度与您目前所能找到的一样多。

至于它提供的功能...

  • 前向保密:所描述的棘轮机制提供了这一点(或者他们声称)

  • 被动:第 4 点中的“发送者密钥”分发方法使得被动攻击几乎不可能:请记住,被动方必须通过噪声管道加密层(到 WhatsApp 服务器)的每一方组,并且可能需要多个存在点,这有助于访问组中每一方的流量......所以你几乎可以排除那里的任何人,除非他们是主要的骨干供应商或 NSA。

  • 主动攻击:我想说对组中的一个设备进行侧通道攻击是可行的,但是如果您对设备具有这种级别的侵入性访问权限(因此很可能是它的所有者!),一把钳子和与设备所有者交流 5 分钟可能会更有成效。

  • 成绩单一致性:所有消息都使用 HMAC 来确保完整性(步骤 7)

  • 似是而非的否认:如果有的话,他们的新实现提供的所有额外安全性使得很难否认特定用户发送了消息......

根据我在白皮书中收集到的信息,群组消息在群组内被加密。Sender Key每个参与者都分发和使用相同的内容,这使得消息未经构造验证。

棘轮如何在发送者之间同步,不知道。

特性:

  • 被动安全:是(窃听者无法破解加密)
  • 主动安全性(中间人在第一次设置后无法在不注意的情况下破坏加密):是的,即使他试图冒充服务器,因为服务器永远不会持有任何密钥。
  • 前向保密:是的,通过棘轮功能。
  • 似是而非的否认:是的,每个人都使用相同的对称密钥进行签名和加密(据我所知)。
  • 成绩单一致性:是的,因为他们必须被通知Chain Key更改。

白皮书与协议的技术描述相去甚远。所以我会非常谨慎地接受这个。