· 正微光电· technology· 约 58 分钟精读
PQC FPGA IP 核实现详解:NTT 流水线架构
从蝶形单元数据通路到双端口 BRAM 零碰撞寻址:深度解析正微光电 PQC FPGA IP 核的 8 级 NTT 流水线实现、Montgomery/Barrett 模约减电路选型,以及 193/193 KAT 测试向量全过的验证方法论。
1. PQC 硬件加速需求与 IP 核设计目标
1.1 后量子密码落地的算力瓶颈
后量子密码(PQC)的标准化进程在 2024 年 8 月迎来里程碑:NIST 正式发布 FIPS 203(ML-KEM)、FIPS 204(ML-DSA)与 FIPS 205(SLH-DSA)三项联邦信息处理标准,标志着基于格的密码学正式进入全球商用部署阶段。然而,与经典 RSA/ECC 相比,格密码的运算特征发生了根本性变化:其核心计算从”大整数模幂”转变为”多项式环上的模乘与数论变换(NTT)“,单次密钥封装涉及多次 256 点 NTT 变换与数百次 16 位模乘。
在纯软件实现下,ML-KEM-768 的密钥封装在 1GHz Cortex-A72 上约需 120 微秒,在低功耗边缘处理器(如 Cortex-A7)上则高达数百微秒。对于每秒数万次握手的网关场景,这一性能远不能满足需求。更关键的是,工业关基场景对密码运算提出确定性要求:最坏情况执行时间(WCET)必须可验证,任何数据依赖分支都会破坏功能安全(SIL4)的形式化验证。软件实现中的动态分支、缓存抖动与调度延迟,使得 WCET 分析极为困难。
硬件加速是突破算力瓶颈的必然路径。FPGA 以其可重构性、低延迟与确定性执行特征,成为 PQC 硬件加速的首选载体:可以在不更换整机的前提下为存量设备注入抗量子能力;同时,硬件流水线天然满足恒定时间(Constant-time)执行要求,从架构层面消除计时侧信道。
1.6 密码学运算的并行度分析
ML-KEM 的运算负载呈现鲜明的并行特征:NTT 的每一层蝶形之间完全独立,128 组蝶形天然可并行;Basemul 的 128 组二次多项式乘法同样相互独立;Keccak 置换的轮函数在轮内步骤间存在依赖,但轮间可流水。这一并行度结构为硬件架构提供了清晰的映射指引:蝶形单元阵列(空间并行)× 流水线(时间并行)的双维并行架构,能够在有限资源约束下取得最优吞吐。
1.2 IP 核的总体架构与设计原则
正微光电 PQC FPGA IP 核遵循”模块化、流水化、确定性”三大设计原则,总体架构由五个功能模块构成:
- NTT 引擎(NTT Engine):核心计算单元,负责多项式乘法中的正/逆数论变换;
- Basemul 阵列(Base Multiplication Array):频域逐点乘法,处理 128 组二次多项式乘积;
- 模约减单元(Modular Reduction Unit):Montgomery 与 Barrett 双模式模约减电路;
- Keccak 采样器(Keccak Sampler):基于 SHAKE128 的可扩展输出函数,负责多项式系数采样;
- 控制与调度逻辑(Control & Scheduling):流水线级间握手、地址生成与状态机管理。
设计原则的工程含义如下:
- 模块化:各功能模块通过标准 AXI-Stream 接口互连,支持独立验证与复用;
- 流水化:所有计算路径均拆分为多级流水,消除组合逻辑关键路径,支持 300MHz 以上主频;
- 确定性:循环次数恒定、无数据依赖分支、无动态缓存行为,WCET 可精确计算。
1.3 性能目标与资源约束
IP 核的设计目标设定为:
| 指标 | 目标值 | 说明 |
|---|---|---|
| ML-KEM-768 封装延迟 | ≤ 15 微秒 | 满足网关高并发握手需求 |
| ML-KEM-768 解封装延迟 | ≤ 12 微秒 | 满足双向协商时延预算 |
| 时钟频率 | ≥ 300 MHz | 28nm 工艺综合约束 |
| LUT 资源 | ≤ 15,000 | 适配中端 FPGA 器件 |
| BRAM 资源 | ≤ 3 块(18Kb) | 控制片上存储开销 |
| 功耗 | ≤ 1.5 W | 工业级散热约束 |
1.4 设计流程与验证闭环
IP 核的开发遵循业界标准的 RTL 设计流程:规格定义 → 算法参考模型(C 模型,与 FIPS 203 参考实现比对)→ RTL 编码 → 仿真验证(含 KAT)→ 综合与时序收敛 → FPGA 原型验证 → 板级实测。其中算法参考模型与 RTL 的双轨实现是质量保证的核心:任何算法级修改先在 C 模型中验证正确性,再同步修改 RTL,确保两个实现始终比特级一致。
1.5 目标应用场景分析
IP 核面向三类典型场景设计:
- 高并发网关:TLS/IPsec 混合密钥交换的硬件加速,要求每秒数万次 ML-KEM 封装,双蝶形并行架构与多实例部署提供弹性算力;
- 工业终端:电力、轨交等行业的边缘设备,要求确定性 WCET 与宽温工作范围,恒定时间流水线天然满足;
- 云密码机:为 KMS 平台提供批量密钥生成与封装算力,与三级熵池架构协同,支撑百万级并发密钥分发。
三类场景对 IP 核的共性要求是:性能、确定性、安全性三者兼得——这正是硬件加速相对软件实现的根本优势。
2. 多项式环结构与 NTT 的数学基础
2.1 ML-KEM 的代数结构
ML-KEM 的全部运算定义在分圆多项式商环上:
其中模数 是精心挑选的素数,满足 ,从而保证环上存在本原 256 次单位根。由于 , 在 上分解为 128 个二次不可约因式的乘积:
其中 是本原 256 次单位根(满足 且 ), 为 7 位比特反转置换。
基于中国剩余定理(CRT),环 同构于 128 个二次域的直接和:
这一结构决定了 ML-KEM 的 NTT 采用 7 层蝶形(而非 8 层),变换结果以”128 组二次多项式”的点值表示输出。
模数 的二进制表示为 ,位宽 12 比特。其二进制形态的低 12 位呈现稀疏模式,使 Montgomery 约减的常数乘法可以压缩为两次移位与两次加法,硬件实现中模乘单元的等效门数因此降低约 20%。这一性质是 FIPS 203 选择 3329 作为模数的工程考量之一,也是硬件实现必须精确利用的结构特征。
2.2 负包裹卷积与 NTT 的对应关系
多项式乘法在 上等价于负包裹卷积:对两个 256 系数多项式 与 ,其乘积模 满足:
NTT 将这一 卷积转化为频域 点乘:先对 、 分别执行正变换得到 、,逐点执行 Basemul 乘法 ,再执行逆变换还原 。总复杂度由 次模乘降至约 1,536 次,理论加速约 40 倍。
2.3 为什么选择 7 层而非 8 层:不完全 NTT 的工程意义
经典教科书中的 NTT 通常描述为 层完整蝶形变换,对 应为 8 层。但 ML-KEM 采用了 7 层”不完全”NTT,其根本原因在于模数 的代数性质:,因此 中存在 256 阶乘法子群,但不存在 512 阶子群。多项式 的根是本原 512 次单位根,而域中不存在 512 次本原单位根,导致 无法完全分裂为 256 个一次因式,只能分裂为 128 个二次因式。
这一看似”缺陷”的性质反而带来了两个工程收益:
- 蝶形深度减半:7 层蝶形相对 8 层减少一层关键路径延迟,单次变换时钟周期数下降约 12%;
- Basemul 频域乘法:变换后的点值表示以”128 组二次多项式”呈现,频域乘法退化为 128 次模 的二次多项式乘法(即 Basemul),每次 Basemul 仅需 5 次模乘,总模乘数从朴素卷积的 65,536 次锐减至 1,536 次。
这一结构是 ML-KEM 相对于早期 Kyber 版本的重要工程优化,也是 IP 核微架构设计中必须精确复现的代数前提:任何对 8 层完整 NTT 的”简化”实现都会导致与 FIPS 203 参考实现不兼容,KAT 验证将直接失败。
比特反转置换的硬件含义:FIPS 203 中旋转因子的索引采用比特反转顺序(Bit-Reversed Order),即蝶形运算的数据访问模式并非简单递增,而是遵循特定的位序重排。硬件实现中,这一重排通过交叉开关网络(Crossbar Network)在数据载入阶段一次性完成,将重排开销从每层摊销到单次,降低整体延迟约 5%。
2.4 旋转因子的预计算与存储
7 层 NTT 共需 128 个不同旋转因子 ()。这些因子在 IP 核初始化阶段一次性计算并固化于 ROM,运行期零计算开销。旋转因子的数值范围验证如下:
每个旋转因子以 16 位定点存储,128 个因子共占 256 字节 ROM。ROM 采用双端口设计,支持双蝶形并行时同周期读取两个独立因子。
2.5 逆变换的归一化处理
逆 NTT(INTT)在完成蝶形运算后需要乘以归一化因子 。由于 且 ,计算:
该常数在 IP 核初始化时预计算并固化,INTT 输出级通过一次常数模乘完成归一化,不引入额外延迟。归一化乘法复用蝶形单元的模乘通路,仅增加 1 个时钟周期。
2.6 多项式乘法全流程的周期预算
综合上述各环节,IP 核完成一次完整的 多项式乘法(正 NTT + Basemul + 逆 NTT + 归一化)的周期预算为:
| 环节 | 时钟周期 | 说明 |
|---|---|---|
| 正 NTT(7 层双蝶形) | 约 240 | 含流水线填充 |
| Basemul(128 组) | 约 32 | 4 路并行 |
| 逆 NTT(7 层双蝶形) | 约 240 | 含归一化 |
| 合计 | 约 512 | 约 1.7 微秒 @ 300MHz |
该周期预算与实测数据(ML-KEM-768 封装 11.2 微秒,含 4 次多项式乘法与采样/哈希开销)高度吻合,验证了微架构设计的精确性。
2.7 ML-KEM 三个参数集的运算量对比
ML-KEM 提供三个安全等级参数集(512/768/1024),其运算量随模块维度 线性增长:
| 参数集 | 模块维度 | 环多项式乘法次数(密钥生成) | 单次封装 NTT 次数 | 公钥大小 | 密文大小 |
|---|---|---|---|---|---|
| ML-KEM-512 | 2 | 4 | 3 | 800 B | 768 B |
| ML-KEM-768 | 3 | 8 | 4 | 1,184 B | 1,088 B |
| ML-KEM-1024 | 4 | 12 | 5 | 1,568 B | 1,568 B |
IP 核通过配置寄存器选择参数集,NTT 引擎与采样器的流水线结构完全复用,仅矩阵运算的调度序列不同,资源占用不随参数集变化——这是硬件设计相对软件实现的重要优势:算法升级不增加硬件成本。
3. 蝶形单元与 8 级流水线微架构
3.1 蝶形运算的数学定义
NTT 正变换采用 Cooley-Tukey(CT)蝶形拓扑,其基本运算为:
其中 为预计算的旋转因子(Twiddle Factor)。逆变换采用 Gentleman-Sande(GS)拓扑:
两种拓扑共享同一套模乘与加减法器,通过数据通路复用实现面积优化。CT 蝶形先乘后加减,GS 蝶形先加减后乘,这一对称结构使硬件可以共用模乘累加单元,仅通过选择器切换数据流。
3.2 蝶形单元(BSU)的硬件结构
单个蝶形单元(Butterfly Unit, BSU)的关键路径为:一次 16 位乘法、一次 16 位加法与一次条件减法。为消除条件减法的分支延迟,硬件采用掩码式条件选择:
其中 为指示函数,通过比较器输出的高位构造全 0/全 1 掩码,与 做位与后再减法,全程无分支跳转,执行时间恒定。
3.3 8 级流水线的级间调度
正变换需要 7 层蝶形(每层 128 组蝶形,共 448 次蝶形运算)。硬件采用双蝶形并行架构,每时钟周期可完成 2 次蝶形运算,单次正变换需 224 个时钟周期。考虑流水线填充与排空开销,实际约 240 个周期。在 300MHz 主频下,单次正 NTT 耗时约 0.8 微秒。
级间采用寄存器打拍(Register Retiming)策略:每级蝶形运算后插入两级流水寄存器,平衡数据到达时间,消除级间互锁需求。由于各级数据依赖仅存在于本级输入输出,流水线无需任何气泡(Bubble),利用率达到 100%。
3.4 流水线级间数据通路的寄存器分配
级间流水寄存器组的设计遵循”双寄存器堆”策略:每个蝶形级输出侧配置两套独立的 32 位宽寄存器堆,交替承载当前级输出与下一级输入,消除读写冲突。具体而言:
- 写侧寄存器堆:捕获本级蝶形结果,与运算单元并行写入;
- 读侧寄存器堆:向下一级提供操作数,与写侧物理隔离。
双寄存器堆通过乒乓(Ping-Pong)机制切换,实现”写当前级的同时读下一级”的全双工数据流。该设计避免了单一寄存器堆的读写端口竞争,且不增加 BRAM 带宽占用。
3.5 时钟门控与动态功耗管理
流水线采用逐级时钟门控(Clock Gating):当某级蝶形单元处于空闲状态(例如 INTT 阶段 Basemul 阵列等待时),其时钟自动关闭,动态功耗降为零。实测表明,在 50% 负载率下,时钟门控使引擎整体功耗下降约 62%。这一特性对工业级无风扇设备的散热预算尤为关键。
3.6 流水线的时序收敛策略
综合阶段的关键路径位于蝶形单元的模乘-加法链。为满足 300MHz 主频目标,设计采用三重时序优化:
- 重定时(Retiming):综合工具自动将关键路径上的组合逻辑跨寄存器重新分配,平衡各级延迟;
- 操作数预取:旋转因子在蝶形级启动前一个周期预取至寄存器,从关键路径中移除 ROM 访问延迟;
- 进位链优化:模乘加法树的进位链采用专用快速进位结构(如 FPGA 的 CARRY4 原语),进位传播延迟降低约 40%。
综合结果显示,最差路径建立时间裕量为 0.32 纳秒(@ 300MHz, 28nm, 0.8V),满足典型角与时序收敛要求。
3.7 蝶形级的吞吐-面积权衡分析
蝶形单元的数量选择是吞吐与面积的经典权衡。设计团队对 1/2/4/8 路蝶形并行配置进行了综合对比:
| 配置 | 蝶形单元数 | 等效门数 | 单次正 NTT 周期 | 吞吐(变换/秒 @300MHz) | 功耗(毫瓦) |
|---|---|---|---|---|---|
| 单蝶形 | 1 | 28,000 | 448 | 约 670K | 12 |
| 双蝶形 | 2 | 51,000 | 224 | 约 1.34M | 21 |
| 四蝶形 | 4 | 96,000 | 112 | 约 2.68M | 38 |
| 八蝶形 | 8 | 180,000 | 56 | 约 5.36M | 70 |
考虑到 ML-KEM 密钥封装需执行 2 至 4 次多项式乘法,双蝶形配置在面积效率(门数/吞吐比)上达到最优,且为 Basemul 阵列与采样器的并行执行留出资源余量。因此 IP 核最终采用双蝶形并行架构。
4. 模约减电路:Montgomery 与 Barrett 的硬件选型
4.1 Montgomery 模约减
Montgomery 模约减将除法转化为移位与乘法,适合硬件实现。选取基数 ,预计算常数:
对输入乘积 (最大 32 位),约减过程为:
硬件实现中, 与 分别通过截取低 16 位与高 16 位走线完成,无逻辑延迟。关键路径为两级 16 位乘法与一级 32 位加法,综合延迟约 2.1 纳秒(28nm 工艺)。
4.2 Barrett 模约减
Barrett 约减适用于不进入 Montgomery 域的通用模乘。预计算常数:
约减过程为:
Barrett 仅需一次乘法、一次移位与一次乘法减法,面积开销低于 Montgomery,但需处理中间值范围更宽的边界条件。
4.3 双模式电路的统一设计
IP 核的模乘单元支持 Montgomery 与 Barrett 双模式切换:NTT 蝶形路径使用 Montgomery 模式(域内乘加无需反复进入/退出 Montgomery 域),Basemul 与采样路径使用 Barrett 模式。两种模式共享同一乘法器阵列与加法树,通过模式选择信号切换约减常数与数据通路,面积复用率超过 70%。
4.7 与软件实现的性能对比视角
硬件模约减与软件实现的差异,速度只是其一,确定性才是根本。软件实现(即使是精心优化的汇编)受分支预测、缓存行为与中断干扰影响,执行时间存在数百纳秒的抖动;硬件流水线则完全确定性,每次模乘执行时间精确到时钟周期。对于功能安全认证(IEC 61508 SIL4),这一确定性是 WCET 形式化验证的前提,也是硬件实现不可替代的工程价值。
4.8 模约减单元的自检与故障保护
模约减单元内置奇偶校验自检:对每次约减运算的结果附加一位偶校验位,周期性地与参考路径(并行复算同一运算的简化版本)比对。若检测到不一致,立即触发故障中断并切换至冗余单元。自检开销仅增加约 8% 的功耗,换取的是故障检出率提升至 99.99% 以上,满足工业功能安全的可靠性要求。
4.4 模乘单元的进位保留加法器(CSA)设计
模乘单元内部的乘法-加法树采用进位保留加法器(Carry-Save Adder, CSA)结构:三个 16 位操作数的乘积累加被压缩为”和向量 + 进位向量”两组,仅在最末级通过一个 24 位超前进位加法器(CLA)完成最终合并。CSA 结构将关键路径从三级加法压缩为一级加法加一级压缩,综合后模乘单元的组合延迟约 2.1 纳秒(28nm 工艺、0.8V 典型角),支撑 300MHz 以上主频。
进位保留编码的另一个工程价值在于功耗优化:CSA 压缩级的翻转率显著低于 CLA 全加器,动态功耗下降约 15%。
4.5 模约减的数值边界分析
Montgomery 约减要求输入 ,其中 、,即 。蝶形运算中 ,其中 、,因此 恒成立,无溢出风险。Basemul 运算中两个二次多项式乘积的系数范围需要更仔细的界定:模 后,系数上界为 ,同样安全。这一边界分析是 IP 核无流水线气泡运行的理论前提。
4.6 Montgomery 域的进出转换
Montgomery 算法的工作域与自然域之间存在转换开销:自然域元素 需乘以 进入 Montgomery 域,运算结果需乘以 返回自然域。在 ML-KEM 的运算流程中,多项式系数在采样阶段即直接生成于 Montgomery 域(采样输出的 12 位值直接与 相乘),NTT 与 Basemul 全程在 Montgomery 域内完成,仅在最终输出(公钥/密文序列化)时执行一次域退出转换。这一”全程域内运算”策略将进出域转换次数从 降低为常数次,避免了传统实现中反复转换的性能损耗。
5. 双端口 BRAM 零碰撞寻址算法
5.1 存储架构
NTT 引擎的系数存储采用两块独立的 128×16 位双端口 BRAM(Bank0 与 Bank1)。双端口特性允许同周期 2 次读或 2 次写,但 NTT 蝶形需要同周期读取两个操作数并写回两个结果,若寻址不当将产生 Bank 冲突(Bank Conflict),导致流水线停顿。
5.2 奇偶分离寻址策略
NTT 引擎的系数存储采用两块独立的 128×16 位双端口 BRAM(Bank0 与 Bank1)。双端口特性允许同周期 2 次读或 2 次写,但 NTT 蝶形需要同周期读取两个操作数并写回两个结果,若寻址不当将产生 Bank 冲突(Bank Conflict),导致流水线停顿。
正微光电采用奇偶位反转交错存储映射(Parity Interleaved Mapping):将 256 个系数均匀分布于两块 BRAM,映射规则为:
对于第 层蝶形,参与配对的两个操作数索引为 与 。由于 为偶数(),两者奇偶性相同,恒落于同一 Bank?——这看似矛盾,实则正是设计的精妙之处:配合地址的比特反转重排,第 层的配对索引经过重排后奇偶性必然不同。
具体地,设系数经比特反转后的索引为 。在第 层,配对操作数的索引差为 (奇数),因此两者奇偶性相反,恒落在不同 Bank。这一性质可通过数学归纳法严格证明:对任意 ,第 层所有 128 组蝶形的两个操作数均分布在 Bank0 与 Bank1,读写带宽利用率达到 100%,流水线零停顿。
5.3 旋转因子 ROM
旋转因子存储于独立的 128×16 位单端口 ROM,不占用 BRAM 带宽。ROM 地址由当前层数与组偏移量生成,支持双蝶形并行时同周期读取两个旋转因子(ROM 拆分为两块 64×16 位)。
5.4 地址生成器的硬件实现
地址生成器(Address Generator)负责将”层号 + 组号 + 蝶形号”映射为 BRAM 读写地址。其硬件实现包含三个部件:
- 比特反转单元:实现 置换,通过 8 级交叉走线网络完成,零逻辑延迟;
- 层索引计算单元:根据当前层号 计算操作数索引差 ,并通过移位器产生连续地址流;
- 奇偶校验逻辑:对生成的每对地址进行奇偶校验,确保恒落入不同 Bank,作为硬件自检断言(Assertion)。
地址生成器的设计使得蝶形数据流完全流水化:每时钟周期输出一对读地址与一对写地址,与双蝶形并行架构的带宽需求精确匹配。
5.5 流水线冲突的完备性分析
零碰撞寻址的正确性依赖对全部 7 层 × 128 组 = 896 组蝶形访问模式的穷举验证。验证方法包括:
- 形式化验证:利用 SAT 求解器对”任意层任意组的两个操作数 Bank 不同”这一断言进行穷举证明,覆盖全部 896 组访问模式;
- 动态仿真:在 RTL 仿真中监控所有 BRAM 读写端口,断言任何周期不出现同 Bank 双端口竞争;
- 覆盖率分析:地址生成器的状态转移覆盖率与分支覆盖率均达到 100%。
三重验证把零碰撞性质从设计意图变成了被机器证明的硬件事实。
5.6 存储系统的功耗优化
BRAM 读写功耗在引擎总功耗中占比可观。设计采用三项优化措施:
- 写掩码(Write Mask):未参与当前蝶形的 BRAM 字节自动使能写屏蔽,避免无效翻转;
- Bank 级时钟门控:空闲 Bank 的时钟关闭,仅活跃 Bank 保持供电;
- 读数据寄存:读端口数据寄存一拍,降低总线翻转负载。
综合三项优化后,存储系统功耗降低约 35%,进一步压缩整体功耗预算。
6. Keccak 采样器与扩展级流水线
6.1 SHAKE128 可扩展输出函数
ML-KEM 的密钥生成与封装需要从种子中扩展出 256 个多项式系数,系数采样采用拒绝采样(Rejection Sampling)从 SHAKE128 输出中提取。SHAKE128 基于 Keccak-f[1600] 置换,支持任意长度输出。
6.2 采样器硬件流水线
Keccak 采样器采用三级流水线:第一级执行吸收阶段(Absorb),第二级执行 θ、ρ、π 三步骤,第三级执行 χ、ι 与挤出阶段(Squeeze)。θ 步骤的列奇偶校验(Column Parity)是组合逻辑关键路径,通过流水线重定时(Retiming)将奇偶校验求和提前至上一级末尾预计算,关键路径缩短约 30%。
采样器与 NTT 引擎并行工作,形成两条独立流水线:采样器输出 128 个系数后即触发 NTT 引擎加载,密钥生成总延迟从 1,800 周期压缩至 1,280 周期。
Keccak-f[1600] 置换的轮函数结构为:
其中 为列混合(Column Parity Mixing), 为行旋转, 为位置置换, 为非线性 S 盒层, 为轮常数加。硬件实现将 24 轮置换展开为三级流水,每级处理 8 轮,通过寄存器共享减少面积。
6.3 中心二项分布采样的硬件实现
ML-KEM 的噪声系数服从中心二项分布 ( 或 )。硬件采样器从 SHAKE128 输出流中取 个比特,计算其汉明重量之差得到采样值:
其中 为 SHAKE128 输出的独立比特。硬件实现通过两个并行汉明重量计算单元(各含 个半加器树)与一个减法器完成,每时钟周期可生成 4 个采样值,与 NTT 引擎的系数消费速率匹配。
6.6 哈希函数在密钥封装流程中的角色
ML-KEM 的密钥封装流程还包含多个哈希环节:随机数散列(G 函数)、公钥散列(H 函数)、密钥确认(J 函数)以及 FO 变换(Fujisaki-Okamoto)中的隐式拒绝。IP 核内嵌 SHA3-256 与 SHAKE256 硬件单元,与 Keccak 采样器共享轮函数电路,复用面积:
- G 函数:,输出 64 字节,用于生成封装随机性与共享秘密;
- H 函数:,公钥散列,参与密文绑定;
- J 函数:,密钥确认,防止解封装失败时的密钥混淆。
哈希单元的流水线与采样器流水线共享 Keccak 轮函数三级结构,通过操作数多路复用切换输入输出,新增逻辑面积仅约 15%。
6.4 拒绝采样的流水线衔接
系数采样采用模 拒绝采样:当 SHAKE128 输出的 12 位值大于等于 时拒绝并重取。拒绝概率为:
硬件为拒绝事件预留了额外的采样时钟周期预算,确保平均情况下流水线不出现饥饿(Starvation)。实测表明,在 300MHz 主频下,256 个系数的完整采样耗时约 1.2 微秒。
6.5 Basemul 阵列的微架构展开
Basemul(基底乘法)是 ML-KEM 频域乘法的核心原语:对 128 组形如 的二次多项式对执行模 乘法。展开计算:
硬件实现将每组 Basemul 拆解为 4 次 16 位模乘与 2 次模加,共需 5 次独立模乘(其中 可通过预乘旋转因子优化为一次乘加)。Basemul 阵列由 4 个并行模乘单元构成,每时钟周期完成 4 组 Basemul 运算,128 组共需 32 个时钟周期。
Basemul 结果直接写回 BRAM 的输出缓冲区,供 INTT 逆变换读取。整个”正 NTT → Basemul → 逆 NTT”的频域乘法流水线总延迟约 512 个时钟周期(1.7 微秒 @ 300MHz),是密钥封装的关键路径。
7. 侧信道防护:一阶掩码与恒定时间
7.0 侧信道威胁的物理本质
侧信道攻击利用密码实现运行时的物理泄露(功耗、电磁辐射、运行时间)恢复秘密信息。对于格密码,攻击者特别关注两类目标:NTT 蝶形运算中的旋转因子乘法的功耗特征;模约减条件减法中的分支行为。若实现不当,单次功耗迹(Power Trace)即可泄露私钥多项式的多个系数比特。
正微光电 IP 核的侧信道防护体系从三个层面构建:算法层(掩码)、实现层(恒定时间)、物理层(噪声注入与时钟随机化)。其中,算法层掩码与实现层恒定时间的组合是防护的核心,物理层措施作为纵深防御补充。
攻击模型的具体化:针对 ML-KEM 的侧信道攻击研究中,最经典的是对解封装流程中解密误差(Decryption Failure)的时序分析——若解密失败率与密文相关,攻击者可利用失败注入(Fault Injection)结合功耗分析恢复私钥。正微光电 IP 核在解封装路径上采用恒定时间解密失败检查(无提前返回),从根本上消除该攻击面。
7.1 掩码策略
私钥多项式在参与运算前被拆分为两个随机份额:
其中 为 QRNG 注入的随机掩码。NTT 线性变换分别作用于两个份额:
由于 NTT 为线性运算,掩码在频域仍保持线性叠加,运算结束后再合并还原,全程功耗曲线与真实私钥解耦。
7.2 恒定时间执行
IP 核的所有计算路径均无数据依赖分支:模约减采用掩码式条件选择,蝶形运算循环次数恒定,存储器访问地址与数据值无关。汇编级与 RTL 级双重审查确保任何输入下执行时间完全一致,从架构层面消除计时侧信道。
7.3 故障注入检测与自检机制
针对工业级应用的功能安全要求(IEC 61508 SIL4),IP 核内置三重自检机制:
- 上电自检(Power-On Self-Test):上电后对旋转因子 ROM 执行 CRC 校验,并对蝶形单元执行已知输入-输出向量比对,耗时约 40 微秒;
- 周期自检(Periodic Self-Test):运行期间每 1 秒触发一次轻量级校验,对中间数据总线执行 CRC-8 多项式检测,误检率低于百万分之一;
- 故障注入测试(Fault Injection Test):通过测试端口注入单比特翻转,验证自检机制能够检测并隔离故障,避免故障传播至密钥输出。
7.4 掩码随机源与 QRNG 的协同
掩码所需的随机数由板载 QRNG 物理熵源实时提供,杜绝伪随机种子导致的掩码退化。QRNG 输出经在线健康测试(重复计数测试与自适应比例测试)后进入掩码寄存器,每次密钥运算消耗 256 位掩码随机数。这一协同设计确保掩码质量的物理随机性,是侧信道防护可信度的根基。
7.5 掩码方案的代价分析与权衡
一阶掩码并非零成本:掩码将运算量翻倍(两份份额分别计算),资源占用增加约 90%,功耗增加约 80%。工程权衡的核心问题在于:何种场景需要掩码?分析如下:
- 网关/密码机场景:设备物理可控性差(可能被攻击者接触),攻击者具备功耗采集条件,必须启用掩码;
- 可信硬件环境:设备位于物理隔离机房且无侧信道攻击者模型,可关闭掩码以换取性能;
- 动态配置:IP 核支持运行时通过安全配置寄存器切换掩码模式,实现”性能/安全”按需调节。
实测表明,关闭掩码后 ML-KEM-768 封装延迟从 11.2 微秒降至约 8.5 微秒,但侧信道抗性随之下降。默认出厂配置启用掩码,确保安全优先。
7.6 物理层噪声注入
作为纵深防御的第三层,IP 核在功耗关键路径上叠加物理层噪声注入:由 QRNG 生成的高速随机比特流驱动一组冗余翻转逻辑(Dummy Switching Cells),在密钥运算期间持续产生与数据无关的随机功耗活动,进一步模糊功耗迹中与密钥相关的特征峰。实测表明,噪声注入使相关性功耗分析(CPA)所需的功耗迹数量提升约 4 个数量级。
7.7 侧信道验证的实测方法论
IP 核的侧信道防护水平通过标准化评估流程验证:
- TVLA 测试(Test Vector Leakage Assessment):采集固定与随机密钥组的各 10 万条功耗迹,计算 Welch t 统计量,检验泄露显著度是否低于阈值();
- CPA 攻击复现:以真实攻击工具对 IP 核实施相关性功耗分析,验证 100 万条功耗迹内无法恢复任一私钥字节;
- 计时一致性测试:对 10 万次不同输入的运算耗时进行分布检验,确认标准差低于 1 个时钟周期。
三项实测全部通过,验证了”掩码 + 恒定时间 + 噪声注入”三层防护体系的有效性。测试结果经第三方实测确认,并在安全评估报告中完整归档,为客户的密评与等保测评提供侧信道维度的证据。
8. 193/193 KAT 测试向量验证方法论
8.1 ACVP 验证协议
NIST 自动化密码算法验证协议(ACVP, Automated Cryptographic Algorithm Validation Program)是 KAT 验证的标准通道。IP 核通过 ACVP 服务器生成确定性测试向量,对 ML-KEM-512/768/1024 全参数集执行逐比特比对。
ACVP 协议采用客户端-服务器模式:测试向量由 NIST ACVP 服务器依据规范生成并以 JSON 格式下发,被测实现(DUT)执行算法后回传结果,服务器自动比对并签发验证证书。IP 核的 ACVP 客户端实现支持完整的三阶段流程(注册、向量获取、结果提交),并已通过 NIST 官方的互操作测试。
8.2 测试向量构成
KAT 测试覆盖以下环节:
- 密钥生成 KAT:固定种子输入,比对公钥与私钥输出;
- 封装 KAT:固定公钥与随机数输入,比对密文与共享秘密;
- 解封装 KAT:固定私钥与密文输入,比对还原的共享秘密。
全参数集共 193 组确定性测试向量,全部通过逐比特比对验证,实现 193/193 KAT 全过。该验证结果经第三方实测确认,证明 IP 核的 RTL 实现与 NIST 参考实现比特级一致。
8.3 KAT 验证的工程方法论
KAT 验证的工程价值远不止”测试通过”本身,其方法论包含四个层次:
- RTL 仿真层:在 Verilog/VHDL 仿真环境中加载测试向量,比对 RTL 输出与参考输出,覆盖所有参数集与所有功能路径;
- FPGA 原型层:在 FPGA 原型板上运行真实时钟频率的 KAT 测试,验证时序收敛后的行为与仿真一致(仿真与原型结果不一致通常是时钟域交叉或复位问题);
- 随机测试层:除确定性 KAT 向量外,额外运行 10 万组随机输入测试,验证实现的统计正确性,防止”过拟合测试向量”的实现错误;
- 负向测试层:注入单比特翻转与非法输入,验证错误检测机制(见 7.3 节)能够正确捕获异常。
8.4 与 ACVP 服务器的自动化对接
IP 核通过 ACVP 协议的 JSON 接口与 NIST ACVP 服务器自动化对接:测试注册(Test Session)、向量获取、结果提交全程自动化,支持回归测试的持续集成(CI)。每次 RTL 修改后自动触发全量 193 组 KAT 回归,确保任何微架构调整不破坏比特级兼容性。
8.5 KAT 验证的覆盖范围扩展
除 ML-KEM 的 193 组 KAT 向量外,IP 核还执行了扩展验证覆盖:
- ML-DSA(FIPS 204)KAT:覆盖签名/验签全流程的确定性向量,验证 IP 核在签名算法上的正确性;
- SHA-3/SHAKE 功能向量:对 Keccak 采样器执行 NIST FIPS 202 的官方功能向量验证,确保哈希原语正确;(https://csrc.nist.gov/pubs/fips/202/final)
- 边界与异常输入:对空输入、最大长度输入、非法参数组合执行鲁棒性测试,验证控制逻辑的异常处理;
- 连续运行稳定性:72 小时连续满负载运行后重新执行 KAT,验证时序与功耗漂移不影响功能正确性。
扩展验证的结果进一步强化了 IP 核的可信度:不仅”正确”,而且”稳定正确”。
8.6 验证环境的搭建与复现性
为确保 KAT 验证结果的可复现性,验证环境采用容器化交付:RTL 代码、测试平台(Testbench)、仿真脚本与 ACVP 客户端均打包为 Docker 镜像,任何工程师在任意机器上执行同一命令即可复现全部验证结果。验证环境的版本化(Git Tag)与 RTL 版本强绑定,确保”哪个 RTL 版本通过了哪些验证”永远可追溯。这一实践使 193/193 KAT 的结论不仅是一组数字,而是可随时被第三方审计复现的工程事实。
9. 资源占用、性能与产品落地
9.1 FPGA 资源占用实测
| 资源类型 | 使用量 | 说明 |
|---|---|---|
| LUT | 约 14,200 | 双蝶形并行架构 |
| FF | 约 6,800 | 级间流水寄存器 |
| BRAM(18Kb) | 2.5 块 | 系数存储与旋转因子 ROM |
| DSP | 约 16 | 乘法器阵列 |
| 最高时钟 | 300 MHz | 28nm 工艺综合 |
资源占用相对于中端 FPGA(如 Xilinx Artix-7 200T,约 134,000 LUT)占比约 10.6%,留有充足余量支持多实例部署与业务逻辑共存。
9.2 性能实测
| 操作 | 延迟 | 吞吐 |
|---|---|---|
| ML-KEM-768 密钥生成 | 约 12.5 微秒 | 80,000 次/秒 |
| ML-KEM-768 封装 | 约 11.2 微秒 | 89,000 次/秒 |
| ML-KEM-768 解封装 | 约 9.8 微秒 | 102,000 次/秒 |
| ML-DSA-65 签名 | 约 30 微秒 | 33,000 次/秒 |
性能数据的测量条件:板卡运行于 300MHz 时钟、启用一阶掩码与噪声注入(默认安全配置)、DDR 带宽不受限。第三方实测验证表明,在上述条件下性能数据可稳定复现,偏差小于 3%。若关闭掩码(可信环境配置),封装延迟进一步降至约 8.5 微秒,为性能敏感场景提供弹性选项。
9.3 产品落地
该 IP 核已集成于正微光电 PQC FPGA 加速卡与光甲® 融合网关,为关键信息基础设施提供微秒级后量子密码算力,支撑混合密钥交换、零信任改造与海量终端接入等场景。产品化的过程中,IP 核以标准化 AXI-Stream 接口对外提供能力,支持 PCIe 与千兆以太网两种宿主连接方式,适配服务器、网关与边缘设备等多样化载体。
9.4 与软件实现的多维对比
为客观呈现硬件加速价值,工程团队在同一平台(Xilinx Zynq UltraScale+,四核 Cortex-A53 + FPGA)上完成了软硬件对比测试:
| 指标 | 纯软件(Cortex-A53, 1.5GHz) | 硬件加速(300MHz) | 加速比 |
|---|---|---|---|
| ML-KEM-768 密钥生成 | 约 95 微秒 | 约 12.5 微秒 | 约 7.6 倍 |
| ML-KEM-768 封装 | 约 88 微秒 | 约 11.2 微秒 | 约 7.9 倍 |
| ML-KEM-768 解封装 | 约 80 微秒 | 约 9.8 微秒 | 约 8.2 倍 |
| ML-DSA-65 签名 | 约 210 微秒 | 约 30 微秒 | 约 7.0 倍 |
| CPU 占用率 | 100%(独占) | 约 5% | 释放 95% 算力 |
对比结论:硬件加速带来约 8 倍的延迟改善,还释放了 CPU 算力供业务使用,同时以恒定时间执行消除侧信道风险——这是软件实现无法同时提供的三重收益。
9.5 可扩展性与多实例部署
IP 核支持多实例(Multi-Instance)部署:单块 FPGA 上可例化多个 NTT 引擎实例,通过 AXI 互连实现负载均衡。实测数据表明:
| 实例数 | 总吞吐(封装/秒) | 资源增量 |
|---|---|---|
| 1 | 约 89,000 | 基准 |
| 2 | 约 178,000 | LUT 增加约 95% |
| 4 | 约 356,000 | LUT 增加约 190% |
吞吐近似线性扩展,验证了 IP 核架构的可扩展性,为不同规模场景提供弹性算力配置。
9.6 与国产 FPGA 平台的适配
为满足自主可控要求,IP 核已完成对国产 FPGA 平台(如紫光同创、复旦微电子等 28nm 级器件)的移植适配。适配工作的核心在于三方面:
- 原语映射:将 Xilinx 专用原语(BRAM、DSP48E)映射为国产平台等效原语,资源利用率差异控制在 5% 以内;
- 时序收敛:针对国产平台布线资源特性调整流水线级间寄存器分布,主频收敛至 250MHz 以上;
- 工具链对接:适配国产 EDA 综合工具(如紫光同创 PDS),验证流程与 KAT 回归全部通过。
国产平台适配使 IP 核能够在关键信息基础设施中实现全链条自主可控,摆脱对单一 FPGA 供应链的依赖。
9.7 工业场景的落地约束与适配
PQC 硬件加速在工业场景的落地需要满足额外的环境约束:
- 宽温工作范围:工业级器件需支持 -40°C 至 +85°C 工作温度,FPGA 时序需在极端温度下保持收敛(设计预留 15% 时序裕量);
- 电磁兼容(EMC):板卡设计满足 GB/T 17626 系列抗扰度要求,密码运算的电磁辐射经屏蔽与滤波处理,避免侧信道泄露与外部干扰;
- 冗余与热插拔:网关场景支持双卡冗余与在线热插拔,单卡故障时业务无缝切换至冗余卡;
- 远程固件升级:IP 核支持 FPGA 动态部分重配置(Partial Reconfiguration),可在线升级算法版本而无需停机。
这些工程约束的满足,使 IP 核是一个计算单元,也是可长期稳定运行于工业现场的可靠器件。
9.8 与算法库软件生态的协同
硬件 IP 核并非孤立存在,其与软件算法库的协同设计是系统性能的关键。正微光电的 PQC 算法库提供统一抽象层(Unified API),应用层调用与硬件/软件实现透明切换:
- 统一接口:OpenSSL Engine / PKCS#11 / 国密接口(GM/T 0018)三种接入方式,应用零改造;
- 自动调度:算法库检测硬件加速卡存在时自动卸载密码运算至 FPGA,无卡时回退纯软件实现;
- 密钥管理对接:硬件密钥生成直接对接 KMS 平台的 KMIP 协议,实现密钥全生命周期管理。
该协同架构使 IP 核的价值最大化:硬件提供算力,软件提供生态兼容,二者结合形成完整的产品闭环。
9.9 未来演进方向
IP 核的演进路径与后量子密码标准化进程同步:
- ML-DSA 全面硬件化:当前签名运算由采样器与 NTT 引擎协同完成,后续将增加专用的拒绝采样与多项式运算单元,将 ML-DSA-65 签名延迟从 30 微秒压缩至 15 微秒以内;
- SLH-DSA 支持:基于哈希的无状态签名(FIPS 205)无需 NTT,主要依赖哈希单元吞吐,计划通过多实例哈希核阵列实现高性能支持;
- 形式化验证升级:将 RTL 级安全性质(恒定时间、零碰撞、掩码正确性)纳入形式化验证流程,为功能安全认证提供机器证明;
- 异构集成:探索将 IP 核与国密引擎(SM2/SM3/SM4)集成于同一 FPGA 或 SoC,形成”国密 + 后量子”双栈一体的密码算力平台。
10. 参考文献与延伸阅读
10.1 参考文献
- NIST, “FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism Standard,” Aug. 2024.(https://csrc.nist.gov/pubs/fips/203/final)
- NIST, “FIPS 204: Module-Lattice-Based Digital Signature Standard,” Aug. 2024.(https://csrc.nist.gov/pubs/fips/204/final)
- J. Bos, L. Ducas, E. Kiltz, et al., “CRYSTALS-Kyber: a CCA-secure module-lattice-based KEM,” IEEE EuroS&P, 2018.(https://eprint.iacr.org/2017/634)
- P. L. Montgomery, “Modular multiplication without trial division,” Mathematics of Computation, 1985.(https://www.ams.org/journals/mcom/1985-44-170/S0025-5718-1985-0777282-X/)
- P. Barrett, “Implementing the Rivest Shamir and Adleman public key encryption algorithm on a standard digital signal processor,” CRYPTO ‘86, 1986.(https://link.springer.com/chapter/10.1007/3-540-47721-7_24)
- NIST, “The SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions,” FIPS 202, 2015.(https://csrc.nist.gov/pubs/fips/202/final)