首页/安全/加密与证书速查/ML-KEM 密钥封装(FIPS 203)
加密算法基础95 条

ML-KEM 密钥封装(FIPS 203)

基于模块格难题的密钥封装机制(源自 Kyber),通过 encaps/decaps 交换 32 字节共享秘密;TLS 1.3 中通常与 X25519 组成混合组使用。

加密与证书速查安全更新于 2026-10-13

ML-KEM 是什么

ML-KEM 是 NIST 在 FIPS 203 中标准化的后量子密钥封装机制,算法源自 CRYSTALS-Kyber,安全性基于模块格上的学习带误差问题。它不直接加密数据,而是通过封装与解封装在双方之间协商出同一个 32 字节共享秘密,再由上层密钥派生函数生成会话密钥。TLS 1.3 中通常把 ML-KEM 与 X25519 组合成混合组,兼顾后量子与经典安全性。

基本信息

标准FIPS 203
来源算法CRYSTALS-Kyber
共享秘密固定 32 字节
参数集ML-KEM-512 / 768 / 1024
典型用法TLS 1.3 混合组,如 X25519MLKEM768

典型使用场景

  • 为 TLS 会话密钥提供后量子安全性,抵御先收集后解密的长期威胁
  • 固件与设备更新通道的密钥协商,避免设备寿命长于算法安全性
  • 替换 RSA 密钥传输类用法,作为密钥封装的标准替代
  • 混合部署:与 ECDH 组合,任一侧被攻破时整体仍安全
  • 合规预研:评估现有密码库的支持情况与握手体积影响

混合组协商观察

混合组协商观察
# OpenSSL 3.5 起内置 X25519MLKEM768 混合组
openssl s_client -connect example.com:443 -groups X25519MLKEM768 </dev/null | grep -i group
# 查看本机支持的组
openssl list -tls1_3-groups 2>/dev/null | head -20

参数集与体积

参数集NIST 类别封装公钥密文
ML-KEM-5121(约 128 位)800 字节768 字节
ML-KEM-7683(约 192 位)1184 字节1088 字节
ML-KEM-10245(约 256 位)1568 字节1568 字节
KEM 不是公钥加密函数:它只负责产生共享秘密,密钥如何使用由上层协议决定。把 ML-KEM 当作 RSA 那样的加密接口调用,等于让应用自己实现密钥调度,风险更高。
混合组会把 ClientHello 撑大数百到上千字节,可能触发 TCP 分片或被部分中间设备丢弃;上线前要评估 MTU、负载均衡与 WAF 对大握手的处理。

工程落地检查项

  • 确认所用 TLS 库版本是否内置 ML-KEM,以及混合组的确切名称
  • 测量启用混合组后的握手字节数与首包分片情况
  • 评估服务端处理器开销与连接建立延迟的变化
  • 明确签名与证书算法是否同步迁移,KEM 只解决密钥协商
ML-KEM 的安全性依赖均匀随机的种子与拒绝采样过程;实现中解封装失败时应走隐式拒绝路径输出伪随机共享秘密,而不是直接返回错误,否则会引入侧信道。

易错点

  • 把 ML-KEM 当加密算法直接加密业务数据:KEM 只输出共享秘密,数据加密需要对称算法配合
  • 忽略封装体积对握手的影响:公钥与密文各千余字节,可能超过设备的分片或缓冲限制
  • 自研实现而不复用成熟库:格密码实现需常量时间与掩码防护,侧信道风险高
  • 认为部署后量子算法就无需关注经典算法:过渡期的通用做法是混合模式,单靠新算法可能失去与存量客户端的兼容
  • 只替换密钥协商而保留弱签名算法:握手的安全性由较弱的一环决定,两端能力要配套评估

数据来源与参考

  • FIPS 203(Module-Lattice-Based Key-Encapsulation Mechanism)
  • draft-ietf-tls-ecdhe-mlkem(TLS 混合组)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