4. NIST PQC标准化进展与选型依据
NIST后量子密码标准化并不是一次性“选冠军”,而是围绕不同数学难题、不同使用场景和不同工程约束,形成一组可组合的标准件。理解FIPS 203、FIPS 204、FIPS 205的定位,以及它们与TLS迁移之间的关系,是后续兼容工程设计的起点。
三份核心标准:KEM与签名的分工
2024年8月,NIST正式发布三项后量子密码标准:FIPS 203(ML-KEM,基于CRYSTALS-Kyber)、FIPS 204(ML-DSA,基于CRYSTALS-Dilithium)和FIPS 205(SLH-DSA,基于SPHINCS+)。它们并非互相替代,而是按功能分工:
- FIPS 203 / ML-KEM:密钥封装机制(KEM),用于在两个通信方之间协商共享密钥。它是TLS 1.3中替代ECDHE密钥交换的主力,安全类别覆盖NIST Level 1、3、5,对应ML-KEM-512、ML-KEM-768、ML-KEM-1024。
- FIPS 204 / ML-DSA:基于格的全数字签名算法,用于身份认证和消息签名。TLS中主要替代ECDSA/RSA签名,安全类别同样覆盖Level 1、3、5,对应ML-DSA-44、ML-DSA-65、ML-DSA-87。
- FIPS 205 / SLH-DSA:基于哈希的无状态签名算法,安全性假设更保守,不依赖格难题,但签名尺寸大、计算较慢。它适合作为ML-DSA的备份或高保障场景,安全类别覆盖Level 1、3、5,对应SLH-DSA-SHA2-128s、SLH-DSA-SHA2-192s、SLH-DSA-SHA2-256s等参数集。
三者的关系可以用一张“算法族—用途—TLS角色”的映射图来理解:
安全类别:不是“越高越好”
NIST将后量子安全强度划分为Level 1、3、5,分别对应AES-128、AES-192、AES-256的经典安全强度。选型时不能简单认为Level 5一定最优,因为安全类别越高,密钥、签名和密文尺寸越大,握手字节数和计算开销也越高。TLS服务器在并发握手场景下,Level 5的ML-KEM-1024和ML-DSA-87会显著增加带宽与CPU压力。工程上常见的折中是:密钥交换用ML-KEM-768(Level 3),签名用ML-DSA-65(Level 3),在安全性与性能之间取得平衡。
迁移路线图:从混合到纯PQC
NIST与工业界普遍推荐的迁移路径是“先混合、后纯PQC”。混合模式将经典算法(如X25519)与PQC算法(如ML-KEM-768)组合,只要其中一个算法未被攻破,共享密钥就仍然安全。这为迁移期提供了密码敏捷性和回退能力。典型路线可分为三个阶段:
- 混合密钥交换先行:在TLS 1.3中启用X25519MLKEM768等混合组,客户端与服务器协商时同时执行经典和PQC密钥交换,共享密钥由两者拼接后派生。此阶段签名仍可用ECDSA,风险最低。
- PQC签名逐步替换:当证书链和信任锚支持ML-DSA后,将服务器证书签名算法迁移到ML-DSA-65,同时保留ECDSA证书作为兼容回退。此阶段需要处理证书尺寸膨胀和链验证性能。
- 纯PQC与算法退役:在客户端和服务端生态成熟后,逐步移除经典算法,进入纯PQC模式。此时需重新评估安全类别、侧信道防护和硬件加速能力。
侧信道与实现考量
PQC算法在实现层面引入了新的侧信道风险。ML-KEM和ML-DSA的核心操作涉及NTT(数论变换)和多项式采样,若实现中使用数据相关的分支或内存访问模式,可能泄露密钥信息。工程上需要关注:
- 常数时间实现:NTT、采样和拒绝采样必须避免秘密相关的分支和表查找,优先使用恒定时间算法。
- 掩码防护:对密钥生成和解封装操作,可采用一阶或高阶掩码,将秘密拆分为多个共享因子,增加功耗分析难度。
- 故障注入防护:对签名和解封装结果进行冗余校验,防止攻击者通过电压毛刺等故障注入手段诱导错误输出。
- 内存清零:临时多项式、种子和中间密钥在使用后必须显式清零,避免残留于栈或堆中。
侧信道防护会带来性能开销。以ML-KEM-768为例,掩码实现可能使解封装耗时增加2~5倍。在TLS服务器上部署时,应通过压测确认握手吞吐量是否满足业务SLA,必要时启用硬件加速或会话复用。
TLS中算法组合的约束
TLS 1.3的算法协商通过ClientHello和ServerHello中的扩展完成,PQC迁移引入了几个关键约束:
- supported_groups:混合密钥交换组(如X25519MLKEM768)需要客户端和服务器同时支持。若客户端只发送经典组,服务器应能回退到X25519,否则握手失败。
- signature_algorithms:ML-DSA的OID和签名方案标识需要被双方识别。若客户端不支持ML-DSA,服务器应回退到ECDSA证书。
- 证书链尺寸:ML-DSA-65公钥约1952字节,签名约3309字节,远大于ECDSA P-256。TLS Certificate消息可能超过单个TCP段,需要处理分片和重传。
- 密钥共享限制:TLS 1.3的key_share扩展对每个组的密钥共享有大小限制,ML-KEM-768的密文约1088字节,公钥约1184字节,需确认是否超出实现限制。
下面给出一个TLS 1.3混合握手的关键参数示例,用于说明实际协商中需要关注的字段和尺寸:
# 示例:TLS 1.3 混合密钥交换参数(教学示例,非实测)
supported_groups:
- x25519_mlkem768 # 混合组,经典 X25519 + ML-KEM-768
- x25519 # 回退组
- secp256r1 # 兼容组
key_share (x25519_mlkem768):
client_share:
x25519_pub: 32 字节
mlkem768_pub: 1184 字节
server_share:
x25519_pub: 32 字节
mlkem768_ct: 1088 字节
signature_algorithms:
- mldsa65 # 主签名
- ecdsa_secp256r1_sha256 # 回退签名
# 握手尺寸估算(示例)
# ClientHello 约 1.5 KB,ServerHello 约 1.2 KB
# Certificate (ML-DSA-65) 约 5~6 KB
从工程角度看,选型依据可以归纳为三条:第一,密钥交换优先选择ML-KEM-768,兼顾安全与性能;第二,签名优先选择ML-DSA-65,SLH-DSA作为高保障备份;第三,迁移期必须保留经典算法回退路径,并通过混合模式降低风险。最终决策应结合业务场景、客户端生态、硬件能力和合规要求综合判断,而不是机械套用某一组参数。