首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >FPGA 上的 PQC 加速:一个可复现的 ML-KEM NTT 核基准

FPGA 上的 PQC 加速:一个可复现的 ML-KEM NTT 核基准

原创
作者头像
用户12439200
修改2026-09-11 20:06:57
修改2026-09-11 20:06:57
90
举报

关于 FIBEMATE:FIBEMATE 是一个开源的后量子密码(PQC)工程验证平台,覆盖算法元数据注册表、CBOM 盘点、CI 策略门禁、KAT 自测与硬件加速基准五条流水线。本文的全部数据来自其独立子项目 pqc-hw-bench(github.com/Lennonhaha/pqc-hw-bench),一个以统一方法论测量 ML-KEM / ML-DSA 在 FPGA 与 CPU 上延迟、吞吐、资源与能效的基准框架,构建脚本与原始数据全部开源。官网:fibemate.net

1. 硬件 PQC 的数据并不稀缺,可复现的基准稀缺

本系列前三篇分别讨论了迁移动因(国密 PQC 标准真空期)、混合 HTTPS 落地,以及工具链建设。本文转向更底层的问题:当 PQC 需要部署到边缘设备、IoT 网关、专用服务器时,软件实现是否够用;若不够用,硬件加速应如何评估。

云厂商的 PQC 方案目前集中在软件层:KMS、TLS 端点、API 网关。这并非能力问题,而是激励方向不同,其客户需要的是“启用混合密钥交换”这一能力开关,而非“某一器件上 NTT 核的资源占用”这类基准报告。

学术界产出了大量硬件数据,但通常以论文表格形式呈现:给出器件型号、频率、资源占用,不提供构建脚本。读者若要核对,需按论文描述自行重建工程,而重建过程存在大量自由裁量空间;一旦结果对不上,无法区分是论文本身的问题还是重建过程的问题。

因此在二者之间存在一个空档:可被一条命令复现的硬件基准。本文给出的是这一形态的样本,Artix-7 35T 上的一个 ML-KEM NTT 核,WNS +9.733 ns、235 LUT / 191 FF,以及产生这两组数字的完整命令。

需要说明的是,本文不给出 FPGA 相对 CPU 的加速倍数。原因见第 7 节。

2. NTT 的开销占比:为什么本文不引用具体百分比

讨论 NTT 硬件加速时,常见做法是先给出一个占比论断,即 NTT 是 ML-KEM 的性能瓶颈,占 decaps 全部周期的百分之多少。本文不采用这一写法,原因有二。

其一,本项目的基准记录中未包含 cycle-level 剖析数据,因此没有可供引用的自有测量结果。

其二,公开的 Kyber 剖析数据(CEUR Vol-4055)给出的 Kyber-512 中位 cycle 分布如下:

操作

中位 cycle

NTT

13,520

Inverse NTT

22,998

多项式乘法

9,014

矩阵生成

74,202

其中矩阵生成的开销超过 NTT、INTT 与多项式乘法三者之和。在这组数据下,“NTT 占六成”这一常见印象并不成立。

更需注意的是,该组数据来自单平台实测,即特定的 CPU、编译选项、参考实现版本与统计口径(中位数而非均值)。更换实现、优化等级或指令集环境(如是否启用 AVX2),该表的排序完全可能改变。因此它只能支撑定性结论,不能作为任何定量百分比的依据。

综上,本节给出两条可引用的结论:

  1. NTT 是 ML-KEM 中值得优先加速的模块之一(定性结论,成立);
  2. 其具体占比随实现、平台与测量口径而变,脱离这三者给出的百分比均不可靠

将这一数据缺口写入正文而非省略,是因为它体现了本文对基准的一贯立场:基准的可信度不取决于给出了多少数字,而取决于是否明确交代未测量的部分。

3. 器件与环境:选择 Artix-7 35T 的依据

器件

xc7a35tfgg484-2(Artix-7 35T)

工具

Vivado 2021.1(WebPACK,免费版本)

时钟约束

50 MHz(20 ns)

目标核

u_ntt_core(v5_2)

RTL 规模

hardware/rtl/ntt/ 下 21 个 Verilog 文件

选择 35T 的依据不是性能,而是可及性。该器件可由百元级开发板承载,且 Vivado WebPACK(免费许可)对 Artix-7 35T 提供完整支持,任何希望核对本文数字的读者,其成本门槛接近于零。

