4、NIST PQC标准化进程:NIST竞赛流程、入选算法(如Kyber、Dilithium、Falcon、SPHINCS+)的规格与安全强度
后量子密码(Post-Quantum Cryptography, PQC)的标准化并非一蹴而就,而是由美国国家标准与技术研究院(NIST)主导的一场全球性、公开透明的算法遴选竞赛。自2016年启动以来,该进程历经数轮筛选、密码分析攻击测试与性能评估,最终于2022年确定了首批入选算法,并在2024年发布了正式标准(FIPS 203/204/205)。理解这一进程的脉络、入选算法的数学原理与硬件实现规格,是从事PQC硬件设计的基础。本章将系统梳理NIST竞赛的完整流程,深入剖析Kyber、Dilithium、Falcon、SPHINCS+四种核心算法的规格参数、安全强度及其在硬件实现中的关键考量。
4.1 NIST竞赛流程:从征集到标准的演进路径
NIST于2016年正式发布PQC标准化征集公告,其核心目标是寻找能够抵抗量子计算机攻击的公钥加密、密钥封装和数字签名算法。整个竞赛流程分为四个关键阶段,每个阶段都伴随着严格的密码分析审查和性能评估。
第一阶段(2016-2019):初始征集与第一轮筛选。NIST共收到82份完整提案,涵盖基于格的、基于编码的、基于多变量的、基于哈希的等多种数学困难问题。2017年12月,NIST公布了69个候选算法进入第一轮评估。这一阶段主要考察算法的安全性基础、参数选择合理性以及基本实现性能。2019年1月,NIST宣布26个算法进入第二轮,淘汰了超过60%的提案。
第二阶段(2019-2022):第二轮与第三轮深度评估。第二轮评估聚焦于算法的安全性证明强度、侧信道攻击抵抗能力以及硬件/软件实现效率。2020年7月,NIST公布第三轮决赛名单,其中KEM领域有4个决赛选手(Kyber、NTRU、Saber、Classic McEliece),签名领域有3个决赛选手(Dilithium、Falcon、Rainbow)。2022年7月,NIST正式宣布Kyber作为唯一入选的KEM算法,Dilithium、Falcon、SPHINCS+作为入选的签名算法。
第三阶段(2022-2024):标准草案与正式发布。NIST将入选算法转化为联邦信息处理标准(FIPS)。2023年8月,FIPS 203(ML-KEM)、FIPS 204(ML-DSA)、FIPS 205(SLH-DSA)正式发布。2024年,FIPS 206(FN-DSA,即Falcon)也完成标准化。值得注意的是,NIST在2022年同时启动了第四轮征集,专门针对数字签名算法,以寻找更多样化的后量子签名方案。
4.2 入选算法规格深度解析
四种入选算法分别基于不同的数学困难问题,其硬件实现特性差异显著。下表汇总了各算法的核心规格参数,这些参数直接决定了硬件资源消耗、延迟和吞吐量。
| 算法 | 数学基础 | 标准编号 | 公钥大小 | 密文/签名大小 | 主要运算 | 硬件友好度 |
|---|---|---|---|---|---|---|
| ML-KEM (Kyber) | Module-LWE | FIPS 203 | 800 B (512) / 1184 B (768) / 1568 B (1024) | 768 B / 1088 B / 1568 B | NTT、多项式乘法、CBD采样 | ★★★★★ |
| ML-DSA (Dilithium) | Module-LWE/LWR | FIPS 204 | 1312 B (2) / 1952 B (3) / 2592 B (5) | 2420 B / 3293 B / 4595 B | NTT、拒绝采样、Hint生成 | ★★★★☆ |
| FN-DSA (Falcon) | NTRU格 | FIPS 206 | 897 B (512) / 1793 B (1024) | 666 B / 1280 B | FFT、浮点运算、离散高斯采样 | ★★★☆☆ |
| SLH-DSA (SPHINCS+) | 无状态哈希 | FIPS 205 | 32 B (128s) / 48 B (192s) / 64 B (256s) | 7856 B / 16224 B / 29792 B | SHA-2/SHAKE、WOTS+、FORS | ★★☆☆☆ |
4.2.1 CRYSTALS-Kyber (ML-KEM):格基KEM的标杆
Kyber基于模格上的带错误学习问题(Module-LWE),其核心操作是维度为2、3、4的模多项式环上的矩阵-向量乘法。硬件实现中,Kyber最关键的模块是NTT加速器,用于将多项式乘法从O(n²)复杂度降低到O(n log n)。以Kyber-768为例,其参数为:模数q=3329,多项式维度n=256,模格维度k=3。
在硬件架构上,Kyber的典型实现包含以下模块:
- NTT/INTT单元:采用流水线结构,支持256点NTT变换,通常使用16位乘法器配合Montgomery约减或Barrett约减。
- 采样器:包括CBD(中心二项分布)采样器和均匀采样器,用于生成秘密向量和错误向量。
- 哈希单元:集成SHA-3/SHAKE256,用于哈希化公钥、生成随机数和封装/解封装过程中的密钥派生。
- 编码/解码单元:负责多项式系数与字节流之间的转换,包括压缩和位打包操作。
4.2.2 CRYSTALS-Dilithium (ML-DSA):签名与KEM的协同设计
Dilithium与Kyber共享相似的代数结构,但增加了拒绝采样、Hint生成等签名特有逻辑。其安全基础是Module-LWE与Module-LWR的混合。Dilithium的硬件实现复杂度略高于Kyber,主要体现在签名过程中需要多次尝试(拒绝采样循环),导致延迟不确定。
Dilithium硬件架构的关键设计点包括:
- 双NTT引擎:由于签名验证需要同时进行矩阵乘法,建议配置两个独立的NTT单元并行工作,可显著降低验证延迟。
- 拒绝采样控制器:实现一个状态机来管理签名重试逻辑,每次尝试需要重新计算多项式乘法并检查系数范围。
- Hint生成与打包:该模块负责计算高位/低位分解,生成用于验证的Hint向量,涉及比较器和位操作逻辑。
4.2.3 Falcon (FN-DSA):紧凑签名的格基方案
Falcon基于NTRU格上的最近向量问题(CVP),其签名过程采用GPV框架,需要在高维格中进行离散高斯采样。与Dilithium不同,Falcon的采样过程依赖浮点运算(使用FFT进行多项式运算),这对硬件设计提出了特殊挑战。
Falcon硬件实现的核心难点在于:
- 浮点FFT单元:需要实现双精度浮点乘法器,面积开销较大。部分研究采用定点近似方案,但需要仔细评估安全性损失。
- 离散高斯采样器:基于累积分布函数(CDF)查表或Klein采样算法,需要存储大量预计算表。
- 树形哈希:Falcon使用GPG框架中的二叉树结构进行签名,需要额外的哈希计算和树遍历逻辑。
4.2.4 SPHINCS+ (SLH-DSA):无状态哈希签名的稳健之选
SPHINCS+完全基于哈希函数(SHA-2或SHAKE),不依赖任何数论假设,因此被认为是最保守、最抗量子攻击的签名方案。其代价是签名体积大(最小7.8KB)和签名速度慢(比格基方案慢1-2个数量级)。
SPHINCS+硬件实现的主要模块包括:
- 哈希核心:高性能SHA-256或SHAKE256引擎,通常采用多路并行架构(如4路或8路)来加速WOTS+和FORS的哈希链计算。
- 地址生成器:用于生成哈希树中各节点的唯一地址,避免状态冲突。
- 树遍历引擎:管理多棵哈希树的认证路径计算,需要存储中间节点值以优化性能。
4.3 安全强度评估与硬件设计权衡
NIST定义了五个安全强度类别,对应经典AES密钥长度。硬件设计者需要根据应用场景选择合适的安全等级,并在面积、功耗、延迟之间做出权衡。
安全强度与参数选择的关系:以Kyber为例,Kyber-512提供AES-128等效安全(Level I),Kyber-768提供AES-192等效安全(Level III),Kyber-1024提供AES-256等效安全(Level V)。在硬件实现中,安全等级提升意味着更大的多项式维度(k值从2增至4),NTT引擎的矩阵乘法规模相应扩大,RAM容量和乘法器数量都需要增加。
硬件资源对比(基于典型ASIC实现):
| 算法实例 | 逻辑门数 (等效) | RAM (KB) | 时钟周期 (密钥生成) | 时钟周期 (封装/签名) |
|---|---|---|---|---|
| Kyber-512 | ~45K | 4.5 | ~8K | ~12K |
| Kyber-768 | ~65K | 7.0 | ~12K | ~18K |
| Dilithium-2 | ~80K | 8.5 | ~15K | ~45K (签名) |
| Falcon-512 | ~120K | 12.0 | ~20K | ~60K (签名) |
| SPHINCS+-128s | ~50K | 6.0 | ~5K | ~500K (签名) |
4.4 实战案例:基于FPGA的多算法PQC硬件加速器设计
背景与约束:某安关产品需要同时支持ML-KEM和ML-DSA,目标是在Xilinx UltraScale+ FPGA上实现,要求密钥生成吞吐量不低于20K次/秒,签名吞吐量不低于5K次/秒,总逻辑资源消耗不超过80K LUT。
初始现象与目标:初步评估发现,若将Kyber和Dilithium的NTT引擎完全独立实现,需要约120K LUT,超出预算。需要设计一种资源共享方案。
关键参数分析:Kyber-768和Dilithium-2的NTT长度均为256,模数不同(Kyber: q=3329, Dilithium: q=8380417)。两者都使用相同的蝶形运算结构,但约减方法不同。Kyber使用Montgomery约减,Dilithium使用Barrett约减。
实际操作步骤:
- 统一NTT引擎设计:设计一个可配置模数的NTT引擎,通过寄存器配置选择Kyber或Dilithium模式。乘法器位宽设为24位(覆盖Dilithium的23位模数),约减单元采用可切换的Montgomery/Barrett路径。
- 时分复用调度:由于Kyber和Dilithium不会同时工作(网关要么执行KEM要么执行签名),采用一个仲裁器控制NTT引擎的访问权。通过双端口RAM存储中间结果,实现两个算法的分时复用。
- 采样器共享:Kyber的CBD采样器和Dilithium的均匀采样器可以共用随机数生成器(AES-CTR或SHAKE),仅需切换采样逻辑。
- 结果对比:优化后总资源消耗约68K LUT,满足预算。Kyber-768密钥生成吞吐量达到28K次/秒,Dilithium-2签名吞吐量达到6.5K次/秒,均超过目标。
风险与代价:资源共享引入了额外的多路选择器延迟(约2个时钟周期),导致单次操作延迟增加约5%。此外,模式切换需要约100个时钟周期的重配置时间,在频繁切换场景下需要权衡。
复盘经验:在PQC硬件设计中,算法间的共性(如NTT结构)是资源优化的关键突破口。建议在架构设计阶段就进行算法间指令级相似性分析,而非简单地将各算法模块独立堆叠。