3、后量子密码算法概览:基于格的、基于编码的、基于多变量的、基于哈希的、基于同源的PQC算法分类与特点

后量子密码(Post-Quantum Cryptography, PQC)并非单一算法,而是一个涵盖多种数学难题的算法家族。NIST在2024年发布的首批标准化成果中,CRYSTALS-Kyber(密钥封装)与CRYSTALS-Dilithium(数字签名)均基于格难题,而SPHINCS+则基于哈希函数。理解这五大类算法的数学根基、硬件实现特性与安全假设,是进行PQC硬件设计的第一步。不同算法在密钥尺寸、计算复杂度、并行度、存储带宽需求上差异巨大,直接决定了FPGA/ASIC实现时的资源占用、时序收敛难度与侧信道防护策略。

PQC五大算法族硬件实现特性总览 PQC算法族分类 基于格 (Lattice) Kyber / Dilithium / Falcon • 安全基础:MLWE / MSIS • 密钥尺寸:小~中 • 硬件友好度:★★★★★ • 主要运算:NTT/多项式乘法 基于编码 (Code) Classic McEliece / BIKE • 安全基础:Goppa码译码 • 密钥尺寸:极大 • 硬件友好度:★★★☆☆ • 主要运算:GF(2^m)乘法 基于多变量 (MV) UOV / MAYO / SNOVA • 安全基础:MQ问题 • 密钥尺寸:大 • 硬件友好度:★★★☆☆ • 主要运算:GF(2^k)乘加 基于哈希 (Hash) SPHINCS+ / XMSS • 安全基础:哈希抗碰撞 • 密钥尺寸:小 • 硬件友好度:★★★★☆ • 主要运算:SHA-2/SHA-3 基于同源 (Isogeny) SIKE (已淘汰) / CSIDH • 安全基础:同源计算 • 密钥尺寸:小 • 硬件友好度:★★☆☆☆ • 主要运算:椭圆曲线标量乘 硬件实现关键对比维度 • 并行度:格(高) > 哈希(中) > 编码(低) > 多变量(中) > 同源(低) • 侧信道风险:格(NTT中间值) > 编码(译码错误) > 多变量(GF乘) • 存储带宽需求:编码(极大) > 多变量(大) > 格(中) > 哈希(小)

3.1 基于格的PQC算法:NIST标准化的主力军

核心原理

基于格的密码学建立在格上困难问题之上,主要包括带错误学习问题(LWE)及其环变体MLWE(Module-LWE)。其核心思想是:给定一个矩阵A和向量b = A·s + e(其中e为小噪声),恢复秘密向量s在计算上是困难的。CRYSTALS-Kyber采用MLWE构造密钥封装机制(KEM),CRYSTALS-Dilithium则基于MSIS(Module-SIS)与MLWE的混合困难假设构造数字签名。硬件实现的核心运算为数论变换(NTT),它将多项式乘法从O(n²)降至O(n log n),其中n通常为256或512。

硬件设计要点:NTT运算单元是格密码硬件加速器的核心。在FPGA实现中,通常采用流水线结构的蝶形运算单元(Butterfly Unit),配合片上BRAM存储中间结果。Kyber-512的NTT需要128次蝶形运算,每次包含一次模乘、一次模加和一次模减。建议使用DSP48E1(Xilinx 7系列)或DSP58(UltraScale+)实现模乘,以降低LUT资源消耗。

判断方法与操作流程

在硬件实现格密码算法时,需按以下流程进行设计决策:

  1. 参数选择:根据安全等级确定n、q、k等参数(Kyber-512/768/1024对应不同安全级别);
  2. NTT架构选择:迭代型(资源友好)vs 流水线型(高吞吐);
  3. 模约简策略:Barrett约简(适合硬件流水线)vs Montgomery约简(适合模乘器复用);
  4. 并行度规划:单蝶形单元串行 vs 多蝶形单元并行,需权衡面积与吞吐率;
  5. 侧信道防护:在NTT输入处引入随机掩码,或在蝶形运算中插入随机延迟。

案例拆解:Kyber-768在Artix-7 FPGA上的实现

某安关项目需要在Xilinx Artix-7 200T上实现Kyber-768密钥封装,目标吞吐率为≥10k次封装/秒。初始设计采用单蝶形单元迭代架构,时钟频率150MHz,实测仅达到3.2k次/秒,远低于目标。

