完整链路 + 服务端可见 vs 不可见数据 · 消息体结构构造与校验位置
version: u8 — 协议版本ratchet_key: Curve25519PublicKeychain_index: u64ciphertext: Vec<u8> + mac: MessageMac不熟悉以下底层概念? 这里是 30 秒回顾。
当前最常用的 AEAD 算法。MK 派生出 enc_key + auth_key + iv 三件套, 给 GCM 同时做加密和认证。
(ct, tag) = AES-GCM-Enc(key, iv, pt, AD)
vodozemac 中的 MAC 类型, 通常是 HMAC-SHA256 截断到 8 / 16 字节, 在带宽和安全性之间权衡。
pub struct MessageMac([u8; 8]);
加密发生在端点 (客户端), 中间任何节点 (含服务端) 都看不到明文。E2EE 的"端"指的是密钥不离开设备。
vs TLS (传输层加密) — 服务端能解
sender_id / receiver_id / timestamp 等。E2EE 通常不保护元数据, 这是协议的局限 (Sealed Sender 等扩展是缓解方案)。
受保护: 内容 ✓ · 不保护: 关系图 ✗