1. 课程导入与工程全景

如果把今天互联网的安全底座拆开来看,会发现它几乎完全建立在三类经典公钥算法之上:用于密钥交换的 RSA/ECDH,用于身份认证的 RSA/ECDSA,以及用于完整性保护的哈希与对称加密。问题在于,这三类算法中承担"不可破解"承诺的部分,正在被量子计算逐步侵蚀。Shor 算法一旦在足够规模的量子计算机上运行,RSA、DH、ECDH、ECDSA 都会在多项式时间内被攻破;Grover 算法则把对称密钥的有效强度减半,AES-128 退化为约 64 位安全强度。这就是 PQC(Post-Quantum Cryptography,后量子密码)进入 TLS 的根本动机。

但"换算法"远不是把 RSA 替换成 ML-KEM 那么简单。TLS 是互联网上耦合最深的协议之一:它牵扯证书体系、握手状态机、扩展协商、中间盒兼容性、硬件加速、会话恢复、性能预算和合规审计。PQC 与 TLS 的混合部署,本质上是在不动摇现有信任链和可用性的前提下,把抗量子能力渐进地嵌入到握手与证书路径中。本课程要解决的,正是这条工程路径上的每一个具体决策点。

为什么是"混合",而不是"直接替换"

直接全量切换到纯 PQC 会带来两个现实风险。第一是算法风险:PQC 算法相对年轻,ML-KEM(原 Kyber)、ML-DSA(原 Dilithium)、SLH-DSA(原 SPHINCS+)虽然已被 NIST 标准化,但数学假设的长期安全性仍在被持续审视,一旦某个算法出现结构性弱点,纯 PQC 部署将没有退路。第二是兼容性风险:大量客户端、负载均衡、WAF、TLS 卸载卡和监控探针并不认识新的 NamedGroup 和签名算法,纯 PQC 握手会直接失败。

混合模式的核心思想是"两条腿走路":在密钥交换阶段同时执行经典 ECDHE 和 PQC KEM,把两个共享秘密拼接后再派生会话密钥;在认证阶段则根据对端能力选择经典证书或 PQC/混合证书。这样,攻击者必须同时攻破经典算法和 PQC 算法才能恢复会话密钥,安全性取两者之优,兼容性则通过协商降级得到保障。

混合密钥交换的密钥派生逻辑(以 X25519MLKEM768 为例):
shared_secret = HKDF-Extract( salt=0, IKM = X25519_shared || ML-KEM_shared )
只要 X25519 或 ML-KEM 任一未被攻破,会话密钥即不可恢复。

本节核心:一张图看清工程全景

下面这张图把本课程要覆盖的工程对象、数据流和交付物压缩到一张关系图中。左侧是输入侧的现实约束,中间是混合部署的三条并行工作流(密钥交换、身份认证、运维观测),右侧是最终交付物。图中每个节点都对应后续章节会展开的具体技术点。

PQC × TLS 混合部署工程全景 输入约束 → 三条并行工作流 → 交付物 输入与约束 量子威胁时间线 HNDL / 先存后解 NIST 标准算法集 ML-KEM / ML-DSA / SLH-DSA 现有 TLS 资产 证书链 / 卸载设备 / 探针 性能与带宽预算 握手字节 / CPU / 延迟 合规与审计要求 迁移期限 / 密码清单 三条并行工作流 ① 密钥交换混合 ECDHE X25519 / P-256 + PQC KEM ML-KEM-768 → HKDF 派生会话密钥 ② 身份认证迁移 经典证书 RSA / ECDSA → 混合证书 ECDSA + ML-DSA → 纯 PQC ML-DSA ③ 运维与观测 握手指标 字节 / 延迟 / 失败率 → 兼容性矩阵 客户端 / 中间盒 → 灰度回滚 开关与降级 交付物 混合握手配置基线 NamedGroup / 签名算法优先级 证书链迁移方案 双证书 / 交叉签名 性能基准报告 握手字节 / QPS / P99 兼容性测试矩阵 浏览器 / SDK / 中间盒 灰度与回滚手册 开关 / 监控 / 降级阈值 密码资产清单 算法 / 位置 / 到期时间 学习路径: 密码学基础 → TLS 1.3 握手与扩展 → ML-KEM/ML-DSA 原理 → 混合密钥交换实现 → 证书链迁移 → 性能调优 → 兼容性测试 → 灰度发布与回滚

课程目标与范围界定

本课程的目标不是培养密码学理论研究者,而是培养能把 PQC 安全、可控、可观测地落进现有 TLS 基础设施的工程师。具体来说,完成课程后你应当能够:

  • 读懂 TLS 1.3 握手中与 PQC 相关的扩展字段(supported_groups、key_share、signature_algorithms),并判断一个客户端是否支持混合密钥交换;
  • 在 OpenSSL 3.5+ / BoringSSL / 主流网关(Nginx、Envoy、HAProxy)上启用 X25519MLKEM768 等混合组,并验证协商结果;
  • 设计从经典证书到混合证书再到纯 PQC 证书的迁移路径,处理交叉签名与信任锚问题;
  • 建立握手字节数、CPU 开销、P99 延迟、失败率的观测基线,并据此设定灰度与回滚阈值;
  • 识别 HNDL(Harvest Now, Decrypt Later)风险,对长期机密数据优先实施抗量子保护。

范围上,本课程聚焦TLS 1.3 之上的 PQC 混合部署,不展开 IPsec、SSH、S/MIME 的 PQC 迁移,也不深入格密码的数学证明。涉及算法时,以 NIST 已标准化的 ML-KEM(FIPS 203)、ML-DSA(FIPS 204)、SLH-DSA(FIPS 205)为准,同时会提到仍在使用但已非首选的 Kyber 参考实现与 X25519Kyber768 过渡组。

一个可执行的起点:混合部署检查清单

在进入后续章节前,建议先用下面这份清单盘点你当前的环境。它不追求覆盖全部细节,而是帮助你在动手前明确"我有什么、我缺什么"。

检查项 需要确认的内容 典型判断依据
TLS 版本 服务端与客户端是否均支持 TLS 1.3 握手日志中出现 supported_versions = 0x0304
密码库版本 OpenSSL ≥ 3.5 或 BoringSSL 已含 ML-KEM 实现 openssl list -kem-algorithms 能看到 ML-KEM-768
卸载设备 负载均衡 / WAF 是否透传未知 NamedGroup 抓包确认 key_share 未被丢弃或改写
证书体系 CA 是否已支持 ML-DSA 签发或交叉签名 CA 的 CPS 与算法支持列表
观测能力 能否按 NamedGroup 维度统计握手成功率与延迟 网关指标或 eBPF 抓取 ClientHello/ServerHello
回滚开关 能否在不重启的情况下关闭混合组 配置热加载或灰度开关
建议在测试环境先用 openssl s_client -groups X25519MLKEM768 -connect host:443 观察握手是否成功,并对比 -groups X25519 时的握手字节数差异。ML-KEM-768 的公钥约 1184 字节、密文约 1088 字节,混合组会让 ClientHello 明显变大,这正是后续需要重点关注的性能变量。