ChainKey 不断推进,每步派生一个用完即丢的 MessageKey · CK / MK 分离原因
不熟悉以下底层概念? 这里是 30 秒回顾。
固定 32 字节 (256 bits)。可被分割为 prefix(16) + suffix(16) 或其他组合, 派生多个独立的 32B 子密钥。
HMAC(key, data) → 32 bytes
用不同的常量 (如 0x01 / 0x02) 作为 KDF 输入, 确保不同用途的派生 key 互相独立、互不影响。
MK = HMAC(CK, 0x01)
CK' = HMAC(CK, 0x02)
形如 H(H(H(seed))) 的单向序列, 每一步都不可逆。Symmetric Ratchet 的本质就是带分叉的 hash chain。
x₀ → H(x₀) → H(H(x₀)) → …
加密 + 认证一体化的算法, 如 AES-GCM。Signal 用 MK 派生 enc/auth/iv 三件套来调用 AEAD。
(plaintext, AD) → ciphertext + tag