· 正微光电· technology· 约 56 分钟精读
RISC-V 后量子密码:低功耗 MCU 的落地路径
当后量子密码遇上 RISC-V,低功耗 MCU 端迎来无需更换硬件的迁移窗口。本文从指令集生态、ML-KEM 资源画像、内存优化、向量化 NTT 到常数时间实现,系统拆解 RISC-V 后量子密码的工程落地路径。
1. 引言:低功耗终端为何要看 RISC-V 后量子密码
后量子密码(Post-Quantum Cryptography,PQC)的迁移已从标准化进入工程化落地阶段,而物联网低功耗终端恰恰是这场迁移中最难啃的硬骨头。芯片级算力局促、片内存储稀缺、供电预算以毫瓦计,这三重约束长期被视为后量子密码嵌入式改造的”不可能三角”。RISC-V 作为一套开放、模块化的精简指令集架构,其标量加密扩展、向量扩展与位操作扩展为低功耗 MCU 上的后量子密码实现提供了灵活的加速接口——这正是”RISC-V 后量子密码”成为一个值得深入研究的工程命题的根本原因。与 ARM 生态由厂商封闭分发且指令集版本纷杂不同,RISC-V 的 ISA 扩展由公开规范定义、任何团队都能依据规范实现优化,这让”面向指令集手写优化代码”这一密码工程中的传统手段,得以在开源与可控的前提下重新焕发活力。
本文要解的题非常具体:在一片典型 RISC-V 低功耗 MCU(例如基于 RV32IMAC 或 RV64GC 核心、片内仅配 64 KB SRAM 与 256 KB Flash 的器件)上,把 NIST 标准化的 ML-KEM 密钥封装机制真正跑起来,并达到可用于产品化的性能与内存水平。我们将从指令集生态的分层出发,建立 ML-KEM 的资源消耗画像,然后逐项展开内存优化、计算优化(重点是向量化 NTT)与常数时间防护三类工程手段,最后给出一套可复现、可验证的落地方法论。文章所有方法均为公开标准算法与通用工程方法的讨论,不涉及任何特定产品的内部设计,任何具备同等硬件条件的工程师都可照此复现。
1.1 威胁时钟与终端约束:为什么是现在、为什么是 MCU
后量子迁移的紧迫性由两条时间线共同决定:一是 Shor 算法对 RSA 与椭圆曲线密码的数学威胁,二是”先存后解”(Harvest Now, Decrypt Later)攻击模式下的现实风险。攻击者今天就能截获并保存加密会话,等量子算力成熟后批量解密。NIST 在 2024 年 8 月正式发布 FIPS 203、FIPS 204 与 FIPS 205 三部后量子密码标准,其中 FIPS 203 规定 ML-KEM(源自 Kyber)密钥封装机制,FIPS 204 规定 ML-DSA(源自 Dilithium)数字签名,FIPS 205 规定 SLH-DSA(源自 SPHINCS+)。随后 NIST 在内部报告 IR 8547《向后量子密码标准迁移》中给出了各类算法的弃用时间建议:对大多数公钥算法,NIST 展望在 2030 年之前停用 112 位以下安全强度的方案,并在 2030—2035 年窗口内逐步淘汰 128 位以下的方案。对保密周期长达十五年以上的场域,这条时间线的含义是:现在部署的每一次加密握手,都必须假设它将被量子解密。
终端侧的第二重约束来自设备本体。与云端服务器或网关不同,低功耗 MCU 有三重先天限制:算力上限往往只有几十至三百 MHz,且多为单核、无浮点单元甚至无乘法扩展(仅有 Zmmul 或依赖软件乘法);片内 SRAM 常见配置为 32—128 KB,其中相当一部分还要划给 RTOS 任务栈、通信缓冲区与外设 DMA;Flash 从 128 KB 到 1 MB 不等,既要容纳应用固件又要塞入密码原语。ML-KEM-768 的密钥对、密文虽只有 1—2 KB 量级,但参考实现为了可读性会在栈上铺开大量中间量,峰值栈占用可达数十 KB——这在一颗只有 64 KB SRAM 的 MCU 上几乎是灾难性的。RISC-V 的开放指令集生态恰恰为缓解后量子密码嵌入式困境提供了一条现实路径:通过精确的指令集映射与内存复用,把算法”挤”进有限资源,这正是本文要系统解决的问题。
1.2 RISC-V:一套为密码工程打开加速入口的开放 ISA
RISC-V 的与众不同,在于它以一套极简的基数指令集(RV32I / RV64I)为起点,配合由规范定义、可自由组合的扩展集。对后量子密码工程而言,最有价值的扩展集中在三个方向:标量加密扩展(Zk 系列)、向量扩展(V,即 RVV)与位操作扩展(B 系列,含 Zba、Zbb、Zbs 等)。这些扩展都以公开规范发布,任何内核实现者、任何软件开发者都能查阅并加以利用,不存在必须向单一厂商获取授权的封闭障碍。这是 RISC-V 后量子密码工程与 ARM 生态在方法论上的一个关键分岔:在 ARM 上,NEON 向量指令的微架构细节往往只能通过厂商白皮书或实测反向推断;而在 RISC-V 上,向量寄存器宽度、向量长度、元素位宽等关键参数都能从规范与可读的 CSR 中直接获知,编写高度贴近硬件的优化代码变得可解释、可审计、可移植。
上图给出了 RISC-V 中与后量子密码相关的扩展家族在算法各环节的分工。值得强调的是,扩展的可用性必须逐核评估:同为 RISC-V 内核,有的实现了完整的 RVV v1.0 向量扩展,有的只实现了 V v0.7 早期草案甚至完全没有向量单元;有的带硬件乘法与位操作,有的只能软件模拟。这种碎片化既是挑战也是机遇——它意味着”一步到位”的通用优化不存在,但程序员可以通过编译期与运行期的能力探测,为不同能力的内核各生成一套最优实现。这个分层评估的思维,贯穿本文全部优化章节。
2. ML-KEM 的计算结构与低功耗平台的资源画像
在进入优化之前,必须先精确刻画”我们要优化什么、资源瓶颈在哪”。ML-KEM 是密钥封装机制(KEM),由密钥生成、封装、解封装三个过程组成,其安全性建立在 Module-LWE(模格带错误学习)困难问题上。理解它的运算结构,是后续内存与计算优化的前提。
2.1 从 K-PKE 到 CCA 变换:ML-KEM 的代数骨架
ML-KEM 的核心是一个满足单向性但非 CCA 安全的基础公钥加密方案 K-PKE,再通过 Fujisaki–Okamoto 变换与额外哈希包装,获得对选择密文攻击(CCA)安全的最终 KEM。这个分层结构直接决定了它的运算构成。K-PKE 在多项式环 上工作,其中模数 ,多项式阶数 。密钥对由私钥向量 (分量从中心二项分布采样)与公钥 构成,其中 是 的矩阵( 对应 ML-KEM-512/768/1024),每个元素是 上的一个多项式。
ML-KEM 各档的参数与通信开销为:ML-KEM-512()公钥 800 字节、密文 768 字节;ML-KEM-768()公钥 1184 字节、密文 1088 字节;ML-KEM-1024()公钥 1568 字节、密文 1568 字节。密钥对在 ML-KEM-768 下为私钥 2400 字节、公钥 1184 字节。这些尺寸本身在 MCU 上并不算大,真正的压力来自运算过程在栈上展开的中间量,尤其是矩阵乘法 与多个多项式变换的叠加。
2.2 运算热点:NTT、采样与哈希三分天下
对 ML-KEM 在低功耗处理器上的热点剖析,结论与在桌面端一致但比重更极端:三项主要计算——数论变换(NTT)、噪声采样、哈希与编码——占据了几乎全部周期。NTT 族(正向 NTT、逐点乘、逆 NTT)是多项式乘法的引擎,在一次 ML-KEM-768 密钥生成中,仅 与 的乘积就需要执行 次 NTT 基变换;封装与解封装过程中 NTT 相关运算通常占全部周期的三分之二以上。采样环节负责从中心二项分布产生 的系数,虽然单系数开销小,但在签名类算法中因拒绝采样占比会被放大(本文聚焦 KEM,采样压力相对居中)。哈希与压缩编码则由 SHAKE256 扩展输出与系数打包构成,在密钥派生与密文编解码中高频出现。
因此,ML-KEM 的优化排序清晰而固定:先把 NTT 及多项式乘法压到硬件极限,再清理采样,最后优化打包编码。RISC-V 的向量扩展对 NTT 的并行映射尤其有利,因为 是 ,支持嵌套的、长度为 2 的幂的 NTT 分解,256 个系数被拆成 8 层、每层 128 个蝶形运算,具有天然的层内并行性——每个蝶形与其相距 128 个位置的对偶蝶形之间无数据依赖,可以直接映射到向量寄存器的一组并行通道。这一点在本文第 5 章展开。
2.3 内存画像:栈上中间量才是真瓶颈
与”密钥只有 2 KB”的直观印象相反,ML-KEM 真正的内存压力来自参考实现为了可读性而铺开的临时量与冗余拷贝。以 ML-KEM-768 为例,一次密钥生成若直接移植 Kyber 参考实现,会在栈上同时驻留: 矩阵的 NTT 域表示( 个多项式)、 与 的采样缓冲、 的 NTT 结果、最终公钥的打包缓冲,以及哈希上下文的临时区,峰值栈占用可达 20 KB 以上。对于只有 64 KB SRAM 的 MCU,这意味着算法在跑之前就可能把整个任务栈挤爆。
理解这个”内存悖论”需要分清楚三种不同性质的存储:一是密钥与密文本体的长期存储,这部分体量很小,ML-KEM-768 全部对外通信对象(公钥 1184 字节、密文 1088 字节、私钥 2400 字节)合计不过 4.6 KB,即便三档中体积最大的 ML-KEM-1024 也完全在 MCU 可承受范围内;二是运算过程瞬时的栈上中间量,这才是压力的真正来源;三是旋转因子表、S 盒、熵池缓冲这类常驻的常量与状态区,它们需要从本就紧张的 Flash 与 SRAM 预算中挤出一席之地。低功耗平台优化的全部注意力,应当精确地投向第二类——瞬时栈上中间量,因为正是它决定了”能不能在给定的 SRAM 里跑通”,而第一类与第三类通常可以通过合理的布局与预计算规避。如此分层之后,内存问题的边界就清晰了:我们要做的是压缩”瞬时峰值”,而非”长期驻留”。
上图为面向 64 KB SRAM 级 MCU 的通用测试条件下,ML-KEM-768 参考实现与内存优化实现的内存占用对比。条形图清楚地显示:直接移植的参考实现峰值 RAM 在 14—20 KB 量级,而经过缓冲复用与原地运算优化后,各过程峰值 RAM 可压至 4—6 KB,Flash 代码体积也从约 21 KB 收敛到约 8 KB。需要申明,这是面向通用低功耗 MCU 的方法学演示数据,标注了通用编译与统计口径,不绑定任何特定硬件或产品。图背后是三条可独立复用的通用工程手段——原地 NTT、A 矩阵按需生成、流式采样与就地编码——这也是下一章的主题。
3. 内存优化:把 ML-KEM 挤进 KB 级的 SRAM
内存优化是低功耗 MCU 后量子密码落地的第一道关卡,它不依赖任何特定指令集,是纯算法层面的通用工程方法,因此放在最前面。目标很单一:让峰值栈占用从”数十 KB”降到”个位数 KB”,同时不显著牺牲速度。
3.1 原地 NTT 与原位逆变换
第一个手段是让 NTT 与逆 NTT 在不新增缓冲的情况下原地完成。标准库的 NTT 实现往往对输入与输出各分配数组,并在旋转因子预计算上另开空间。原地做法把每一层的蝶形结果直接写回输入缓冲区,配合预计算的旋转因子表(可直接存在 Flash 常量区,规避 SRAM),使得一次 NTT 在整个过程中仅占用一个长度为 256 的 16 位系数数组(512 字节)。逆 NTT 同理,通过系数重排与约减序列,让结果回到与正向变换相同的原位布局。这一步单独就能把密钥路径中的多项式内存开销削减近一半。
3.2 A 矩阵按需生成与逐块装载
ML-KEM 的 矩阵并非需要整体常驻内存。A 的每一列都由一个 12 位的种子通过扩展输出函数(XOF,基于 SHAKE256)按需确定性生成,因而可以”按列、按多项式块”流式产生,用完即抛。参考实现常把整个 一次性铺开以方便向量化;但在内存受限平台上,逐块生成并与对应 分量即时做 NTT 乘加,可以避免一个体量可观的矩阵缓存在栈上常驻。具体做法是:在外层循环中对每一列调用 XOF 生成该列多项式,立即送入 NTT 域,与 的对应分量完成逐点乘,累加进结果缓冲后即释放该列。这个”生成即用”的模式,把原本可能需要十几 KB 的矩阵驻留,压缩到一次只容纳一个多项式的数百字节。
3.3 流式采样与就地编码
采样与编码同样可以做成流式。中心二项分布采样器从均匀随机字节中按位提取系数,可以一边从熵池消费、一边直接写入目标缓冲,避免为采样结果另开整段中间存储。同理,公钥与密文的打包编码可以就地完成:把已经算好的系数数组原地改写为压缩后的字节流,而不是新开一块打包缓冲。这三步叠加,配合统一的”单缓冲复用”策略——把密钥生成、封装、解封装各自内部相互独立的临时区,合并映射到同一块可复用的内存池——最终把各过程的峰值 RAM 稳定地压在个位数 KB,这就是第 2.3 节条形图中”内存优化实现”一侧数据的由来。
3.4 三种常用内存策略的取舍细则
在动手写代码之前,有几种常见的内存策略需要工程师逐项权衡,它们并不是非此即彼,而要根据目标内核与使用场景组合使用。
其一是”栈上固定预算”策略。为每一个算法过程(密钥生成、封装、解封装)分别划出固定大小的栈区域,区域内部依托第 3.1 至 3.3 节的复用技巧反复使用同一块缓冲区;这个过程之间互不并发,缓冲区还可以进一步合并。这种策略的优点是峰值确定、无堆碎片、满足 RTOS 任务栈静态分配的要求,代价是并行度受限——若同一任务需要频繁交替执行封装与解封装,共用的缓冲区必须等待前者完成才能复用。其二是”堆上按需分配”策略,即通过 malloc 在需要时申请、用完即释放。在嵌入式上这不是首选:堆分配的时间不确定、碎片难以预测,且频繁分配释放会污染对时序敏感的密码路径,因此除非有特定的内存复用场景(例如需要同时驻留多个密钥对以支持会话并发),否则不建议让堆参与密码热路径。其三是”Flash 常量预计算”策略,把能够在编译期确定的内容——旋转因子表、部分预计算的基元、乃至可复用的 NTT 中间结果——全部放入只读常量区,从 SRAM 侧彻底卸载。这一策略与前三者正交,几乎总是有益,唯一的代价是 Flash 空间,而低功耗 MCU 的 Flash 通常比 SRAM 宽裕。
一个在实践中被反复验证的经验是:把”单缓冲复用”与”Flash 常量预计算”作为默认基线,把”堆上分配”降级为只在确有并发需求时才启用的例外。这样得到的实现,峰值栈占用稳定、行为可预测、便于审计,也更容易通过本文第 6 章所述的各类验证。
内存优化的收益不仅在于”跑得下”,还直接关系到能否在不升级芯片的前提下完成后量子迁移:64 KB SRAM 的 MCU 若能跑通 ML-KEM-768,现有硬件就无需更换,用户只需通过固件 OTA 把密码原语升级为量子安全版本。这与正微光电在 Cortex-A7 平台上”以指令级重写而非更换硬件实现 6.7–8.9 倍加速”的思路一脉相承——后量子迁移的正确成本观是尽量在存量硅片上挤出能力。
4. 计算优化:NTT 的标量与向量实现
解决了内存,接下来是算力。ML-KEM 的性能上限由 NTT 决定,而 RISC-V 为 NTT 提供的优化空间横跨标量层与向量层两层。这一整章的结论都建立在公开的 RISC-V ISA 规范之上,任何团队都可以在自己的内核上用同样方法复现。
4.1 标量层:无向量单元内核的基础优化
绝大多数低功耗 RISC-V MCU 并不带向量单元,它们以 RV32IMAC 或 RV64GC 这样的标量核心运行。对这些内核,NTT 优化集中在几类通用手段上。首先是算术基础:ML-KEM 的模数 具有特殊形式,其约减可以避开真正的高开销模运算,利用 Montgomery 约减或 Barrett 约减在几条指令内完成模 3329 的乘法,从而把蝶形里的”乘—加—约减”压到最少指令数。其次是双发射与指令调度:现代 RISC-V 标量核通常具备两路或更多发射槽,编译器若能识别出蝶形链内没有数据依赖的独立运算(例如 a+b 与 a−b 两个加法在乘完旋转因子后互不依赖),就能填充发射槽位,把乘加流水线填满。其三是位操作扩展的利用:ML-KEM 的系数打包与解包大量涉及 12 位小整数的移位与掩码拼接,具有 Zba/Zbb/Zbs 位操作扩展的内核可以用单周期指令完成这些操作,显著缩短编码环节。甚至在纯 RV32I 核心上,仅通过把 16 位系数紧凑布局并尽量减少内存往返,也能获得可观的提升。
4.1.1 模 3329 约减的细节与四分之一点数
把约减做到极致,需要深入 的算术细节。3329 是 12 位素数,这使它既能容纳 12 位系数、又能让系数编码紧凑,同时也让无符号 32 位乘法的部分结果可以直接复用。一个常用的技巧是”分层约减”:利用 ,把结果的高 12 位与低 12 位折叠相加,再对折叠和的进位做一次条件修正,就能在少量移位与加法指令内完成约减,信息地避免了对 32 位除法的依赖。更关键的是旋转因子的选取。Kyber 采用 作为本原单位根,利用 的关系可以导出”四分之一点数”(quarterround)技巧:把旋转因子表的存取数量减半,先用 做平方校正、再按 的方式编号,从而在蝶形层之间重用部分旋转因子。这些属于格基密码公开文献中充分讨论的通用算术技巧,任何 RISC-V 实现都能直接借用,也正是把标量 NTT 做到接近硬件极限的核心。
需要特别提示一个嵌入式编程细节:即便在 RV32 上,ML-KEM 的系数(16 位)也可以打包成”每两个字用一个 32 位字装两个系数”的紧凑布局,以减少内存往返与装载指令数。但这种布局会显著增加打包与解包的位操作复杂度,必须在”少访存”与”多位操作”之间依据目标内核的装载/ALU 吞吐比做实测权衡。位操作扩展(Zbb/Zbs)充足的内核更适合紧凑布局,而装载吞吐受限的极低端内核可能反而偏好简单的逐系数访问——这正是第 7.1 节强调的”能力盘点决定策略”的一个微观佐证。
4.2 标量→向量的跃迁:RVV 并行映射
当内核实现了 RISC-V 向量扩展(RVV),NTT 优化进入全新层次。RVV 的根本优势在于数据级并行:一条向量指令能对 个元素同时执行同一操作,其中 VLEN 是向量寄存器位宽(常见 128 位),SEW 是元素位宽。对 ML-KEM,系数是 16 位整数,若 VLEN=128、SEW=16,一条装载指令可一次读入 8 个系数,一组向量蝶形指令即可并行完成 8 个独立的蝶形。由于 NTT 每层内部的 128 个蝶形两两无数据依赖(蝶形 i 与蝶形 i+64 依赖不同输入、产生不同输出),向量寄存器天然容纳了这种层内并行。
上图对比了标量与 RVV 两种 NTT 蝶形实现:左侧标量实现逐蝶形串行执行,访存与算术交替、流水线频繁停顿;右侧 RVV 实现将 8 个系数装入一个 128 位向量寄存器,一条向量减、一条向量加法与一条向量 Montgomery 乘即可完成这一批蝶形,访存合并、数据通道复用,周期开销显著下降。向量化还需要处理两个工程细节:一是层的重组,NTT 相邻层的索引步长不同,需要配合向量打乱指令(vrgather)完成系数重排;二是如何选择 LMUL(向量寄存器组倍数),在可用向量寄存器充裕且数据量足够时提高 LMUL 可以摊薄装载开销,但需权衡寄存器压力。这些都属于可复现的公开工程技巧。
4.3 旋转因子预计算与更广的架构对照
无论标量还是向量,旋转因子(twiddle factors)都应预计算并存入 Flash 常量表,避免运行时反复求模幂。对 、 的 ML-KEM,完整的旋转因子表不过数个 16 位数组,放在常量只读区完全可行,运行时只需按层索引查表。值得一提的还有编译期能力分支:RISC-V 编译工具链(如 GCC/RISC-V 与 LLVM)支持通过编译时目标与运行时 CSR 探针,为”有向量/无向量""有乘法/无乘法”的变体分别生成实现,再在启动时选择最优分支。这与 ARM 生态按具体核心型号分发预编译库的模式形成对照,赋予了 RISC-V 后量子密码实现更高的可移植性与可审计性。
4.4 采样与哈希环节的向量化与流水化
NTT 之外,采样与哈希两个环节同样值得在 RISC-V 上做专场优化,它们加起来通常占据 KEM 中两成到三成的周期。采样环节里,中心二项分布的系数提取逻辑简单、数据依赖弱,非常适合向量化:把均匀随机字节装载进向量寄存器后,用一组移位、掩码与加法指令就能同时提取一批系数,再配合向量化比较修正分布偏差。哈希环节则依托 SHAKE256(Keccak 置换的派生),Keccak-1600 状态为 200 字节的 64 位字阵列,在 RV64 内核上天然对齐;即便在 RV32 上,也可以把状态组织为 32 位字对、以固定的置换轮数展开,并把吸收与挤压阶段与采样、编码流水衔接——密码哈希的固定轮次特性恰好让整段执行时间稳定,这对第 5 章的常数时间要求是天然友好的。
把二者串起来看,ML-KEM 的整个热路径——NTT、采样、哈希、打包——在 RISC-V 上都能找到与自身结构天然契合的实现手段。工程上的落地顺序则是:先用标量手段把每段做到”干净正确”,再逐段向量化并用基准回归确认收益,避免一次引入过多改变导致正确性与性能问题纠缠难解。
5. 常数时间:低功耗 MCU 上不可省的一环
性能与内存之外,后量子密码实现在低功耗 MCU 上还有一个经常被低估却决定安全成败的问题——计时侧信道。常数时间(constant-time)编程是密码工程的金科玉律,在 RISC-V 上同样适用,且有嵌入式平台特有的陷阱。
5.1 数据依赖分支与查表的危险
ML-KEM 参考代码里最常见的侧信道隐患有两类:一是以秘密数据为条件的分支,二是以秘密数据为索引的查找表。前者例如”若某系数小于阈值则加 q”这类约减语句,若分支条件来自密钥或密文,攻击者就能从执行时间推测出秘密位;后者例如用秘密系数索引一个预计算结果表,虽无分支,但查表访问不同的内存地址会触发不同的缓存行为,同样泄露信息。在低功耗 MCU 上,由于没有复杂的分支预测器与多级缓存来”掩盖”差异,这类时序差异往往比桌面端更可观测、更易被利用。更进一步,低功耗平台常配备 DMA 与中断驱动的外设,若密码运算在中断上下文或与 DMA 搬运并发执行,时序抖动还可能顺带泄露任务调度信息,因此在设计上要让密码热路径尽可能处于确定的执行上下文,避免不可控的抢占插入关键运算。
5.2 常数时间的基本写法与 RISC-V 特化
常数时间实现的核心原则是:控制流的走向不得依赖秘密数据。对约减与合并这样的操作,用”掩码算术”替代分支——常用的技巧是计算出 与 并依据符号位取其一,或用布尔掩码选择结果;对查表,改用”无分支线性扫描”或用位掩码完成选择。在 RISC-V 上,位操作扩展(Zbb 等)提供的单周期移位、计数与字节序指令,能让这些掩码算术写得更紧凑高效。此外,还有一个 RISC-V 特有的关注点:某些内核的向量指令存在数据独立执行延迟(DIE)的保证问题,面向侧信道对抗时,应优先选用那些在规范层面承诺固定延迟的指令序列,并避免依赖可能被乱序执行的复杂指令。
常数时间并非降级选择。结合本文第 3 章的流式采样,可以在常数时间内完成采样;结合第 4 章的向量化 NTT,一组固定周期的向量指令天然满足”数据独立执行时间”要求。把内存优化、计算优化与常数时间三者统一到”固定指令序列 + 掩码算术 + 单缓冲流式”这三条铁律之下,就能在低功耗 MCU 上同时获得紧凑、快速与抗侧信道的实现——这是后量子密码工程化区别于纯学术原型的分水岭。
5.3 从实现到可验证:为什么工程实践要”实现 + 审计 + 实测”三合一
抽象的正确性并不能保证实现的安全性。正微光电在多年的密码工程实践中沉淀出的方法论,是”理论归约 + 实现审计 + 实测验证”三位一体:理论层核对算法与归约证明,实现层对照常数时间编码规范逐行审计,验证层用公开测试向量与独立的第三方实测交叉确认。这一方法论正是本站《格密码数学基础:ML-KEM 的 NTT 加速引擎解析》一文所强调的实现安全观的工程落地。对 RISC-V 上的后量子密码而言,这一步尤为关键,因为内核碎片化意味着同一份算法可能运行在截然不同的微架构上,单纯的”理论上常数时间”必须结合具体内核的微架构行为(缓存、分支、向量执行的确定性)逐项确认。
6. 验证与可复现:测试向量、ACVP 与差分测试
把优化后的实现推向产品,必经验证这一关。后量子密码的验证方法学已有成熟而统一的框架,且全部公开可复现,恰好契合 RISC-V 生态的开放精神。
6.1 已知答案测试(KAT)是正确性的第一道锁
ML-KEM 与 ML-DSA 的参考实现都随标准发布了一组已知答案测试向量(KAT,Known Answer Test):给定确定的种子输入,必须产生确定的、标准预先算好的输出序列。任何通过优化改变了内部运算顺序的实现,都应以这些向量为基准逐字节比对。KAT 覆盖密钥生成、封装、解封装以及错误产生的中间值,是判断”优化没有改坏正确性”最直接的证据。正微光电的 PQC FPGA IP 核即以 193 组 KAT 测试向量全数通过的记录作为正确性背书,这一”用公开测试向量逐组核对”的方法同样适用于 RISC-V 软件实现——它不依赖任何私有数据,任何团队都能复现。
6.2 ACVP:面向自动化的符合性测试
在 KAT 之外,NIST 的自动化密码学验证规程(ACVP,Automated Cryptographic Validation Protocol)为密码模块的符合性测试提供了标准化的服务端—客户端流程。模块通过 ACVP 客户端与 NIST 服务器对话,逐项提交被测算法的中间结果,服务端比对并颁发符合性认可。ACVP 的价值在于把验证从”一次性 KAT”升级为”可持续、可追踪、可审计”的自动化回归流程,契合后量子算法部署后需要随标准修订持续再验证的需求。配合 FIPS 140-3 的模块化设计要求,这一套验证体系构成了从开发到合规的完整链路。
6.3 差分测试:优化实现与参考实现的交叉对拍
对优化实现,另一道常见的防线是差分测试(differential testing):在随机测试向量集合下,把优化实现与未优化的参考实现逐过程对比输出。由于 ML-KEM 的密钥派生含随机性,差分测试通常固定伪随机种子、或以”封装—解封装闭环必须还原出共享密钥”这一不变量校验正确性。相比 KAT,差分测试覆盖面更大、更贴近实际输入分布,能捕获那些 KAT 样本恰好未覆盖的边界情况,例如特定系数分布下的约减进位。把 KAT、ACVP 与差分测试三者叠加,构成”标准向量 + 自动化规程 + 随机交叉”的完整验证矩阵,是 RISC-V 后量子密码实现可被第三方信任的基础。还要注意差分测试的输入构造:随机种子要覆盖极端值、全零、全最大以及接近模数边界的系数,力求让边界逻辑真正被走到。
6.4 工具链支持:常数时间检测与自动向量化审计
在验证正确性与性能之外,现代工具链还为常数时间这一安全属性提供了辅助检测手段,这对低功耗 MCU 格外有用。一类思路是基于编译器的毒化分析(taint analysis)与插件,例如在符号指令集上追踪”秘密数据流入控制流或地址”的路径,标记出潜在的分支泄露与查表泄露;这类静态检测能及时发现人工审计容易遗漏的隐性分支。另一类思路是运行时动态测试——在目标硬件上,对同一份秘密输入以固定次数交替扰动无关数据,观察执行周期是否恒定;若周期出现与秘密相关的变化,则说明仍存在常数时间缺陷。把这套”静态毒化分析 + 运行时周期一致性测试”叠加,能显著提高低功耗平台上常数时间实现的信心。
还需提示一个与 RISC-V 向量化相关的审计细节:自动向量化编译器在生成 RVV 代码时,有时会把原本常数时间的标量逻辑改写为带向量掩码或可变长度的循环,若编译器对向量长度的处理依赖运行时数据,可能引入意外的时序变化。因此,对进入产品化的向量化后量子密码实现,务必在”向量化开关开/关”两种情况下都跑一遍周期一致性测试,确认向量路径同样满足常数时间要求。这一步骤成本极低、收益直接,却常被求快的团队省略。
6.5 一套可落地的验证清单
把本章技术汇聚成可直接执行的行动清单,大致是如下顺序。其一,用标准 KAT 逐过程核对实现正确性,任何优化都必须以 KAT 全过为前置门槛。其二,对关键路径做差分测试,用随机输入覆盖 KAT 未触及的边界。其三,需要合规背书时,走 ACVP 服务端流程取得可追踪的符合性结果。其四,运行静态毒化分析与运行时周期一致性测试,确认常数时间属性。其五,在目标 RISC-V 内核上做实测基准,记录周期数与栈峰值,并连同编译器版本、内核配置、测试脚本一并存档,保证数据可复现、可交叉验证。完成这五步,一个 RISC-V 后量子密码实现才具备交付给产品的资格。
值得强调,这套清单本身完全公开、不依赖任何私有材料,是密码工程界的通用共识。正微光电的 PQC FPGA IP 核以 193 组 KAT 全数通过作为正确性证的实践,正是”以公开测试向量逐组核对”这一通用原则的具体示例,同一原则在软件实现上同样成立。
7. 落地路径:从原型到产品的工程决策
前面几章解决了”怎么优化、怎么验证”,最后一章回答”怎么落地”。RISC-V 后量子密码从一段能跑的代码到一款可交付的嵌入式安全组件,中间还隔着若干工程决策。
7.1 内核能力评估是选型的第一步
由于 RISC-V 碎片化,第一步永远是精确盘点目标内核的能力清单:基础整数实现(RV32 还是 RV64)、是否具备硬件乘法(M 扩展)、位操作(B/Zbb)、向量(V/RVV)及其版本、以及是否有足够 Flash 安放旋转因子表与代码密度优化空间。这份清单直接决定实现策略:无向量内核走第 4.1 节的标量优化,有向量的内核走 4.2 节的向量化路径;无硬件乘法的极端低端内核则需评估软件乘法与约减的开销是否仍可接受。据此可以把实现编译为多个能力档位,在运行时按 CSR 探测选择最优档。
能力盘点还应包含对”深度”的考察,而不只是”有没有”。同一款内核的向量能力可能以不同实现粒度呈现:有的实现了完整 RVV v1.0 并承诺向量指令的固定延迟,有的仅实现部分子集或在向量单元与主流水线间共享资源导致吞吐受限。这些差异无法仅凭指令集字符串判断,需要在目标芯片上做一组微基准(装载带宽、向量乘加吞吐、分支代价)来实证。把指令集静态盘点与微基准动态实测结合,得到的”能力画像”才是选型与优化的可靠输入——这也是 RISC-V 生态”软硬件协同”精神的落地方式之一。
7.2 与 RTOS 调度、密钥生命周期与既有协议协同
落地不只是算法本身。低功耗 MCU 的后量子密码常运行在 RTOS 任务栈上,需要与任务的栈预算、中断延迟协同设计;ML-KEM 产生的高质量共享密钥还要与 DRBG、熵源对接(NIST SP 800-90B 描述的熵评估与抽取框架在此适用),并纳入密钥生命周期管理——密钥对是否定期轮换、私钥如何安全存储、是否与既有国密体系(SM2/SM3/SM4)形成混合模式。企业若希望把自身业务平滑迁移到后量子,可参照本站《后量子密码(PQC)迁移工程:时间线、算法选型与分阶段落地方案》给出的资产盘点—试点—推广—纯后量子三阶段方法,把 RISC-V 终端升级嵌入整体迁移节奏,而非孤立替换。
从协议层面看,低功耗终端的落地通常不是”裸调 KEM”,而是要嵌入到 TLS 握手、MQTT 安全通道或专有认证协议中。这就带来了一个常被忽视的现实问题:终端既要换算法,又要保持协议兼容,迁移期内往往必须同时支持经典与后量子两套密钥交换,即混合模式。对 MCU 而言,混合模式意味着内存与算力预算要按两倍计,但这也正是把本文的内存与计算优化做到极致之后才有余量承接的需求——优化不只是”跑得更快”,更是”为过渡期留出空间”。同时,密钥生命周期管理要求终端具备安全存储与可信更新能力:私钥不得以明文滞留于栈与堆上,固件升级须带签名校验,随机数须来自经过评估的熵源。这些工程纪律与算法优化同等重要,共同决定着一个 MCU 后量子方案能否真正上线服役。
7.3 能力盘点与开放共建
把前述所有方法收敛起来,一个清晰的结论是:RISC-V 后量子密码并非遥不可及的技术,而是一套由”内存复用 + 指令集映射 + 常数时间 + 公开验证”四个可复现环节构成的成熟工程实践。它与 ARM 生态在方法论上同源,但开放规范带来的可审计性与可移植性更强。对正在评估低功耗终端后量子化的团队,本文给出的路径足够具体:先把 ML-KEM 挤进 KB 级 SRAM,再用标量或向量优化拉升 NTT,以常数时间守住侧信道底线,用 KAT/ACVP/差分测试完成验证——然后即可自信地把它放进你的产品镜像。
8. 结语
RISC-V 后量子密码的落地不是选择题,而是随着 HNDL 威胁与 NIST 弃用时间线逼近的必答题。本文从 RISC-V 指令集生态的开放特性出发,系统拆解了 ML-KEM 在低功耗 MCU 上的全部工程环节:内存优化把算法压进 KB 级 SRAM,标量与向量两层计算优化拉满 NTT 性能,常数时间编程守住侧信道防线,KAT、ACVP 与差分测试给出可复现的正确性证据,最后以内核能力评估与协议协同收束为完整落地路径。这一切都以公开标准与通用方法为基础,不依赖任何特定硬件或内部设计,任何团队都可照此推进。
在方法之外,我们更希望强调一点:后量子迁移的价值主张是”在存量硅片上挤出抗量子能力”。无论是本文讨论的 RISC-V 软件优化,还是正微光电已在 Cortex-A7 平台兑现的指令级加速,背后的工程哲学完全一致——不轻言更换硬件、不辜负既有投资,用扎实的密码工程把安全水平抬升到量子时代的要求之上。
正微光电专注量子安全基础设施,可提供覆盖多种内核的后量子密码工程咨询与优化服务,并与自研的 PQC IoT 算法库、QRNG 板卡、PQC FPGA IP 核、量子安全网关与云密码机等产品协同,支撑电力、金融、政务与轨道交通等行业完成后量子迁移。欢迎有 RISC-V 后量子密码落地需求的团队与技术交流:后量子密码与 ML-KEM 的算法原理可参见产品页 后量子密码产品,熵源供给与随机数方案可参见 量子随机数发生器,需要硬件加速引擎的团队可了解 PQC FPGA IP 核。我们乐于基于公开标准与通用工程方法,与业界共同把后量子密码推向更广的终端。
9. 参考文献与延伸阅读
9.1 参考文献
- NIST. FIPS 203, Module-Lattice-Based Key-Encapsulation Mechanism Standard. 2024-08-13. https://csrc.nist.gov/pubs/fips/203/final
- NIST. FIPS 204, Module-Lattice-Based Digital Signature Standard. 2024-08-13. https://csrc.nist.gov/pubs/fips/204/final
- NIST. FIPS 205, Stateless Hash-Based Digital Signature Standard. 2024-08-13. https://csrc.nist.gov/pubs/fips/205/final
- NIST. IR 8547, Transition to Post-Quantum Cryptography Standards (initial public draft). 2024. https://csrc.nist.gov/pubs/ir/8547/ipd
- NIST. IR 8547 (PDF). 2024. https://nvlpubs.nist.gov/nistpubs/ir/2024/NIST.IR.8547.ipd.pdf
- RISC-V International. RISC-V Cryptography Extensions standardisation work (riscv-crypto). https://github.com/riscv/riscv-crypto
- RISC-V International. RISC-V Vector Extension specification (riscv-v-spec). https://github.com/riscv/riscv-v-spec
- Kannwischer E, Rijneveld J, Schwabe P, et al. pqm4: Testing and Benchmarking NIST PQC on ARM Cortex-M4. NIST PQC Standardization Conference 2. https://csrc.nist.gov/CSRC/media/Events/Second-PQC-Standardization-Conference/documents/accepted-papers/kannwischer-pqm4.pdf
- N. Müller, P. Wang, et al. Optimized Software Implementation of Keccak, Kyber, and Dilithium on RISC-V. IACR TCHES. https://tches.iacr.org/index.php/TCHES/article/download/11941/11801/13501
- MEML-KEM: A Memory-Efficient Implementation of ML-KEM for IoT Devices. Springer. 2026. https://link.springer.com/chapter/10.1007/978-981-95-8417-8_16
- Carril-Gil et al. Evaluation of Optimized PQC Standards ML-KEM and ML-DSA on a RISC-V core (RISC-V Summit Europe 2025). https://riscv-europe.org/summit/2025/media/proceedings/2025-05-14-RISC-V-Summit-Europe-P1.2.01-CARRIL-GIL-abstract.pdf
- NIST. SP 800-90B, Recommendation for the Entropy Sources Used for Random Bit Generation. https://csrc.nist.gov/pubs/sp/800/90/b/final
9.2 站内延伸阅读
- 格密码数学基础:ML-KEM 的 NTT 加速引擎解析:ML-KEM 的数学底层与 NTT 加速原理,本文在 4.2 节的向量化探讨承接于此。
- 后量子密码(PQC)迁移工程:时间线、算法选型与分阶段落地方案:把 RISC-V 终端升级纳入整体迁移节奏的方法论。
- 面向 Cortex-A7 的 PQC IoT 优化:ML-KEM/ML-DSA 向量化实践:低功耗处理器上指令级优化的姊妹篇,与本文的 RISC-V 向量化路径相互印证。