2. PQC算法与证书标准基础
要把后量子密码(PQC)真正落到证书与PKI体系中,第一步不是改CA,而是先弄清三件事:NIST标准化了哪些算法、它们各自解决什么问题、以及这些算法在X.509证书里如何被编码和识别。本节围绕这三条主线展开,为后续的迁移工程建立“算法—用途—编码”的对应关系。
一、NIST PQC标准化的算法版图
NIST后量子密码标准化项目经过多轮筛选,形成了以“密钥封装/加密”和“数字签名”为两大支柱的算法集合。理解它们的关键,是区分基于格的算法与基于哈希、编码等其它数学难题的算法,因为不同数学基础直接决定了密钥尺寸、密文尺寸和性能特征。
- ML-KEM(FIPS 203):原CRYSTALS-Kyber,基于模格上的MLWE问题,用于密钥封装(KEM)。它是当前PQC密钥交换的主力,提供ML-KEM-512/768/1024三档安全强度。
- ML-DSA(FIPS 204):原CRYSTALS-Dilithium,同样基于格问题,用于数字签名,提供ML-DSA-44/65/87三档。
- SLH-DSA(FIPS 205):原SPHINCS+,基于哈希函数,签名体积大但安全假设保守,适合作为“备份签名算法”。
- FN-DSA(FIPS 206,原Falcon):基于NTRU格,签名紧凑但实现复杂,标准化进程相对靠后。
需要特别注意的是,KEM不能直接当签名用,签名算法也不能直接当KEM用。在PKI中,证书签名用ML-DSA或SLH-DSA,而TLS握手里的密钥交换用ML-KEM,两者是不同层面的替换。
二、混合密钥交换:过渡期的现实选择
在PQC算法尚未经过长期密码分析检验之前,业界普遍采用混合密钥交换:把传统ECDH与ML-KEM组合,只要其中一方不被攻破,会话密钥就仍然安全。典型组合是X25519+ML-KEM-768,在TLS 1.3中通过X25519MLKEM768这一命名组标识。
混合密钥交换的核心逻辑是:客户端和服务端各自生成两份共享秘密,一份来自ECDH,一份来自KEM,然后用KDF把两者拼接后派生会话密钥。这样即使未来量子计算机攻破ECDH,攻击者仍无法还原KEM部分;反之若KEM被发现有缺陷,ECDH仍提供保护。
三、PQC签名算法在X.509中的编码要求
X.509证书的签名算法由signatureAlgorithm字段标识,该字段是一个AlgorithmIdentifier结构,包含OID和可选参数。PQC签名算法要进入证书,必须满足三个条件:有正式分配的OID、参数编码规则明确、且CA与验证方都支持该算法。
以ML-DSA为例,其OID为2.16.840.1.101.3.4.3.17(ML-DSA-44)、...18(ML-DSA-65)、...19(ML-DSA-87)。在证书中,签名值直接是ML-DSA签名比特串,参数字段通常为ABSENT。SLH-DSA的OID为2.16.840.1.101.3.4.3.20起,参数同样需要按FIPS 205规定处理。
另一个关键点是公钥编码。PQC公钥尺寸远大于RSA/ECC,例如ML-DSA-65公钥约1952字节,SLH-DSA公钥约32字节但签名约17088字节。这意味着证书体积会显著膨胀,CA在签发时必须考虑CRL、OCSP响应和TLS证书链的传输开销。
四、证书链中的算法组合与迁移策略
实际迁移中,证书链往往不是“全PQC”或“全传统”,而是混合的。常见策略有三种:
- 双证书并行:同一主体同时持有传统证书和PQC证书,客户端根据能力选择。优点是兼容性好,缺点是管理复杂。
- 混合证书:一张证书里同时包含传统公钥和PQC公钥,签名用其中一种或两种。这需要扩展X.509结构,目前标准仍在演进。
- 分阶段替换:根证书先用SLH-DSA保持长期安全,中间CA和终端证书逐步过渡到ML-DSA。这是当前最务实的路径。
无论哪种策略,都必须回答一个工程问题:验证方是否支持新OID。如果客户端不识别ML-DSA的OID,证书链验证会直接失败。因此迁移前必须做能力探测,确认依赖库(如OpenSSL、BoringSSL、Go crypto)的版本是否已支持对应算法。
五、一个可操作的检查清单
在动手改CA之前,建议按以下清单逐项确认,避免“算法选对了但证书签不出来”的尴尬:
| 检查项 | 确认内容 | 示例/判断依据 |
|---|---|---|
| 算法OID | CA与验证方是否都识别目标OID | ML-DSA-65: 2.16.840.1.101.3.4.3.18 |
| 参数编码 | AlgorithmIdentifier参数是否按规范置空或填值 | ML-DSA参数为ABSENT |
| 密钥尺寸 | 证书、CRL、OCSP响应体积是否可接受 | ML-DSA-65公钥约1952字节 |
| 签名尺寸 | TLS证书链是否超出对端缓冲限制 | SLH-DSA签名可达17KB以上 |
| 混合KEM命名 | TLS命名组是否双方一致 | X25519MLKEM768 |
| KDF拼接 | 共享秘密拼接顺序与标签是否统一 | 先ECDH后KEM,长度前缀明确 |
总结来看,PQC在PKI中的落地可以归纳为一条主线:ML-KEM负责密钥交换,ML-DSA/SLH-DSA负责签名,混合模式负责过渡,X.509的OID和参数编码负责让这一切被正确识别。掌握这条主线,后续的CA改造、证书模板调整和客户端兼容性测试才有明确的依据。