若改用 Virtex UltraScale+ 等高端器件,可以获得更优的绝对数字,但能够复现该结果的读者比例会大幅下降,基准的验证价值随之削弱。可复现性是一项设计决策,而非事后补充说明。

4. 综合结果

指标

WNS(Setup)

+9.733 ns,0 failing

Hold / Pulse Width

0 failing,全 MET

可运行上限

~97 MHz

NTT 核资源

235 LUT / 191 FF / 96 Slice

顶层资源(含 UART 等外围)

1754 LUT / 2422 FF

WNS 为 +9.733 ns,表明在 50 MHz 约束下仍余约 10 ns,对应运行上限约 97 MHz。该结果并非临界收敛,余量意味着同一套 RTL 迁移到性能较低的器件或增加外围逻辑时仍有调整空间。

此处需明确区分两个数字:235 LUT 为核级资源,1754 LUT 为顶层资源。后者包含 UART 调试通道、LED 及 SoC 粘合逻辑,与 NTT 算法本身无关。混淆二者是硬件基准中最常见的引用错误,第 5 节将专门讨论。

5. 口径差异:858 LUT 与 235 LUT 的由来

本项目的历史 release(v5_3)中,同一个 NTT 核标注为 858 LUT;当前报告为 235 LUT,相差 3.6 倍。这并非实现被优化缩小,而是综合报告口径不同:858 为包含中间层次、按默认层次汇总的结果;235 则是通过 report_utilization -cells u_ntt_core 精确剥离到核级后的结果。

同一设计在三个层次上对应三个均合法的数字:

引用时应依据所要回答的问题选择对应数字:

需要回答的问题

应引用的数字

NTT 核(含监控)总资源

235 LUT

其中算法部分(u_core)

131 LUT

其中监控部分(u_hw)

101 LUT

整板资源占用

1754 LUT

算法部分 131 LUT 与监控部分 101 LUT 相加为 232,加上粘合逻辑约为 235。

其中 u_hw(运行期硬件监控)单独占用 101 LUT,接近算法核的一半。这是侧信道加固的成本:在数据通路上部署监控逻辑必然付出资源代价。将加固前后的资源数字放在同一报告中比较而不加说明,同样属于口径误导。

由此建议:发布硬件资源数字时,同时给出核级与顶层两个数值,并注明剥离命令。缺少剥离命令的数字无法被他人核对,因而也不具备基准意义。

6. 可复现性验证:两条命令与 0.019 ns

可复现性可以量化。本项目执行了两次独立构建:

构建

WNS

本次复现(2026-09-06)

9.733 ns

历史 release(v5_3)

9.752 ns

差异

0.019 ns

run-to-run 差异不足 0.02 ns,表明该设计的时序结果对工具噪声不敏感,这是结果可被第三方验证的前提。若两次构建相差 2 ns,他人复现不一致时将无法判定根源是环境差异还是设计本身。

复现命令(前置条件:Vivado 2021.1,WebPACK 版本即可):

原始 CSV 与 JSON 数据均存放于仓库 results/raw/ 目录,未经二次加工。

7. 为什么 235 LUT 与 345 μs 之间不可换算

先给出 CPU 侧基线(liboqs 0.16.0,AVX2,覆盖 95 个算法,均值 μs/op):

算法

keygen

encaps

decaps

ML-KEM-512

278.91

327.55

34.81

ML-KEM-768

345.35

379.74

47.12

ML-KEM-1024

406.77

461.85

76.53

(同批次 ML-DSA-65:keypair 489.86 / sign 1048.22 / verify 158.35 μs。)

上述 LUT 数与微秒数之间不存在换算关系,原因有三:

  1. 粒度不同。235 LUT 对应一个 NTT 核,345 μs 对应完整的 ML-KEM keygen,后者还包含矩阵生成、采样、哈希(SHA-3/SHAKE)与打包等操作,NTT 仅为其中一部分。以部件对比整机,所得倍数无意义。
  2. 量纲不同。LUT 表征面积,μs 表征时间,二者之间没有通用换算公式,中间还隔着频率、流水线深度、并行度与数据通路带宽等变量。
  3. 数据流成本未计入。FPGA 上的计算核并非孤立运行,系数载入 BRAM 与结果读出的搬运开销在真实系统中常超过计算本身,仅报核级资源会系统性低估整体成本。

