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 标准算法映射 格密码 Lattice 困难问题:Module-LWE / Module-SIS A·s + e = b,误差 e 隐藏秘密 s ML-KEM (FIPS 203) 密钥封装 / 密钥建立 公钥≈1.2KB 密文≈1.1KB ML-DSA (FIPS 204) 数字签名(Dilithium) 签名≈2.4KB 验证快 适用场景 TLS/QUIC 密钥交换 终端实体证书签名 性能敏感、通用首选 哈希签名 Hash-based 安全假设:仅依赖哈希函数 一次性签名 + Merkle 树聚合 SLH-DSA (FIPS 205) 无状态哈希签名(SPHINCS+) 签名≈7.8KB 验证快 安全特性 最保守、抗量子假设最弱 签名慢、体积大 适用场景 根 CA / 信任锚证书 固件与代码签名 长期存档、低频签发 编码密码 Code-based 困难问题:一般线性码译码 混淆生成矩阵,隐藏译码结构 BIKE / HQC NIST 第四轮 KEM 备选 QC-MDPC 码结构 特性 公钥大、密文小、速度快 研究历史长、稳健 适用场景 算法多样性备份 带宽受限的密钥建立 与格路线混合部署 用途映射:密钥建立 → ML-KEM / BIKE / HQC  数字签名 → ML-DSA(通用) / SLH-DSA(高安全长期)

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 签中间与终端证书,是一种兼顾安全冗余与性能的常见分层策略。

选择算法时先问三个问题:这个位置是“密钥建立”还是“数字签名”?它的签发频率与验证频率有多高?它需要多长的安全生命周期?答案基本就能把算法范围收敛到 ML-KEM、ML-DSA、SLH-DSA 或编码密码备选之一。

工程落地时的关键参数与判断依据

在证书体系迁移中,算法选择会直接影响证书尺寸、握手报文大小与硬件资源占用。下表给出三类标准算法在常见安全等级下的典型参数范围(示例值,用于教学估算,实际以 FIPS 203/204/205 与具体实现为准):

算法用途公钥尺寸签名/密文尺寸典型安全等级
ML-KEM-768密钥封装约 1184 B密文约 1088 BNIST 3 类
ML-DSA-65数字签名约 1952 B签名约 3309 BNIST 3 类
SLH-DSA-SHA2-128s数字签名约 32 B签名约 7856 BNIST 1 类

从表中可以看到一个重要的工程规律:ML-DSA 的公钥较大但签名相对紧凑,SLH-DSA 的公钥极小但签名很大。这意味着在证书链中,如果根证书用 SLH-DSA,根公钥只有几十字节,便于硬编码到设备信任库;但每次签发根签名时签名体积大、速度慢,因此根证书应尽量少签、长周期使用。反之,终端证书数量巨大、需要频繁签发与验证,用 ML-DSA 更合适。

另一个必须注意的点是混合模式(Hybrid)。在迁移过渡期,常见做法是把传统算法与 PQC 算法组合使用,例如 TLS 中同时协商 X25519 与 ML-KEM,证书中同时携带 ECDSA 与 ML-DSA 签名。这样即使某一类算法被攻破,整体仍保持安全。混合模式会进一步放大证书与握手报文尺寸,需要在协议层预留扩展空间,并在设备端评估 MTU 分片与内存占用。

不要把“抗量子”理解为“绝对安全”。格密码、编码密码的安全性都建立在特定困难问题未被高效求解的假设上,哈希签名虽然假设最弱,但签名体积与性能代价明显。迁移工程中应优先保证算法多样性,避免整个信任体系押注在单一数学问题上。

从原理到迁移决策