3. 后量子密码算法族与TLS适用性

后量子密码(PQC)并不是单一算法,而是一组基于不同数学困难问题的算法族。NIST 在 2024 年正式发布了三项标准:用于密钥封装的 ML-KEM(FIPS 203,源自 CRYSTALS-Kyber)、用于数字签名的 ML-DSA(FIPS 204,源自 CRYSTALS-Dilithium)和 SLH-DSA(FIPS 205,源自 SPHINCS+)。此外 Falcon 作为格基签名方案也已进入标准化轨道。理解这些算法族的数学基础、密钥与签名尺寸、运算性能,是判断它们在 TLS 1.3 握手中如何落位的前提。

格基 KEM:ML-KEM/Kyber

ML-KEM 的安全性建立在 Module-LWE(模格上的带误差学习问题)之上。它的核心操作是在多项式环上进行矩阵向量乘法并加入小误差,攻击者要从带噪的线性关系中恢复秘密向量,等价于求解高维格上的最短向量问题。ML-KEM 定义了三个参数集:ML-KEM-512、ML-KEM-768、ML-KEM-1024,分别对应 NIST 安全等级 1、3、5。

在 TLS 1.3 中,ML-KEM 用于密钥封装,替代或补充传统的 ECDHE。客户端发送公钥(封装密钥),服务端用其封装一个共享秘密并返回密文,双方各自导出会话密钥。ML-KEM 的公钥约 800~1568 字节,密文约 768~1568 字节,远大于 X25519 的 32 字节。这意味着一次完整握手可能增加数 KB 的数据量,对首包大小、分片和 MTU 敏感的场景需要特别关注。

性能方面,ML-KEM 的密钥生成、封装、解封装都很快,在主流 x86 平台上单次操作通常在几十微秒量级,明显快于同等安全强度的 ECC 密钥交换。它的主要代价不是计算,而是带宽。

哈希签名:SLH-DSA/SPHINCS+

SLH-DSA 是唯一不依赖格问题的标准算法,其安全性仅依赖哈希函数的抗碰撞性和抗原像性。它采用无状态哈希签名结构,通过多层 Merkle 树和少量一次性签名组合,生成可验证的签名。由于不依赖任何代数结构,SLH-DSA 被认为对量子攻击和经典攻击都具有很强的保守性,适合作为“后备信任锚”。

代价是尺寸和速度:SLH-DSA 公钥约 32~64 字节,但签名高达 7856~49856 字节,签名生成时间可达毫秒到数十毫秒,验证也偏慢。在 TLS 中,如果服务端证书使用 SLH-DSA 签名,Certificate 消息会显著膨胀,可能触发 TCP 分片甚至需要多个往返。因此 SLH-DSA 更适合用于根 CA、代码签名或固件签名等对尺寸不敏感、对长期安全性要求极高的场景,在 TLS 中通常作为证书链顶端的信任锚,而非叶子证书。

格基签名:ML-DSA/Dilithium 与 Falcon

ML-DSA 同样基于 Module-LWE 和 Module-SIS,但用于签名。它通过 Fiat-Shamir with Aborts 范式构造:签名者反复采样挑战多项式,直到满足范数约束。ML-DSA 提供 ML-DSA-44、ML-DSA-65、ML-DSA-87 三个参数集,公钥约 1312~2592 字节,签名约 2420~4627 字节。它的签名和验签速度都较快,是 TLS 证书签名的首选格基方案。

Falcon 基于 NTRU 格上的短向量问题,使用快速傅里叶采样和浮点运算生成紧凑签名。Falcon-512 的公钥约 897 字节,签名约 666 字节,是当前尺寸最小的后量子签名之一。但 Falcon 的实现复杂,涉及高斯采样和浮点精度控制,侧信道防护难度较高,工程落地门槛明显高于 ML-DSA。在 TLS 中,Falcon 适合对带宽极度敏感、且团队具备较强密码工程能力的场景。

算法尺寸与性能对比