实现公平对比尚缺三步:(a) 在 FPGA 上完成完整 ML-KEM 实现(而非仅有 NTT 核);(b) 将数据搬运与 BRAM 带宽计入端到端延迟;(c) 统一测量口径(相同安全等级、相同测试向量、相同统计方法)。上述三步完成之前,本文不给出加速倍数。

8. 适用边界声明

为避免误读,以下明确列出本文数字不适用的范围:

  • 非完整 ML-KEM 硬件实现。 仅含 NTT 核(多项式乘法内核),FPGA 上未跑通完整算法。
  • 非板级实测。 全部为综合与实现阶段的报告数据(WNS、资源占用),未进行上板功耗、吞吐与误码测试。
  • 侧信道结果为预硅阶段。 项目中的 TVLA / ADLA 采用 RTL 行为仿真结合 Hamming Distance toggle 计数作为动态功耗代理,n=128/组,无物理功耗采集(无 ChipWhisperer 或示波器)。正变换 t 的绝对值为 0.657(阈值 4.5)、ADLA 的 A² 为 0.753(阈值 11.99);逆变换为 1.108 / 2.122,均判定 PASS。该结果属于预硅筛选,用于在早期排除输入值依赖泄露,不能替代实验室实测轨迹评估。
  • 成本模型处于框架阶段。 $/MopsW/Mops 需依赖真实芯片单价与实测功耗,两项数据均待补充,目前仅有接入点而无计算结果。
  • 未做跨平台对比。 仅覆盖 Artix-7,Zynq / Virtex 等器件未测,本文数字不可外推至其他系列。
  • DRC 结论引自仓库自带验证清单,非第三方独立复跑。

9. 结语

硬件基准中最主要的偏差来源,往往不是测量误差,而是选择性披露,即只公开对结论有利的那部分数字。858 还是 235,取决于所回答的问题;FPGA 是否更快,取决于比较对象是核还是整机。绝对数值偏小并不削弱结论的效力,缺失口径说明才会使结论失去可验证性。

可被推翻,是基准成立的前提。


参考实践

  • 仓库:github.com/Lennonhaha/pqc-hw-bench(构建脚本、原始 CSV/JSON 全部在内)
  • 主项目:github.com/Lennonhaha/fibemate · 官网 fibemate.net
  • CPU 基线:liboqs 0.16.0(AVX2),95 个算法,原始数据见 results/raw/summary-2026-09-07.csv
  • 剖析数据来源:CEUR Vol-4055(Kyber cycle 分布,单平台实测,仅作定性参考)
  • ADLA 方法:arXiv:2603.18647;本项目方法论见 docs/tvla-methodology.md

词汇注释

  • NTT:数论变换,格密码中多项式乘法的核心运算,ML-KEM 的性能热点之一。
  • WNS(Worst Negative Slack):最差时序余量,正值表示时序满足约束,数值越大余量越足。
  • LUT / FF / Slice:FPGA 的基本资源单位,分别为查找表、触发器、切片。
  • TVLA / ADLA:两种侧信道泄露统计检验方法,本项目分别采用 Welch t-test(阈值 4.5)与两样本 Anderson-Darling 检验(阈值 11.99)。
  • 预硅(pre-silicon):比特流上板之前的阶段,此阶段仅能依靠仿真与静态报告进行评估。

FIBEMATE · 开源后量子密码(PQC)工程验证平台 · fibemate.net · github.com/Lennonhaha/fibemate


本文数据均来自开源仓库 pqc-hw-bench,构建脚本与原始数据可自由获取与核对。转载请注明出处。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 1. 硬件 PQC 的数据并不稀缺,可复现的基准稀缺
  • 2. NTT 的开销占比:为什么本文不引用具体百分比
  • 3. 器件与环境:选择 Artix-7 35T 的依据
  • 4. 综合结果
  • 5. 口径差异:858 LUT 与 235 LUT 的由来
  • 6. 可复现性验证:两条命令与 0.019 ns
  • 7. 为什么 235 LUT 与 345 μs 之间不可换算
  • 8. 适用边界声明
  • 9. 结语
    • 参考实践
    • 词汇注释
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档