Skip to content

MLS 端到端加密

英文翻译待补,当前显示简体中文。 / English translation pending — showing Simplified Chinese.

真遇的讨论区采用 MLS(Messaging Layer Security,RFC 9420) 做群组端到端加密。它的核心承诺是:服务器只中转密文,永远不持有群密钥、看不到任何明文。

多人加密比一对一复杂得多:成员会加入、退出、更换密钥,每一次变化都应让旧密钥失效。MLS 把这件事标准化:它为一组成员维护一个共享的加密上下文,并保证成员变更后向前与向后保密。

概念 含义
群(Group) 一组成员共享的加密上下文;每个活动的讨论区对应一个群
世代(epoch) 群的密钥版本;每次成员变更都会产生新世代与新密钥
成员(Member) 群内节点;其身份凭证即用户的身份公钥
密钥包(KeyPackage) 待入群者发布的公钥材料包,已签名、可校验
Welcome 邀请者为新成员生成的入群消息,含其加入所需的密钥材料
Commit 群变更消息(加人 / 移人 / 更新),成员合并后进入新世代
棘轮(ratchet) 每条消息推进密钥派生;同一密文只可解密一次,旧世代密文在推进后失效
  1. 新成员生成密钥包并发布。
  2. 组织者据此产出 Welcome + Commit,把新成员纳入群。
  3. 新成员用 Welcome 入群;现有成员合并 Commit,一起进入新世代。
  4. 此后的消息以新世代的密钥加密,服务器全程只见到不透明的密文。

移除成员同理:一次 Commit 后,被移除者再也无法解密后续消息。

  • 密文本身、成员公钥与路由元数据(如消息属于哪个活动)。
  • 看不到:明文内容、群密钥。
  • 因此「服务器持有者」也无法读取讨论内容 —— 这正是隐私承诺的技术底座。
  • 「我发的消息自己看不到?」 不是丢消息。发送方不解密自己发出的密文,明文在发送时已本地记录,界面会正常显示。
  • 「入群前的消息解不开?」 这是预期的:新成员只能解密加入之后的消息,历史消息不会对其开放。
  • 「同一密文解密两次失败?」 棘轮机制决定加密是单向推进的;客户端会缓存解密结果,无需重复尝试。