MCU固件签名从 64 字节涨到 4.5KB

strongerHuang 2026-11-10 08:20

安全启动要验一个签名,这件事过去二十年由 ECDSA 或 RSA 完成。ECDSA P-256 的签名是 64 字节,P-384 是 96 字节。换成后量子算法,ML-DSA-87 的签名是 4627 字节。

体积涨了 72 倍,按常规判断是 MCU 装不下。两家厂商在不同平台上的实测数据指向另一个结论:慢的那部分不在算法本身。

一、一颗 M33 上的六种算法

wolfSSL 在 FRDM-RW612 上做过一组对比。芯片是 Cortex-M33,130MHz,没有内部 Flash,代码从外部 NOR 闪存 XIP 执行,验证对象是 7.5KB 的应用镜像。同一套 wolfBoot,六种签名算法:

签名算法

签名字节

验签耗时

引导程序大小

ECC P-256

64

24.9 ms

27.6 KB

ECC P-384

96

193.9 ms

36.0 KB

RSA-4096

512

45.4 ms

20.3 KB

ML-DSA-44

2420

30.6 ms

24.2 KB

ML-DSA-65

3309

42.5 ms

24.9 KB

ML-DSA-87

4627

63.3 ms

25.5 KB

MCU固件签名从 64 字节涨到 4.5KB图1

图 1 同一颗 Cortex-M33 上六种算法的验签耗时,ECC P-384 最慢。数据来源:wolfSSL《wolfBoot Secure Boot for the NXP RW612》的实测表,2026 年 10 月 29 日,验证对象为 7.5KB 镜像

ML-DSA-44 只比 P-256 慢 23%,ML-DSA-87 是 P-256 的 2.5 倍;六种算法里最慢的一根柱子是 P-384,属于经典算法,是 P-256 的 7.8 倍。P-384 慢在椭圆曲线的域运算上,384 位的标量乘比 256 位重很多。

二、代价不在计算上

差的这部分来自两种算法在验签时做的事不一样。

ECDSA 验签要做两次椭圆曲线标量乘,一次算基点,一次算公钥。一次标量乘是几千次模乘,位宽越大越慢。

ML-DSA 验签做的是多项式向量乘加,模一个固定的素数,用 NTT 加速。签名里带的是挑战值的哈希、响应向量和提示位,验签方用矩阵和公钥重算出承诺,再比一次哈希。全程没有大整数运算,也没有曲线点乘。

代价转移到了别的地方:SHAKE 哈希。ML-DSA 验签里要跑多次 Keccak,软件实现慢就慢在这一块,这也是加 SHAKE 硬件加速之后收益最大的地方。

另有一组数据可以佐证。wolfSSL 把 ML-DSA-87 的 bootloader 和在 Cortex-M7 上跑的 ECDSA P-256 版本比,前者反而小了 940 字节,代码 21608 字节对 22548 字节。原因同样是运算类型:格验签不需要大整数库,椭圆曲线验签要。

三、体积落到了哪

省下的代码空间只有几百字节到几 KB,多出来的签名是每个镜像都要背的。

MCU固件签名从 64 字节涨到 4.5KB图2

图 2 单个签名的字节数,传统算法与后量子算法。数据来源:FIPS 204、FIPS 205、SP 800-208,LMS H10 取 MCUXpresso TF-M 文档的 1912 字节,ECDSA 与 RSA 取常用参数集的标准长度

ML-DSA-87 的签名 4627 字节,公钥 2592 字节,两者相加 7219 字节。放进 256KB Flash 占 2.8%,放进 1MB 占 0.7%。

比例不大,影响落在四个地方。

OTA 包每发一个镜像多带 7.2KB,走 CAN 或低带宽无线链路时,这 7.2KB 是实打实的传输时间。

TLV 缓冲区要按以后可能采用的最大签名预留,不能按当前那个算。MCUboot 这类方案把签名放在镜像头的 TLV 区,今天上 ML-DSA-44,明天换 ML-DSA-87,中间差 2207 字节。

过渡期还要算双签。Microchip 给 dsPIC33A 的官方示例里,镜像同时带 ECDSA P-384 和 ML-DSA-87 两个签名,SHA-512 摘要打头,两个都验过才安装,代价是两套公钥和两个签名一起进 Flash。

