2. 后量子密码算法基础
后量子密码(Post-Quantum Cryptography, PQC)并不是某一种算法的名字,而是若干类被认为能抵抗经典计算机与量子计算机攻击的公钥密码族的总称。理解它们的核心原理,是判断“哪种算法该用在证书体系的哪个位置”的前提。NIST 在 2024 年正式发布了三项标准:FIPS 203(ML-KEM,基于模块格的密钥封装)、FIPS 204(ML-DSA,基于模块格的数字签名)和 FIPS 205(SLH-DSA,基于哈希的无状态签名)。它们分别对应密钥建立与数字签名两类用途,而底层数学困难问题则来自格、哈希与编码三条不同的技术路线。
三条技术路线的核心原理
格密码(Lattice-based)建立在格上困难问题之上,最典型的是带误差学习(LWE)及其在多项式环上的变体 Ring-LWE / Module-LWE。直观地说,格是 n 维空间中由一组基向量整数组合生成的点集;给定一组“好基”容易描述格,但要从一组“坏基”中恢复出最短向量或求解最近向量问题(SVP/CVP)在维度足够大时极其困难。LWE 把秘密向量 s 隐藏在“A·s + e”这样的线性方程组中,其中 e 是小的随机误差。攻击者即使拿到 A 和结果,也因误差扰动而难以解出 s。ML-KEM 与 ML-DSA 都使用 Module-LWE/Module-SIS 结构,在安全性与密钥/签名尺寸之间取得平衡,是当前工程落地最主流的路线。
哈希签名(Hash-based)的安全性只依赖哈希函数的抗碰撞与抗原像性质,被认为是最保守、最经得起时间检验的方案。其核心思想是:用一次性签名(如 Lamport、Winternitz)对消息哈希值逐位或逐块签名,再用 Merkle 树把大量一次性公钥聚合为一个根公钥。SLH-DSA 采用无状态设计,签名者不需要保存“已用过的叶子”状态,代价是签名体积较大、签名速度较慢,但验证快、安全假设最弱。它非常适合作为“根证书”“固件签名”等对长期安全性要求极高、对性能不敏感的场景。
编码密码(Code-based)源自纠错码理论,经典代表是 McEliece 体制:公钥是一个经过混淆的线性纠错码的生成矩阵,私钥是解码所需的隐藏结构。攻击者要从公开矩阵中恢复出可高效译码的结构,等价于求解一般线性码的译码难题,这是一个被研究超过四十年的困难问题。编码密码的优点是公钥较大但密文/签名较小、加解密速度快,历史上被视为最稳健的 PQC 路线之一;NIST 在第四轮中选择了基于准循环中密度奇偶校验码(QC-MDPC)的 BIKE 与 HQC 作为 KEM 备选,用于与格路线形成算法多样性。
NIST 标准化算法的适用场景判断
把三条路线落到证书体系迁移工程中,关键不是“哪个算法最强”,而是“哪个算法适合这个位置”。ML-KEM 用于密钥封装,典型场景是 TLS 1.3 的混合密钥交换(如 X25519MLKEM768)、VPN 的 IKEv2 密钥协商、以及各类需要前向保密与抗量子密钥建立的通道。它的公钥与密文都在 1KB 量级,对现有协议报文尺寸影响可控,是当前部署优先级最高的 PQC 算法。
ML-DSA 用于数字签名,是替代 RSA/ECDSA 的通用选择。它适合签发终端实体证书、中间 CA 证书、代码签名与文档签名。签名约 2.4KB、公钥约 1.3KB,比 ECDSA 大一个数量级,但验证速度快、实现成熟,是证书链中“数量最多、性能最敏感”环节的首选。
SLH-DSA 的定位是“安全冗余”。它的签名约 7.8KB、签名生成较慢,但安全假设最弱、最保守。因此它更适合放在证书链顶端:根 CA 自签名证书、信任锚、固件根签名、以及需要长期验证(10 年以上)的存档签名。用 SLH-DSA 签根、用 ML-DSA 签中间与终端证书,是一种兼顾安全冗余与性能的常见分层策略。
工程落地时的关键参数与判断依据
在证书体系迁移中,算法选择会直接影响证书尺寸、握手报文大小与硬件资源占用。下表给出三类标准算法在常见安全等级下的典型参数范围(示例值,用于教学估算,实际以 FIPS 203/204/205 与具体实现为准):
| 算法 | 用途 | 公钥尺寸 | 签名/密文尺寸 | 典型安全等级 |
|---|---|---|---|---|
| ML-KEM-768 | 密钥封装 | 约 1184 B | 密文约 1088 B | NIST 3 类 |
| ML-DSA-65 | 数字签名 | 约 1952 B | 签名约 3309 B | NIST 3 类 |
| SLH-DSA-SHA2-128s | 数字签名 | 约 32 B | 签名约 7856 B | NIST 1 类 |
从表中可以看到一个重要的工程规律:ML-DSA 的公钥较大但签名相对紧凑,SLH-DSA 的公钥极小但签名很大。这意味着在证书链中,如果根证书用 SLH-DSA,根公钥只有几十字节,便于硬编码到设备信任库;但每次签发根签名时签名体积大、速度慢,因此根证书应尽量少签、长周期使用。反之,终端证书数量巨大、需要频繁签发与验证,用 ML-DSA 更合适。
另一个必须注意的点是混合模式(Hybrid)。在迁移过渡期,常见做法是把传统算法与 PQC 算法组合使用,例如 TLS 中同时协商 X25519 与 ML-KEM,证书中同时携带 ECDSA 与 ML-DSA 签名。这样即使某一类算法被攻破,整体仍保持安全。混合模式会进一步放大证书与握手报文尺寸,需要在协议层预留扩展空间,并在设备端评估 MTU 分片与内存占用。