分析过程:通过Vivado时序报告发现,关键路径位于模乘后的模约简逻辑,组合逻辑延迟达6.8ns。进一步使用XPower分析功耗,发现BRAM读写功耗占比达42%。

优化措施:

  • 将单蝶形单元扩展为4路并行,利用Artix-7的DSP48E1资源(每个DSP实现一次模乘);
  • 采用两级流水线插入模约简中间寄存器,将关键路径缩短至4.2ns;
  • 将NTT中间结果从BRAM迁移至分布式RAM(LUTRAM),降低读写延迟。

结果对比:优化后时钟频率提升至210MHz,吞吐率达到12.8k次/秒,满足目标。资源消耗从12,400 LUT增至28,600 LUT,DSP从8个增至32个,但仍在器件容量内。

常见误区:初学者常将Kyber的NTT与Dilithium的NTT混用。两者虽然都基于NTT,但模数q不同(Kyber为3329,Dilithium为8380417),且Dilithium需要额外的反NTT后处理(如模约简到特定范围)。硬件设计中必须为不同算法实例化独立的NTT参数配置,不可复用同一蝶形单元而不做参数修改。

3.2 基于编码的PQC算法:经典安全但密钥庞大

核心原理

基于编码的密码学源于纠错码理论,其安全基础是一般线性码的译码问题(Syndrome Decoding)。Classic McEliece使用Goppa码,公钥为生成矩阵的随机置换形式,私钥为Goppa码的结构化表示。加密时,发送方将明文编码后加入随机错误向量;解密时,接收方利用Goppa码的快速译码算法(如Berlekamp-Massey算法)恢复明文。BIKE(Bit Flipping Key Encapsulation)则基于QC-MDPC码,密钥尺寸相对较小但译码算法为迭代概率型。

硬件实现特点

算法公钥尺寸私钥尺寸主要运算硬件瓶颈
Classic McEliece (m=12, t=64)1,057,792 bytes6,492 bytesGF(2^12)乘法、Goppa译码公钥存储与加载带宽
BIKE (Level 1)1,542 bytes1,542 bytesQC-MDPC译码(迭代翻转)译码迭代次数不确定
HQC (Level 1)2,249 bytes2,249 bytesReed-Muller + Reed-Solomon译码双译码器协同

在硬件实现中,Classic McEliece的最大挑战是公钥的存储与传输。1MB级别的公钥无法放入片上SRAM,必须使用外部DDR存储,并在加密操作时以DMA方式流式加载。GF(2^m)乘法器建议使用多项式基乘法器配合不可约多项式约简,m=12时每个乘法器约消耗120个LUT。

工程经验:对于Classic McEliece,建议采用“双缓冲”机制:当DMA从DDR加载公钥块到BRAM时,加密引擎同时处理上一块数据。这样可将公钥加载延迟隐藏在计算延迟之后,有效提升整体吞吐率。实测在Zynq UltraScale+上,双缓冲可将加密吞吐率从1.8k次/秒提升至3.1k次/秒。

3.3 基于多变量的PQC算法:签名速度快但密钥大

核心原理

多变量密码学基于有限域上多元二次方程组求解(MQ问题)的NP困难性。UOV(Unbalanced Oil and Vinegar)签名方案构造一组包含油变量(Oil)和醋变量(Vinegar)的二次方程组,私钥为可逆仿射变换,公钥为混合后的二次多项式组。签名时,随机选择醋变量值,求解线性方程组得到油变量;验证时,将签名代入公钥多项式检查是否等于消息哈希。MAYO和SNOVA是UOV的优化变体,通过减小公钥尺寸提升实用性。

硬件实现核心运算

多变量签名的主要计算量为有限域GF(2^k)上的大规模矩阵-向量乘法和多项式求值。以UOV为例,签名生成需要计算约O(n·m)次GF乘法,其中n为变量总数(如n=112),m为方程数(如m=64)。硬件设计的关键在于:

  • GF(2^k)乘法器阵列:使用组合逻辑实现,k=8时每个乘法器约消耗40-60个LUT;
  • 并行度优化:将m个方程的计算完全并行化,每个方程分配独立的乘法器阵列;
  • 密钥存储:公钥矩阵(约66KB)可存于BRAM,私钥仿射变换(约32KB)建议存于分布式RAM以降低访问延迟。

实战场景:车规级V2X签名加速

某智能网联汽车项目需要在ECU中实现UOV签名,要求签名生成延迟<1ms。ECU采用RISC-V处理器+硬件加速器架构。初始方案使用软件实现,签名延迟达8.5ms,无法满足要求。

