嵌入式设备后量子密码实战:Kyber与Dilithium在Cortex-M0+上的性能评估

张开发
2026/6/14 15:34:50 15 分钟阅读

分享文章

嵌入式设备后量子密码实战:Kyber与Dilithium在Cortex-M0+上的性能评估
1. 项目概述为什么嵌入式设备必须关注后量子密码学如果你正在设计一个需要联网运行十年甚至更久的智能电表、工业传感器或者车载终端那么你现在采用的RSA或ECC加密很可能在设备生命周期内就会变得不再安全。这不是危言耸听而是量子计算发展带来的现实威胁。Shor算法理论上能在多项式时间内破解基于大数分解和离散对数问题的现行公钥密码体系这意味着所有依赖这些数学难题的安全通信从网银交易到设备间的身份认证都将暴露在风险之下。更棘手的是“现在存储未来解密”的攻击模式。攻击者今天截获并存储的加密数据可能等到十年后量子计算机成熟时再进行破解。对于那些设计寿命动辄二三十年的航空电子、能源基础设施或国防系统而言这构成了迫在眉睫的安全挑战。因此美国国家标准与技术研究院早在2016年就启动了后量子密码学的标准化进程旨在筛选出能抵御量子攻击的新一代算法。然而对于海量的物联网和嵌入式设备而言换用新算法绝非简单的软件升级。这些设备通常基于ARM Cortex-M0这类超低功耗微控制器内存可能只有几十KB计算能力有限且常年由电池供电。将理论上安全的复杂数学算法塞进这样一个资源捉襟见肘的“小盒子”里并保证其运行效率和能耗可接受是工程实践中的巨大挑战。我们不能再仅仅在论文里比较算法的理论复杂度而必须深入到真实的硬件环境中去测量一次TLS握手究竟要花多少毫秒、消耗多少微焦耳的能量、占用多少宝贵的RAM。这正是我们这项工作的出发点通过构建贴近实际的测试平台对主流后量子算法在嵌入式设备上的性能、内存和能耗进行一场“实战化”的全面评估为工程选型提供扎实的数据支撑。2. 核心算法家族与技术选型解析后量子密码学并非单一算法而是基于不同数学难题的多个算法家族。理解它们背后的原理和特点是进行性能评估和选型的基础。2.1 四大算法家族及其核心原理目前NIST后量子密码标准化进程主要围绕以下几个家族展开基于格的密码学这是当前最受瞩目的方向Kyber和Dilithium都属于此家族。其安全性基于格上某些问题的计算困难性例如最短向量问题或容错学习问题。你可以把它想象成一个高维空间中的点阵从一堆杂乱的点中找出原始的、规整的格结构是极其困难的。这类算法的优势在于效率较高密钥和密文尺寸相对适中非常适合嵌入式场景。Kyber作为NIST选定的密钥封装机制标准其核心是Module-LWE问题而Dilithium作为数字签名标准则利用了格上短整数解问题的难度。基于编码的密码学以Classic McEliece为代表其安全性基于纠错码的解码难题。简单说就是把信息故意加入大量错误变成看似随机的码字只有拥有私钥即特定的解码算法的人才能正确还原。它的优点是久经考验安全性高但致命缺点是公钥巨大可达MB级别这使得它在内存有限的嵌入式设备上几乎无法实用因此在我们的评估中予以排除。基于哈希的密码学以SPHINCS为代表。它基于哈希函数的抗碰撞性利用Merkle树结构将大量一次性签名组合成一个可多次使用的签名方案。其最大优点是无状态且安全性仅依赖于哈希函数因此即使量子计算机也无法对其造成威胁。但代价是签名尺寸大、生成和验证速度慢这在我们的测试中得到了印证。基于超奇异椭圆曲线同源的密码学这是一个有趣的数学方向但之前的主要候选算法SIKE在2022年被发现存在潜在漏洞已从NIST进程中退出因此目前暂不成熟。注意算法选型是安全、性能和资源之间的权衡。没有“完美”的算法只有“最适合”当前场景的算法。对于嵌入式设备基于格的算法因其均衡的表现而成为首选基于哈希的算法提供了最强的长期安全保证但需承受性能代价基于编码的算法则因资源开销过大而基本出局。2.2 我们的评估对象Kyber, Dilithium, SPHINCS与Saber基于上述分析并结合NIST标准化进程及嵌入式平台的可行性我们最终确定了本次评估的核心算法组合密钥封装机制CRYSTALS-KyberNIST选定的标准基于Module-LWE问题。我们测试了其不同安全等级Kyber512对应NIST Level 1 Kyber768对应Level 3 Kyber1024对应Level 5。Saber另一款基于格的KEM决赛算法性能与Kyber相近但NIST最终因MLWE问题比Saber所基于的MLWR问题研究更充分而选择了Kyber。我们仍将其纳入作为有趣的对比参照。ECDHE当前广泛使用的椭圆曲线迪菲-赫尔曼密钥交换作为传统算法的基准。数字签名方案CRYSTALS-DilithiumNIST选定的基于格的签名标准。我们测试了Level 2、3、5。SPHINCS基于哈希的、无状态的签名方案作为NIST的备份标准。我们测试了其最快速的变体SHAKE256-128f 对应NIST Level 1。ECDSA当前广泛使用的椭圆曲线数字签名算法作为传统基准。我们的测试将涵盖上述KEM和DS的所有合理组合例如Kyber512-Dilithium2 Saber768-SPHINCS等并在真实的TLS握手场景下进行测量。TLS协议是互联网安全的基石其握手阶段正是公钥密码学发挥作用的核心环节因此这个测试场景具有极高的现实意义。3. 测试平台构建与实验设计纸上谈兵终觉浅绝知此事要躬行。要获得可信的评估数据一个能够精确测量延迟、内存和能耗的测试平台至关重要。我们的设计思路是模拟一个典型的物联网通信场景一个资源受限的客户端设备与一个服务器建立安全的TLS连接。3.1 硬件选型从高性能到极致受限为了覆盖不同的设备层级我们构建了两套测试平台1. 高性能嵌入式平台对照基准设备两台树莓派 3B。角色一台作为服务器一台作为客户端。考量树莓派3B搭载四核Cortex-A53处理器和1GB内存运行完整的Linux操作系统。它代表了智能网关、边缘服务器等相对高性能的嵌入式场景。在此平台上我们可以无障碍地运行所有候选算法并获得一个性能基线。2. 资源受限物联网平台核心测试对象设备服务器仍为树莓派3B客户端更换为树莓派 Pico W。考量Pico W的核心是双核ARM Cortex-M0处理器主频133MHz仅有264KB的SRAM。它代表了智能传感器、可穿戴设备等对成本、功耗极度敏感的终端节点。这正是后量子算法落地最困难、也最值得关注的领域。选择Cortex-M0而非M4或M7是因为前者是低端IoT设备中更普遍的选择其极简的架构甚至没有硬件除法器更能暴露算法在资源受限环境下的真实瓶颈。3.2 软件栈集成让后量子算法在TLS中运行让这些算法在嵌入式设备上跑起来本身就是一个技术活。我们选择了Mbed TLS这个专为嵌入式系统设计的开源TLS库作为基础。然而其官方版本并未集成后量子算法。我们的集成工作主要包括源码移植从Open Quantum Safe等开源项目获取Kyber、Dilithium、SPHINCS和Saber的优化C语言实现。接入Mbed TLS修改Mbed TLS的密码套件协商、握手协议和密码学操作接口将新的KEM和DS算法作为可选项集成进去。这涉及到在ssl_client.c和ssl_server.c中增加对新算法的识别和处理逻辑并在ssl_ciphersuites.c中定义新的密码套件ID。交叉编译与调试为树莓派Pico W编写CMake构建脚本将定制化的Mbed TLS库与Pico的SDK包含lwIP TCP/IP协议栈进行链接。使用Picoprobe进行硬件调试和程序烧录解决了M0平台没有内置调试器的问题。实操心得在Pico W上集成Mbed TLS和后量子算法时最大的挑战是内存管理。264KB的SRAM需要同时容纳TCP/IP栈、TLS上下文、加密算法的工作缓冲区以及应用程序本身。我们必须精细调整Mbed TLS的配置通过mbedtls/config.h禁用所有非必需功能如DTLS、某些密码套件并严格控制堆栈大小否则极易发生内存溢出导致设备硬故障。3.3 核心评估指标与测量方法我们聚焦三个对嵌入式设备至关重要的指标1. 延迟完成一次完整TLS握手所需的时间。这是影响设备响应速度和用户体验的关键。测量方法在客户端和服务器代码的关键节点握手开始、结束插入高精度时钟计数器如树莓派的clock_gettime Pico的time_us_64。循环执行多次握手取平均值并计算标准差。2. 内存使用运行TLS握手过程中堆和栈内存的峰值使用量。这直接决定了设备所需的最小RAM配置。测量方法树莓派平台使用Valgrind的Massif工具进行堆分析并结合内部统计栈指针偏移来估算栈使用量。Pico W平台由于缺乏高级工具我们通过分析链接映射文件.map获取全局和静态变量大小并在代码中手动插入检查点监控堆分配器的剩余空间和栈指针地址以此估算峰值使用量。3. 能耗设备在执行TLS握手过程中额外消耗的能量。测量方法这是最需要精细操作的环节。我们使用罗德与施瓦茨HMC8012数字万用表将其串联到设备的供电回路中。关键步骤是 a.测量基线功耗让设备处于空闲连接状态网络栈已初始化但未进行加密操作记录此时的稳态电流和电压。 b.测量工作功耗触发设备执行连续多次TLS握手万用表以高采样率记录电流和电压的瞬时值。 c.计算能量对握手期间的瞬时功率电压×电流进行积分再减去基线功耗对应的能量即可得到纯粹由加密计算所消耗的能量。公式为E Σ[(V_t * I_t) - P_base] * Δt。4. 性能评估结果深度解读测试数据本身只是数字如何解读并指导设计才是关键。以下是我们从两个测试平台获得的核心发现。4.1 树莓派3B平台性能基线确立在这个相对宽松的平台上所有算法都能顺利运行其表现差异揭示了算法家族的本质特性。延迟分析结果令人振奋又意外。如图5和图6所示注此处为文字描述原论文有图大多数后量子密码套件的握手延迟竟然低于传统的ECDHE-ECDSA方案。这主要归因于KEM模式与DH密钥交换的模式差异。ECDHE需要双方进行多轮计算和交换而KEM机制如Kyber中封装和解封装过程可能更高效。其中Kyber512与Dilithium2的组合Kyber1-Dilithium2表现最佳在客户端和服务器端的延迟都是最低的。然而SPHINCS成为了绝对的性能瓶颈。任何包含SPHINCS签名的套件其延迟都比其他组合高出一个数量级。这是因为其基于哈希树的结构导致签名验证需要大量的哈希计算。表7的数据清晰地显示SPHINCS的签名验证延迟是Dilithium的数十倍甚至上百倍。内存使用分析如图7和图8所示堆内存的使用主要与数字签名方案相关。Dilithium的内存占用最低SPHINCS最高。一个有趣的现象是当与传统ECDHE结合时Dilithium的堆占用会翻倍这暗示了算法库在混合使用时的内存管理开销。栈内存的使用图910也呈现类似规律但整体上栈的占用远小于堆。能耗分析能量消耗的趋势与延迟高度一致图1112。Kyber1-Dilithium2是最节能的组合。而使用了SPHINCS的方案其能耗也相应地高出1-2个数量级。这直观地表明在嵌入式设备上计算时间与能耗基本呈正相关减少延迟就是节省电量。4.2 树莓派Pico W平台资源受限环境的严酷考验将战场转移到仅有264KB RAM的Pico W上挑战才真正开始。延迟的急剧增长如图13所示所有算法的握手延迟相比树莓派3B都出现了数量级的增长。例如Kyber1-Dilithium2的握手时间从几十毫秒激增到数秒。这完全在意料之中因为Cortex-M0的计算能力与A53不可同日而语。但相对性能排名保持不变Kyber1-Dilithium2依然是最快的SPHINCS依然是最慢的。这表明算法本身的特性在不同架构上具有一致性。内存成为硬约束这是我们关注的重点。下表汇总了在Pico W上运行不同算法组合时TLS握手过程的近似峰值内存占用单位KB算法组合 (KEM-DS)近似峰值RAM占用是否在Pico W264KB上可行Kyber512-Dilithium2~80 KB是有充足余量Kyber768-Dilithium3~95 KB是有余量Saber768-Dilithium3~100 KB是有余量ECDHE-ECDSA~70 KB是有充足余量Kyber512-SPHINCS~180 KB是但紧张任何Level 5组合200 KB临界留给应用的空间极小部分组合如大参数SaberSPHINCS250 KB否可能溢出关键发现对于Pico W这类设备Dilithium是更可行的签名选择。虽然SPHINCS在理论上提供了不同的安全假设但其巨大的内存开销主要来自签名验证时需要加载的树节点和哈希状态使得它在极端受限的设备上使用风险极高。除非应用对内存有非常宽松的预算否则应优先考虑Dilithium。能耗的放大效应如图14所示能耗趋势与树莓派平台一致但绝对值更大。一次Kyber1-Dilithium2握手消耗的能量约为几十毫焦而SPHINCS则可能需要数百毫焦。对于依靠纽扣电池或能量采集供电的设备这个差异意味着续航时间的天壤之别。5. 工程实践指南与避坑要点基于以上数据我们可以为嵌入式物联网设备选择后量子密码方案提供具体的建议。5.1 算法组合推荐清单根据不同的安全等级和资源约束优先级从高到低排列首选平衡方案兼顾安全、性能、资源KEM:CRYSTALS-Kyber(安全等级1或3)。Kyber512已足够应对可预见的未来威胁且NIST已将其标准化生态支持会最好。DS:CRYSTALS-Dilithium(安全等级2或3)。Dilithium3提供了更高的安全强度同时在性能上仍有良好表现。理由该组合在三个测试平台上均表现最佳内存占用适中拥有活跃的社区和持续的优化。是大多数嵌入式应用的“默认选择”。高性能需求方案同上坚持使用Kyber Dilithium。在允许的情况下可以考虑使用针对特定ARM Cortex-M架构进行了汇编级优化的库如pqm4项目能进一步提升速度。极致资源受限方案内存100KBKEM:Kyber512。DS:Dilithium2。必要时甚至可以评估是否能在某些环节暂时降低安全等级需进行严格的风险评估。必须避免SPHINCS以及Classic McEliece。前者计算和内存开销大后者公钥尺寸巨大。追求理论安全多样性方案如果项目要求必须使用不同数学假设的算法作为备份或混合使用可以考虑Kyber SPHINCS。但必须清醒认识到这将付出巨大的性能和资源代价并需要为SPHINCS预留至少150KB的额外RAM预算。5.2 开发与集成中的关键陷阱内存动态分配许多后量子算法参考实现大量使用malloc/free。在缺乏MMU的微控制器上频繁的动态内存分配会导致堆碎片化最终引发内存分配失败。最佳实践是使用静态内存池或预先分配好最大所需空间。在集成到Mbed TLS时尽量使用其提供的静态内存配置选项。栈溢出风险后量子算法的函数调用链可能较深局部变量尤其是大数组会占用大量栈空间。务必在开发阶段使用工具如GCC的-fstack-usage或通过手动填充和检查栈指针的方式精确测量每个任务的栈使用峰值并为栈分配足够的空间通常为峰值使用量的1.5-2倍。侧信道攻击防护论文中提到一些早期的后量子算法实现可能对时序攻击或能量分析攻击敏感。在选择算法库时务必确认其是否为“常数时间”实现即算法的运行时间不应依赖于密钥或密文的值。Kyber和Dilithium的官方实现通常已考虑这一点。TLS库的配置像Mbed TLS这样的库功能繁多。在嵌入式设备上必须通过配置文件mbedtls/config.h大刀阔斧地裁剪功能禁用不用的密码套件、协议版本如DTLS、会话票证、扩展功能等。每一个禁用项都能节省几KB到几十KB的ROM和RAM。网络波动性在Pico W的Wi-Fi测试中我们观察到延迟的标准差高达30%。这意味着在实际部署中必须为TLS握手设置足够长的超时时间并实现稳健的重试机制不能依赖实验室有线环境的稳定延迟。5.3 面向未来的考量迁移到后量子密码学是一个长期过程。对于嵌入式设备建议采取以下策略混合模式过渡在协议层面可以同时支持传统算法如ECDHE和后量子算法如Kyber。这样既能与尚未升级的对端兼容又能为已升级的对端提供量子安全。TLS 1.3的混合密钥交换机制正在标准化中。硬件加速探索对于量产的设备如果性能仍是瓶颈可以考虑使用带有专用密码学协处理器如ARM的Cryptocell的MCU或者研究将部分算法操作如NTT用硬件逻辑实现。固件升级能力在设计设备时必须预留充足的闪存空间和安全的固件空中升级机制。后量子密码标准仍在演进未来可能会有更优的算法或参数调整设备需要具备在野外进行安全更新的能力。6. 总结与展望本次深入的评估清晰地表明后量子密码学在嵌入式设备上并非遥不可及。Kyber与Dilithium的组合已经展现出了强大的实用性即使在树莓派Pico W这样的极致受限设备上也能在可接受的时间数秒和内存开销内完成一次量子安全的TLS握手。这为保护未来数十亿物联网设备的长周期安全奠定了技术基础。然而挑战依然存在。SPHINCS等基于哈希的方案因其巨大的开销在可预见的未来很难在终端节点大规模部署它们可能更适用于对延迟不敏感、但对长期安全有绝对要求的证书颁发机构根签名等场景。同时算法的标准化和库的优化仍在进行中开发者在集成时需要密切关注上游项目的更新和安全通告。从我个人的工程经验来看当前最紧迫的任务不是等待更完美的算法而是启动“密码学清单”审计。梳理现有产品中所有使用公钥密码学的环节设备认证、固件签名、安全启动、云端通信评估其剩余安全生命周期并制定逐步迁移到后量子算法的路线图。对于新产品则应毫不犹豫地将Kyber和Dilithium纳入设计备选方案并在芯片选型和内存规划时预留足够的余量。量子威胁的倒计时已经开启而我们的防御工事必须从每一个微控制器开始筑起。

更多文章