1. 后量子密码实现安全与侧信道防护导论
后量子密码(Post-Quantum Cryptography, PQC)并不是“把 RSA 换成另一种算法”这么简单。它要解决的是:当攻击者拥有大规模容错量子计算机时,Shor 算法可以在多项式时间内求解大整数分解与离散对数,从而瓦解 RSA、ECC、DH 等当前主流公钥体制。NIST 自 2016 年启动 PQC 标准化,2024 年正式发布首批标准:用于密钥封装的 ML-KEM(FIPS 203,源自 CRYSTALS-Kyber)、用于数字签名的 ML-DSA(FIPS 204,源自 CRYSTALS-Dilithium)与 SLH-DSA(FIPS 205,源自 SPHINCS+)。这些算法基于格、编码、多变量、哈希等数学难题,其安全性不再依赖大数分解。
但“数学上安全”与“实现上安全”之间存在巨大鸿沟。PQC 算法普遍具有更大的密钥、密文和签名尺寸,运算涉及大量多项式乘法、NTT(数论变换)、采样与拒绝循环,代码路径复杂、分支与内存访问模式高度依赖秘密数据。这使它们对侧信道攻击(Side-Channel Attack, SCA)和故障注入攻击(Fault Injection Attack, FIA)尤为敏感。本课程的目标,就是让学习者理解 PQC 实现安全的威胁模型,掌握从算法层到指令层的防护设计方法,并能对真实实现进行侧信道评估与加固。
为什么 PQC 迁移必须同步考虑实现安全
传统公钥算法在实现层面已有成熟防护经验,例如 RSA 的盲化、ECC 的标量随机化与统一坐标公式。PQC 迁移若只关注“换算法”,会带来新的风险面:
- 密钥与中间值更大:ML-KEM 的私钥包含多项式向量,ML-DSA 的私钥含矩阵与向量,秘密数据在内存中驻留时间更长,缓存与内存侧信道窗口更大。
- 数据相关分支与访存:拒绝采样、条件比较、压缩舍入等步骤若按秘密值分支或索引,会泄露信息。
- NTT 与多项式乘法:蝶形运算的访存模式、模约减实现若非常量时间,可能被计时或缓存攻击利用。
- 故障注入:对 NTT、采样或签名压缩阶段注入故障,可能诱导出可恢复私钥的错误签名。
- 混合部署:迁移期常采用“经典+PQC”混合密钥交换,协议层与实现层的交互会引入新的降级与状态机风险。
因此,PQC 实现安全不是可选项,而是迁移工程的一部分。它要求开发者在设计阶段就确定威胁模型、选择常量时间原语、规划随机数来源与密钥生命周期,并在测试阶段用侧信道评估验证防护有效性。
实现安全与侧信道防护的范畴
本课程所讨论的“实现安全”覆盖以下层面:
- 算法层:选择具有明确安全归约的参数集,避免使用被降级或非标准参数;理解 NIST 标准中的可选性与实现约束。
- 编码层:密钥编码、压缩与解压缩、序列化格式的正确性与常量时间性,防止因格式解析泄露秘密。
- 微架构层:常量时间编程、避免秘密相关分支与访存、缓存与推测执行防护、掩码(Masking)与隐藏(Hiding)技术。
- 系统层:随机数生成器(TRNG/DRBG)质量、密钥存储与隔离、TEE/HSM 的使用、故障检测与响应。
- 评估层:TVLA(Test Vector Leakage Assessment)、CPA/DPA、模板攻击、故障注入实验与统计判定。
侧信道防护的核心思想是“让可观测的物理量(时间、功耗、电磁、缓存)与秘密值统计独立”。常用手段包括:常量时间实现、随机化(盲化、掩码、洗牌)、冗余计算与一致性校验。故障防护则强调检测与响应:对关键中间值做冗余校验,发现异常即拒绝输出并清零敏感状态。
从“知道”到“做到”:本课程的学习方法
本课程不满足于概念介绍,而是围绕真实实现展开。每一章都会尽量给出可操作的对象、参数与判断依据。例如,在讨论 ML-KEM 的 NTT 实现时,我们会给出模数 q=3329、NTT 长度 n=256、蝶形运算的常量时间写法,以及如何用 TVLA 判断是否存在一阶泄漏;在讨论掩码时,会给出布尔掩码与算术掩码的转换条件、刷新(refresh)时机与随机数消耗量估算。
学习过程中建议遵循“三步法”:
- 建立威胁模型:明确攻击者能观测什么(时间、功耗、电磁、缓存、故障注入能力),以及保护的目标秘密是什么(私钥、种子、中间多项式)。
- 定位泄漏点:在算法流程中标记所有与秘密相关的分支、访存、循环次数和中间值,判断哪些是常量时间可消除的,哪些需要掩码或隐藏。
- 验证与迭代:用 TVLA 或 CPA 对实现做统计评估,若 t 值超过阈值(常用 |t|>4.5 作为初筛),则回到泄漏点加固,直到通过评估。
整体学习路线与章节安排
课程共 30 章,按“基础—实现—防护—评估—迁移”五个阶段推进。前几章建立 PQC 数学与标准基础,理解格、NTT、采样与编码;中间章节深入 ML-KEM、ML-DSA、SLH-DSA 的实现细节,重点讲解常量时间编程、掩码、隐藏与故障检测;后续章节进入侧信道评估方法、TVLA/CPA 实操、故障注入实验与安全等级判定;最后讨论混合部署、密钥生命周期管理与工程迁移中的实现安全实践。
需要强调的是,PQC 实现安全是一个快速演进的领域。标准在更新,攻击手法在进化,防护方案也在迭代。本课程提供的不是一成不变的“标准答案”,而是一套可复用的分析框架与工程方法:如何识别泄漏、如何选择防护、如何验证效果、如何在性能与安全之间做权衡。掌握这套方法,才能在面对新算法、新平台、新攻击时,快速做出正确判断。