ML-KEM (基于模格的密钥封装机制(FIPS 203))
定义
ML-KEM 是 NIST 于 2024 年 8 月在 FIPS 203 中标准化的后量子密钥封装机制,源自 CRYSTALS-Kyber,用于抗量子的密钥建立。
ML-KEM 是一种密钥封装机制(KEM),安全性基于模格上的带错误学习(Module-LWE)问题。KEM 包含三个操作:密钥生成,得到封装密钥和解封装密钥;封装,用对方的封装密钥生成一段密文和一个 32 字节的共享秘密;解封装,用解封装密钥从密文中还原出同一个秘密。FIPS 203 定义了 ML-KEM-512、ML-KEM-768 和 ML-KEM-1024 三组参数,强度依次递增。
为什么重要
ML-KEM 是 TLS 密钥建立中最主要的后量子算法,以混合群 X25519MLKEM768 的形式部署,Chrome 从 131 版起就在使用。它的计算速度很快,代价在于体积:ML-KEM-768 的封装密钥有 1,184 字节,而 X25519 公钥只有 32 字节,ClientHello 因此增大一千多字节。推广过程中,一些处理不了大 ClientHello 的中间设备和服务器不得不修复。企业内网的防火墙、上网行为管理设备如果导致新版浏览器访问异常,可以往这个方向排查。
例子
FIPS 203 中三组参数的尺寸:
Parameter set Encapsulation key Ciphertext Shared secret
ML-KEM-512 800 bytes 768 bytes 32 bytes
ML-KEM-768 1,184 bytes 1,088 bytes 32 bytes
ML-KEM-1024 1,568 bytes 1,568 bytes 32 bytes
常见误区
- ML-KEM 只是 Kyber 改了个名字。 最终的 FIPS 203 标准在细节上与早期 Kyber 不同,二者不能互通,所以 Chrome 才从 X25519Kyber768Draft00 换成了 X25519MLKEM768。
- KEM 和 Diffie-Hellman 的工作方式完全一样。 KEM 是一方用另一方的公钥进行封装,而不是双方对称地各出一份;TLS 中客户端的 key_share 携带封装密钥,服务器的 key_share 携带密文。
- 用了 ML-KEM,证书也就抗量子了。 它只保护密钥建立,身份认证仍依赖签名,后量子签名标准是 ML-DSA。