全生命周期的写入量是第四处。走 LMS 这类有状态哈希签名,每签一次消耗一个私钥叶子,签名次数在出厂前就定死;设备端只验签,不受这个限制,签名端要有原子化的索引管理。

四、验签时间不跟镜像大小走

格签名的验签是固定成本。镜像变大,多出来的只有对镜像本身做一遍 SHA-256 的那部分。

MCU固件签名从 64 字节涨到 4.5KB图3

图 3 左:镜像大 54 倍,验签只多 41%。右:同一颗芯片开 SHAKE 硬件加速前后。数据来源:wolfSSL 在 Cortex-M7 800MHz 的实测、Microchip 官方示例

Cortex-M7 在 800MHz 下验 ML-DSA-87,裸机测试程序 1004 字节,验签加启动 5.25 毫秒,折合 420 万个时钟周期;换成 54080 字节的 Zephyr 镜像,7.40 毫秒,592 万个周期。载荷大了 54 倍,周期只多 41%。

固件有几万行代码、镜像几百 KB 的产品,验签引入的开销可以忽略;反过来,只有几 KB 的小固件,固定成本占比会很高,这时候要不要预留几十毫秒的开机时间就要算一下。

五、四家的做法

硬件加 SHAKE 是最直接的一招。Microchip 给 dsPIC33A 的部分器件加了 SHA-3 和 SHAKE 引擎,官方示例给出的数据是 ML-DSA-87 验签由 46.378 毫秒降到 11.683 毫秒,编译优化 -Os,降幅 75%。工程默认开的是 -O1,那个配置下大约是 15 毫秒。加密加速器本身覆盖 AES、SHA-2、ECC、RSA 和 TRNG,SHA-3/SHAKE 引擎是另配的,专门给 ML-DSA 和 ML-KEM 用。

MCU固件签名从 64 字节涨到 4.5KB图4

图 4 Microchip 官方示例仓库的说明页:SHA-512 摘要打头,ECDSA P-384 与 ML-DSA-87 双签,ML-DSA-87 验签由 46.378 毫秒降到 11.683 毫秒。来源:GitHub 仓库 microchip-pic-avr-examples/dspic-bootloader-mdfu,dsPIC33AK256MPS306 示例 README

把 PQC 做进 SDK 是第二条路。瑞萨从 FSP 6.4.0 起,在 MCUBoot 的加密栈里加入 PQC 支持,镜像签名和运行时的镜像验证可以用 ML-DSA-44、ML-DSA-65、ML-DSA-87 三种参数集,选哪个由开发者按 Flash 和 RAM 的余量决定。这条路不改硬件,代价是全软件实现,验签时间取决于主频和编译优化。

第三条是混合签名。Microchip 的 dsPIC33A 官方示例把 ECDSA P-384 和 ML-DSA-87 绑在一起,任何一个验不过就拒绝安装。这是迁移期的稳妥做法,代价主要在验签时间:两个签名是先后各验一遍,按 M33 那组数据算,193.9 毫秒加 63.3 毫秒约 257 毫秒,等于单签 ML-DSA-87 的四倍。体积增加不多,两个签名加起来 4723 字节,比单签 ML-DSA-87 只多 96 字节。另一个代价是防降级:一旦强制了双签,就不能允许退回只用经典算法。

第四条是专用硬件加哈希签名。英飞凌在 PSOC Control C3 的 Main Line 上把 SHA-2 384/512 做成硬件加速器,再加一个 LMS 验签引擎,用在安全启动和固件更新。

LMS 的签名长度由参数集定死,和镜像多大无关。NXP 在 MCUXpresso 的 TF-M 文档里给的数是公钥 32 字节、SHA256_H10 配 Winternitz 8 的签名 1912 字节。32 字节只是 Merkle 树的根;签名里装的是 34 条 Winternitz 链,每条一个 32 字节的哈希值,加 32 字节随机值,再加 10 层认证路径,每层 32 字节,末尾是几段 4 字节的头。文档给的是总数,没列分项,预留 Flash 按 1912 算。验签全程只做哈希,正好吃满这颗芯片的 SHA-2 加速器。

