更安全的加密群聊:深入解析MLS协议与树状密钥管理

本文详细解析了端到端加密群聊协议MLS的技术架构,对比了三种密钥管理方案,重点介绍了基于树状结构的TreeKEM算法如何实现对数级效率提升,并探讨了当前协议存在的开放性问题和Rust实现molasses的实践经验。

更安全的加密群聊 - Trail of Bits技术博客

MLS实现助力协议规范完善

我们开发的Rust实现项目molasses主要通过单元测试和互操作性测试发现了MLS草案6规范中的关键错误。例如规范存在导致无法添加群组成员的设计缺陷,这类问题必须通过自动化测试才能发现。通过持续的问题发现/修复循环,我们有效推动了协议规范的迭代优化。

加密群聊构建原理

MLS协议设计核心在于解决效率问题。与常见聊天应用不同,MLS是底层协议而非完整应用,不处理群组权限等高层逻辑,仅关注消息传输和成员移除机制。

典型案例场景

Wilna团队需要策划惊喜活动,但通信平台管理员Vince能监控所有服务器消息。传统中心化群聊方案存在隐私泄露风险,需要满足:

  • 成员可广播/读取消息
  • 中转服务器无法解密内容
  • 区分应用消息(文本内容)和辅助消息(密钥管理)

方案1:点对点通道

每个成员间建立独立加密通道(N人群体需N(N-1)/2个通道)。发送消息需单独加密多次:

  • 优点:实现简单
  • 缺点:消息复杂度O(N),万人群组单条消息需9999次加密

方案2:发送者密钥

每个成员维护自己的发送密钥,通过点对点通道分发:

  • 初始设置需O(N²)辅助消息
  • 消息发送仅需1次加密
  • 致命缺陷:成员变动时需全量重新分发密钥

方案3:树状结构(TreeKEM)

MLS采用二叉ratchet树结构:

  • 叶节点对应成员
  • 中间节点含DH密钥对
  • 密钥派生遵循树状属性:节点私钥仅其后代成员知晓

成员移除流程示例:

  1. 空白化被移除节点及其祖先
  2. 更新节点生成新密钥链
  3. 通过树状路径定向分发新私钥(仅加密给需要知晓的子树)
  4. 典型情况下辅助消息复杂度降至O(logN)

极端案例分析显示,当树结构严重不平衡时仍可能退化为O(N)复杂度,这是当前协议待解决的核心问题。

现状与展望

  • 非平衡树处理效率
  • 密钥派生方案调整(草案7已重构密钥表)
  • 形式化验证需求

现有其他实现包括:

  • mlspp(参考实现)
  • MLS*(F*形式化验证)
  • melissa(Wire的Rust实现)

选择Rust实现molasses的优势:

  • 内存安全保证
  • 清晰的API设计
  • 43%的代码注释率
  • 零成本抽象带来的高性能

我们持续通过实现实践推动协议规范完善,已发现包括树节点修剪逻辑、WelcomeInfo密钥包含等关键规范问题。欢迎通过IETF MLS工作组参与协议讨论。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计