4. 后量子证书格式设计
后量子迁移最容易被低估的一环,不是算法本身,而是“证书怎么装下新算法”。传统 X.509 证书在 SubjectPublicKeyInfo 中只承载一个公钥、在 signatureAlgorithm 中只承载一个签名算法,而 PQC 迁移期需要同时表达经典算法与后量子算法,甚至需要多把公钥、多个签名并存。本节围绕四种可落地的格式设计路线展开:X.509 扩展、混合证书、复合证书,以及算法标识符与 OID 分配策略。
一、先明确三种“混合”语义
工程上常把“混合”混为一谈,实际必须区分:
- 混合密钥(Hybrid Key):同一份密钥材料由经典算法与 PQC 算法共同派生,例如 ECDH + ML-KEM 的共享密钥拼接后再 KDF,输出单一会话密钥。
- 混合证书(Hybrid Certificate):一张证书里同时包含经典公钥和 PQC 公钥,但签名仍由单一算法完成。
- 复合证书(Composite Certificate):公钥和签名都由多个算法组件构成,验证时要求所有组件都通过,任一失败即整体失败。
三者的安全语义不同:混合密钥强调“任一算法不被攻破即安全”,复合证书强调“全部算法都必须成立”。设计证书格式前,必须先确定采用哪种语义,否则 OID 和扩展结构会互相矛盾。
二、X.509 扩展路线:最小改动方案
最保守的做法是保持现有 SubjectPublicKeyInfo 不变,把 PQC 公钥放入自定义扩展。例如定义一个 id-ce-pqcPublicKey 扩展,其 extnValue 内封装 PQC 公钥的 DER 编码。这样旧验证器会忽略未知扩展,仍按经典公钥验证;新验证器则读取扩展并执行 PQC 校验。
该方案的优点是兼容性最好、CA 软件改动最小;缺点是扩展默认非关键(non-critical),攻击者可剥离扩展而不被旧验证器发现,因此必须配合策略服务器或双证书链使用。它适合过渡早期、以兼容性优先的场景。
三、混合证书与复合证书的结构差异
混合证书的典型结构是:SubjectPublicKeyInfo 仍放经典公钥,PQC 公钥放入扩展;signatureAlgorithm 使用经典算法。验证方需要同时检查两把公钥,但签名只需一次验证。
复合证书则把公钥和签名都做成“算法列表”。一种常见编码是定义 CompositePublicKey 和 CompositeSignature 结构,内部用 SEQUENCE OF 承载多个 AlgorithmIdentifier 与对应 BIT STRING。验证逻辑是:对每个组件分别验证,全部通过才接受。复合证书的优点是语义清晰、抗降级能力强;缺点是体积大、握手开销高,且需要新的 OID 体系支撑。
四、算法标识符与 OID 分配策略
OID 是后量子证书能否互操作的“命名地基”。设计时建议遵循三条原则:
- 算法 OID 与参数 OID 分离:例如
id-ml-dsa-65只标识算法,参数(如上下文串、预哈希模式)用独立 OID 或 AlgorithmIdentifier 的 parameters 字段表达,避免一个 OID 承载过多语义。 - 复合 OID 采用“组合式”命名:不要为每一种算法组合都注册一个新 OID,而是定义
id-composite-signature作为容器,内部用 SEQUENCE 列出组件 OID。这样新增组合无需重新注册。 - 预留迁移命名空间:在 CA 的 OID 弧下预留
pqc子树,按pqc.kem、pqc.sig、pqc.composite分层,便于后续扩展和策略匹配。
一个可参考的 OID 分配示例(示例值,非实际注册值):
1.3.6.1.4.1.99999.1.1 id-pqc-kem-ml-kem-768
1.3.6.1.4.1.99999.1.2 id-pqc-sig-ml-dsa-65
1.3.6.1.4.1.99999.1.3 id-pqc-sig-slh-dsa-128s
1.3.6.1.4.1.99999.2.1 id-composite-signature
1.3.6.1.4.1.99999.2.2 id-composite-kem
1.3.6.1.4.1.99999.3.1 id-ce-pqcPublicKey
五、工程落地建议
实际迁移中,建议按“先扩展、后复合”的节奏推进:过渡早期用 X.509 扩展 + 双证书链保证兼容性;当 PQC 验证器覆盖率足够后,切换到复合证书以消除降级风险。无论选择哪条路线,都必须同步完成三件事:在 CA 策略中声明允许的算法组合、在验证器中实现“未知算法拒绝”而非“未知算法忽略”、在日志中记录实际使用的算法组件以便审计。证书格式设计不是孤立的数据结构问题,而是策略、验证逻辑与运维监控三者的共同契约。