MCU固件签名从 64 字节涨到 4.5KB图5

图 5 MCUXpresso SDK 的 TF-M 文档中 BL1_2 的后量子验签一节,公钥 32 字节、签名 1912 字节出自此处。来源:NXP MCUXpresso SDK 文档《BL1 Immutable bootloader》

六、为什么 CNSA 2.0 指定 LMS

NSA 的 CNSA 2.0 在固件签名这一项上点名的是 LMS 和 XMSS,两者都出自 SP 800-208。原因不在性能。

LMS 基于 Merkle 树,安全性只依赖底层哈希函数,不引入新的数学难题假设。格密码虽然在密码分析上站得住,但它的安全假设比哈希函数年轻得多,一条要服役二十年的信任根,选假设更少的那个更稳。

代价是有状态。LMS 的私钥是一组一次性密钥,每个叶子只能用一次,签两次同一个叶子,攻击者就能伪造。所以签名端必须先把索引写进持久存储再出签名,且禁止备份、克隆和快照。SP 800-208 的要求是签名在硬件密码模块里完成,纯软件实现不算合规。

设备端没有这个问题。设备只验签,公钥和树根是固定的。选型时常有人把这个限制套到整条链上,实际上它只约束签名那一端。

时间表是硬的。CNSA 2.0 要求固件签名从 2025 年起优先支持、2030 年起独占,2027 年 1 月 1 日之后的新采购必须合规,2035 年全面完成。欧盟的 CRA 是另一条线,主要义务 2027 年 12 月 11 日适用,制造商要在整个支持期内提供安全更新。

七、怎么选

固件可以更新的产品,用 ML-DSA。无状态,验签不依赖索引管理,参数集按 Flash 余量选,一般用 65,空间特别紧就 44,高保证场景用 87。

出厂后不能改的 ROM 信任根,用 LMS 或 XMSS。密钥锁在 HSM 里,私钥叶子范围提前分好,公钥的哈希烧进熔丝。

过渡期要不要双签,看客户或法规是否强制。要双签,就把“两个签名都必须通过”写进受保护的位置,不要放在配置文件里。

硬件加速要不要加,看开机时间预算。46 毫秒和 11.7 毫秒的差别,对常年通电的工业设备不算什么,对每次唤醒都要重启的电池设备就是另一回事。

这几项现在都有实测数据可以查,不用再按“后量子太重 MCU 跑不动”这个印象做判断。

数据来源:wolfSSL 对 FRDM-RW612 与 Cortex-M7 的验签实测、Microchip dsPIC33A 安全启动与 MDFU 引导程序官方示例(1.3.0)、瑞萨 RA MCU 知识库 FSP 6.4.0 PQC 说明、英飞凌 PSOC Control C3 Main Line 产品简介与新闻稿(2026 年 10 月 19 日)、FIPS 204、FIPS 205、RFC 8554 与 SP 800-208、CNSA 2.0 时间表

------------ END ------------


关于科技区角:国内科技展会垂直内容策划服务商,提供从论坛内容全案策划、会展市场化IP打造到精准专业观众一站式邀约服务,以产业内容吸引高质量B端人群,打通展会从议题设计、演讲嘉宾邀约、宣传预热、精准邀观到供需对接全链路。
声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。
MCU 字节
more
秦朔李亮“字节时间”论战升级:数据口径之争背后的互联网格局博弈
腾讯混元字节Seed研究人员领衔!北京AI智能体大会及个人Agent研讨会要来了
长鑫拒绝苹果等海外订单,优先保障国内存储芯片需求;Anthropic公开上市申请,最快11月中旬上市;周畅被曝离职?接近字节人士回应
字节跳动公益基金会驰援西藏巴青7.0级地震
算力流向争议再起:55%投入短剧?字节回应称仅10%
字节Seed评测负责人黄文灏离职,曾主导零一万物Yi系列大模型训练
阿里、腾讯和字节拟签10年长单,三星SK海力士赚翻!
Demo|离开字节剪映,获千万美元融资,他用vibe coding的方式帮你做视频
字节把微信逼急了?
横店影视城联手字节跳动,辟谣群演数据被喂给AI模型
Copyright © 2025-成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号