硬件加速器设计:在FPGA中实现GF(2^8)乘法器阵列(64个并行),配合流水线结构的矩阵乘法单元。将公钥矩阵预加载至BRAM(占用36个36Kb BRAM),私钥仿射变换存储在寄存器堆中。签名流程分为三步:①计算消息哈希(SHA-256硬件核);②随机醋变量生成(使用TRNG);③线性方程组求解(高斯消元硬件单元)。

实测结果:签名生成延迟降至0.42ms,验证延迟0.18ms,满足V2X通信的实时性要求。硬件资源消耗为18,200 LUT、24个DSP、36个BRAM,功耗约0.8W。

安全警告:多变量签名方案在硬件实现时必须注意变量注入攻击。攻击者可通过电磁侧信道获取醋变量的随机值,从而恢复私钥结构。建议在醋变量生成后立即进行掩码处理,或在硬件中加入随机延迟扰乱时序相关性。

3.4 基于哈希的PQC算法:实现简单但状态管理复杂

核心原理

基于哈希的签名方案(HBS)仅依赖哈希函数的抗碰撞性和抗原像性。SPHINCS+采用无状态设计,通过FORS(Few-time Signature)和HORST(Hash to Obtain Random Subset Trees)组合实现一次性签名,再通过Merkle树实现多消息签名。XMSS则为有状态方案,需要维护密钥索引。硬件实现的核心是哈希函数的高效计算,SPHINCS+支持SHA-256、SHAKE256和Haraka三种哈希族。

硬件实现特点

哈希密码的硬件实现相对简单,主要资源消耗在哈希核的实例化数量上。SPHINCS+签名生成需要执行数千次哈希运算,因此多核并行哈希架构是提升性能的关键。以SHA-256为例,单个硬件核在Artix-7上可达到约2Gbps吞吐率,但SPHINCS+需要约2,000次哈希调用,因此需要8-16个并行哈希核才能达到可接受的签名速度。

设计建议:SPHINCS+硬件实现时,建议将哈希核组织为“树形并行”结构:Merkle树各层的哈希计算可并行执行,但需注意层间依赖。采用两级流水线:第一级计算叶子节点哈希,第二级计算内部节点哈希。实测在Kintex-7上,16核SHA-256并行架构可将签名时间从软件实现的120ms降至3.8ms。

常见误区与复盘

许多设计者误以为哈希密码“简单”而忽视状态管理。对于有状态的XMSS,硬件中必须实现防回滚机制:密钥索引需存储在非易失性存储器(如Flash)中,并采用“先写后增”的原子操作。若在签名过程中掉电,可能导致密钥重用,造成灾难性安全漏洞。建议在硬件中加入看门狗定时器和电源监测电路,确保密钥索引更新的原子性。

3.5 基于同源的PQC算法:理论优美但硬件实现困难

核心原理

同源密码学基于椭圆曲线同源计算的困难性。SIKE(Supersingular Isogeny Key Encapsulation)曾是最有潜力的同源方案,但在2022年被Castryck-Decru攻击破解,NIST已将其从候选名单中移除。CSIDH(Commutative Supersingular Isogeny Diffie-Hellman)基于更复杂的群作用问题,目前仍在研究中。同源计算的核心运算是大素数域上的椭圆曲线标量乘和同源映射的迭代计算。

硬件实现难点

同源密码的硬件实现面临三大挑战:

  • 有限域运算位宽大:SIKE使用434位素数域,需要实现434位乘法器(约消耗4,000个LUT);
  • 同源计算迭代深度大:每次同源映射需要执行数十次椭圆曲线点运算,且存在数据依赖,难以流水线化;
  • 存储开销高:中间结果需保存多个椭圆曲线点坐标,每个点需2个434位大数。

尽管SIKE已被破解,但同源方案的研究仍在继续。对于硬件工程师而言,理解同源密码的实现难点有助于评估未来新型PQC算法的硬件可行性。目前建议将同源算法作为研究性实现,而非产品化选择。

总结与选型建议:在PQC硬件选型时,应优先考虑NIST已标准化的算法:密钥封装选择Kyber,数字签名选择Dilithium(通用场景)或SPHINCS+(需要保守安全假设的场景)。若硬件资源极度受限且需要极快签名验证,可评估多变量方案(如MAYO)。编码方案(Classic McEliece)适合对公钥尺寸不敏感、但需要极强安全性的长期密钥场景。同源方案目前不建议用于产品化设计。