下表汇总了典型参数集在 TLS 场景下的关键指标。数据为公开参考值,实际性能随平台、编译器和实现库变化,仅用于量级判断。

算法类型公钥/封装密钥密文/签名相对性能TLS 典型用途
ML-KEM-768KEM1184 B1088 B很快密钥交换
ML-DSA-65签名1952 B3309 B快证书签名
Falcon-512签名897 B666 B中紧凑证书
SLH-DSA-128s签名32 B7856 B慢根 CA/信任锚
X25519ECDH32 B32 B很快传统密钥交换
Ed25519签名32 B64 B很快传统证书签名

从表中可以读出几个关键结论。第一,后量子 KEM 的尺寸膨胀主要来自公钥和密文,ML-KEM-768 比 X25519 大约 35 倍,但仍在可接受范围。第二,后量子签名的膨胀更严重,ML-DSA-65 签名约 3.3 KB,SLH-DSA 可达数十 KB,这会直接影响证书链长度和握手时延。第三,Falcon 在尺寸上有明显优势,但实现风险高。第四,SLH-DSA 的性能劣势使其不适合高频握手,但作为根证书可以接受。

后量子算法族在 TLS 1.3 握手中的落位与尺寸量级 客户端 ClientHello key_share: ML-KEM-768 公钥 1184 B 验证服务端证书 ML-DSA-65 签名 3309 B 解封装 得到共享秘密 Finished HMAC 校验 服务端 ServerHello key_share: ML-KEM-768 密文 1088 B Certificate ML-DSA-65 证书 公钥 1952 B CertificateVerify ML-DSA-65 签名 Finished HMAC 校验 ① ClientHello + ML-KEM 公钥 ② ServerHello + ML-KEM 密文 ③ Certificate(ML-DSA-65) ④ CertificateVerify(ML-DSA-65) ⑤ Finished 尺寸量级:ML-KEM-768 公钥+密文 ≈ 2.3 KB;ML-DSA-65 公钥+签名 ≈ 5.3 KB;SLH-DSA-128s 签名 ≈ 7.9 KB;Falcon-512 公钥+签名 ≈ 1.6 KB 性能量级:ML-KEM 封装/解封装最快;ML-DSA 签名/验签快;Falcon 签名中等;SLH-DSA 签名最慢

面向 TLS 的选型建议

在 TLS 1.3 中,密钥交换和签名是两条独立的决策线。密钥交换侧,ML-KEM-768 是当前最成熟、性能最好的选择,建议与 X25519 组成混合密钥交换(X25519MLKEM768),既保留经典安全性,又获得后量子防护。签名侧,ML-DSA-65 适合作为叶子证书和中间 CA 的签名算法,尺寸和性能平衡较好;如果证书链带宽压力大,可在叶子证书使用 Falcon-512,但需评估实现成熟度;SLH-DSA 建议仅用于根 CA 或离线信任锚。

混合密钥交换是迁移期的关键策略:客户端在 key_share 中同时发送 X25519 和 ML-KEM 的公钥,服务端选择两者都支持时,共享秘密由两个算法各自导出的秘密拼接后再经 HKDF 派生。这样即使 ML-KEM 未来被攻破,X25519 仍提供经典安全性;反之亦然。
不要忽略尺寸对协议栈的连锁影响。ML-KEM 和 ML-DSA 会使 ClientHello、Certificate 等消息显著变大,可能超过单个 TCP 段或 QUIC 包的容量,触发分片或需要额外往返。在部署前应实测握手时延、首包大小和丢包重传行为,尤其关注移动网络和 IoT 场景。

总结来看,后量子算法族在 TLS 中的适用性可以归纳为:ML-KEM 负责密钥交换,ML-DSA 负责签名,Falcon 作为紧凑签名备选,SLH-DSA 作为保守信任锚。选型的核心不是追求单一算法的最优,而是在安全等级、尺寸、性能和实现成熟度之间找到与业务场景匹配的组合。