3、硬件安全架构:MCU/MPU的安全区域、HSM、eFuse与OTP存储
聊完软件层面的安全启动,咱们得把目光往下沉一沉,看看硬件底子。说实话,软件做得再花哨,如果硬件本身是个筛子,那一切努力都是白搭。我见过不少项目,工程师把加密算法写得飞起,结果攻击者直接通过调试接口把固件读走了——这种亏,吃过一次就长记性了。
这一章,咱们就掰开揉碎,讲讲MCU/MPU里那些跟安全相关的硬件模块。说白了,就是芯片上那些专门用来“防自己人”和“防外人”的硬家伙。
3.1 安全区域(Secure Zone):芯片里的“隔离区”
先说说安全区域。这个概念最早在ARM Cortex-M系列上叫TrustZone,后来RISC-V、Xtensa这些架构也跟进了。它的核心思想很简单:把芯片的运行环境切成两个世界——安全世界(Secure World)和普通世界(Normal World)。
你想想看,你的电机控制代码跑在普通世界,而密钥、安全启动校验、固件升级这些敏感操作,全部锁在安全世界里。普通世界的程序,哪怕跑飞了、被攻击了,也碰不到安全世界的一根毛。
核心要点:安全区域不是靠软件模拟的,而是硬件总线层面做的隔离。安全世界和普通世界有各自的内存映射、外设访问权限和中断向量表。切换世界需要执行特定的安全监控调用指令(SMC),并且由硬件强制检查。
我在一个无刷直流电机项目里就吃过这个机制的甜头。当时客户要求固件必须防抄,我们就把核心的FOC算法和密钥全部放在安全世界里,普通世界只跑通信和UI。后来有同行尝试用JTAG读固件,结果读出来的全是普通世界的代码,核心算法纹丝不动。
3.1.1 安全区域的内存隔离
安全区域的内存隔离,通常通过内存保护单元(MPU)或系统内存管理单元(SMMU)来实现。每个内存区域都可以配置安全属性:
- 安全可读/写:只有安全世界能访问
- 非安全可读/写:普通世界也能访问
- 安全只读:安全世界可读,普通世界不可见
- 不可访问:谁都别想碰
嗯,这里要注意:中断也是分安全属性的。安全中断只能由安全世界处理,普通中断则交给普通世界。如果普通世界代码试图去响应一个安全中断,硬件会直接触发异常——这叫“越界”,系统会立刻复位或者进入安全故障处理流程。
3.2 HSM(硬件安全模块):芯片里的“保险柜”
如果说安全区域是隔离区,那HSM就是隔离区里的保险柜。HSM是一个独立的硬件子系统,通常包含:
- 专用的CPU内核(通常是低功耗的Cortex-M0或RISC-V核)
- 独立的SRAM和ROM
- 硬件加密加速器(AES、RSA、ECC、SHA等)
- 真随机数发生器(TRNG)
- 密钥存储单元(不可被主核直接读取)
我习惯把HSM理解成“芯片里的安全协处理器”。主核(Application Core)想干任何跟安全相关的事,比如签名验证、密钥派生、固件解密,都得通过HSM提供的API来请求。HSM处理完后,只返回结果,不暴露中间数据。
个人经验:在选型时,我建议优先选那些HSM有独立电源域和时钟域的芯片。这样即使主核被攻击导致电源被拉低或时钟被篡改,HSM依然能正常工作。我曾经在一个项目中遇到过攻击者通过时钟毛刺(Glitch)让主核跳过安全校验,但因为HSM有独立的时钟源,攻击完全无效。
3.2.1 HSM的典型工作流程
以固件签名验证为例,HSM的典型流程是这样的:
- 主核收到新固件包,把固件哈希值和签名传给HSM
- HSM使用内部存储的公钥对签名进行验证
- 验证通过后,HSM把结果(通过/失败)返回给主核
- 主核根据结果决定是否执行固件更新
整个过程,主核根本接触不到公钥和签名算法。攻击者就算把主核扒个底朝天,也拿不到密钥。
3.3 eFuse与OTP存储:一次性写入的“熔丝”
接下来聊聊eFuse和OTP。这两个东西,说白了就是芯片上的一次性可编程存储器。写入之后,就再也改不回来了——物理上改不回来。
eFuse的原理是利用电迁移效应,通过大电流把芯片内部的金属熔丝“烧断”,从而改变存储单元的状态。OTP(One-Time Programmable)则通常基于反熔丝技术,写入后不可逆。
避坑指南:我曾经在一个量产项目中,因为eFuse编程时序没调好,导致一批芯片的密钥写入后校验失败。那批芯片直接报废,损失不小。后来我总结了几条铁律:
- 编程前务必做电压和温度校准
- 编程后立即回读校验,至少校验3次
- 预留至少10%的eFuse位作为冗余
3.3.1 eFuse的典型用途
| 用途 | 说明 | 我的建议 |
|---|---|---|
| 芯片唯一ID | 每颗芯片出厂时烧录唯一序列号 | 用于设备身份认证和溯源 |
| 根密钥存储 | 存储HSM或安全启动的根密钥 | 密钥必须在安全环境下烧录 |
| 安全配置位 | 控制调试接口、JTAG、Boot模式等 | 量产时务必锁定调试接口 |
| 生命周期管理 | 记录芯片处于开发、试产、量产、报废等阶段 | 不同阶段开放不同权限 |
3.4 硬件安全架构的整体关系
这三个东西不是孤立的,它们协同工作。我画了一张图,帮你理清它们之间的关系:
从这张图你能看出来:主核通过安全区域与HSM通信,HSM从eFuse/OTP中读取根密钥,所有敏感操作都在HSM内部完成。攻击者想要拿到密钥,得先突破安全区域,再攻破HSM,最后还得物理读取eFuse——这三道防线,每一道都够喝一壶的。
3.5 实际项目中的选型建议
最后,结合我的项目经验,给你一些选型建议:
- 低端MCU(如STM32G0、GD32E系列):通常只有安全区域和OTP,没有独立HSM。适合对成本敏感、安全要求不高的电机控制。
- 中端MCU(如STM32L5、NXP i.MX RT系列):有安全区域和硬件加密引擎,部分型号有轻量级HSM。适合大多数工业电机控制。
- 高端MPU(如NXP i.MX8、TI TDA4系列):有完整的安全区域、独立HSM、eFuse阵列。适合车规级、功能安全要求高的电机控制。
我的习惯:在项目初期,我会先确定安全等级要求(比如SIL2、SIL3或者ASIL-B),然后反推硬件选型。千万别先选芯片再想安全方案——那样往往发现硬件能力不够,或者杀鸡用牛刀。
好了,这一章的内容就到这儿。硬件安全架构是安全启动的基石,理解透了,后面的软件实现才能站得住脚。