2、硬件信任根(RoT):HSM架构、eFuse与OTP存储、唯一芯片密钥

好,咱们今天聊点硬核的——硬件信任根。说白了,这就是整个安全体系的“地基”。你想想看,如果地基都不牢,上面盖再高的楼,一推就倒。在汽车ECU里,这个地基就是RoT(Root of Trust)。

我个人习惯把RoT比作“芯片的出生证明”。它必须满足三个条件:不可伪造、不可篡改、不可绕过。缺一个,整个安全体系就形同虚设。我在项目中遇到过不少“伪安全”方案,看着花里胡哨,结果攻击者直接绕过软件层,从硬件层面把密钥读走了……嗯,那场面挺尴尬的。

2.1 HSM(硬件安全模块)架构

HSM不是一颗独立的芯片,它通常是集成在MCU或SoC内部的一个独立硬件单元。我习惯叫它“芯片里的保险柜”。

为什么需要独立?因为主核(Application Core)跑的是通用操作系统,漏洞多、攻击面大。HSM有自己的小核、自己的内存、自己的总线,跟主核物理隔离。说白了,主核被攻破了,HSM还能守住最后一道防线。

典型的HSM架构包含以下几个关键模块:

  • 安全CPU核:通常是ARM Cortex-M系列或专用RISC-V核,跑安全固件,不跑Linux。
  • 专用SRAM/ROM:存放密钥、证书、安全状态。主核访问不到这片区域。
  • 硬件加速器:AES、RSA、ECC、SM2/SM3/SM4等算法的硬核实现。比软件快几十倍,还能防侧信道攻击。
  • 真随机数发生器(TRNG):生成密钥和随机数的基础。伪随机数在安全领域就是笑话。
  • 安全DMA:在HSM内部搬运数据,不经过主核总线。

核心要点:HSM的隔离性决定了安全性。如果主核能通过调试接口(如JTAG/SWD)读取HSM内存,那这个HSM就是摆设。我见过某款芯片,HSM和主核共用同一套调试接口,结果……你懂的。

我记得有一次做Tier-1的项目,客户要求HSM必须支持“安全启动”和“安全存储”。我们选了一款带HSM的芯片,结果发现HSM的固件更新接口居然暴露在CAN总线上。我当时就火了——这不是把保险柜的钥匙挂在门口吗?后来我们强制要求:HSM固件更新必须通过物理授权(比如诊断仪+安全访问序列)。

2.2 eFuse与OTP存储

好,接下来聊存储。普通Flash和EEPROM都能被擦写,但安全密钥不行——你总不希望攻击者把密钥擦掉再写个自己的吧?

所以,我们需要一次性可编程(OTP)存储。eFuse就是其中最常见的一种实现方式。

eFuse的原理很简单:芯片内部有一根根微小的“熔丝”。出厂时都是连通的(逻辑0)。通过施加高电压,把熔丝熔断(逻辑1)。一旦熔断,就再也回不去了。这就像在芯片上刻了个“永久纹身”。

OTP存储通常用来存放:

  • 芯片唯一ID:每个芯片一个,不可更改。
  • 根密钥(Root Key):整个安全体系的起点。
  • 安全配置位:比如“是否允许JTAG访问”、“是否允许调试模式”。
  • 生命周期状态:比如“开发态”、“生产态”、“失效态”。
存储类型 可擦写次数 典型用途 安全性
eFuse (OTP) 1次(按位) 根密钥、芯片ID、安全配置 极高(物理不可逆)
Flash 10万次以上 固件、应用数据 低(可擦写、可读)
EEPROM 100万次以上 标定参数、故障码 中(可擦写)
SRAM/PUF 无限(易失性) 临时密钥、会话密钥 高(掉电消失)

注意:eFuse的容量通常很小,一般只有几Kb到几十Kb。别指望用它存固件。而且eFuse的编程电压很高(通常1.8V或3.3V以上),设计时要注意电源管理。我曾经遇到过一块板子,eFuse编程时电压不稳,结果熔丝烧了一半,芯片直接报废……那批货全废了,损失惨重。

还有一个坑:eFuse的“熔断”是不可逆的,但有些芯片支持“软OTP”——用Flash模拟OTP,通过锁定寄存器禁止写入。这玩意儿安全性差很多,因为攻击者可以通过电压毛刺(Glitch)或激光照射,让锁定寄存器失效。所以,真正要存根密钥,还是得上硬OTP。

2.3 唯一芯片密钥

每个芯片出厂时,都应该有一个唯一的、不可预测的密钥。这个密钥是HSM的“灵魂”。

为什么必须唯一?因为如果所有芯片都用同一个密钥,攻击者只要破解一台车,就能控制整个车队。这可不是开玩笑——2015年就有黑客通过破解一台Jeep的Uconnect系统,远程控制了140多万辆车。原因之一就是密钥管理太烂。

唯一芯片密钥的生成方式通常有两种:

  1. 预置密钥:芯片厂商在OTP中烧录一个随机密钥。优点是简单,缺点是密钥在厂商侧就暴露了。我一般不建议用这种方式,除非你完全信任你的供应链。
  2. 物理不可克隆函数(PUF):利用芯片制造过程中的工艺偏差(比如晶体管的阈值电压差异),生成一个唯一的“指纹”。这个指纹每次上电都稳定,但不同芯片之间完全不同。PUF的优点是密钥不在芯片外存在过,安全性极高。

我的建议:如果条件允许,优先选PUF方案。虽然PUF的纠错电路(Helper Data)会增加一些成本,但换来的是“密钥从未离开过芯片”的安全性。我在一个ADAS项目中用了PUF,客户的安全审计一次通过,因为审计员根本找不到密钥的存储位置——它压根就没存过。

唯一芯片密钥的典型使用流程是这样的:

// 伪代码示例:安全启动时验证固件签名
1. HSM上电,从PUF或OTP中读取唯一芯片密钥(UK)
2. 使用UK解密存储在Flash中的“根公钥密文”
3. 得到根公钥明文,验证Bootloader的签名
4. Bootloader验证通过后,再逐级验证Application固件
5. 任何一级验证失败,HSM直接锁定芯片(进入安全失效状态)

这里有个细节:唯一芯片密钥绝对不能被主核直接读取。HSM内部应该有一个硬件防火墙,任何来自主核的“读密钥”请求,直接返回全0或随机数。我见过有些芯片设计,HSM把密钥放在一个共享寄存器里,主核通过读寄存器就能拿到……这设计简直是给攻击者送人头。

嗯,说到这儿,我想起一个真实案例。某OEM要求所有ECU必须支持“安全刷写”,也就是固件更新时必须用唯一芯片密钥做身份认证。结果有一家供应商偷懒,所有芯片用了同一个密钥。后来在路试时,测试人员用一台车的密钥成功刷写了另一台车的固件……这个漏洞被列为严重安全缺陷,供应商被罚了上千万。你说冤不冤?一点都不冤。

最后总结一下:硬件信任根不是某个单一技术,而是一套组合拳。HSM提供隔离执行环境,eFuse/OTP提供不可逆存储,唯一芯片密钥提供身份基础。三者缺一不可。你想想看,如果HSM没有OTP保护密钥,或者密钥不是唯一的,那这个RoT就是纸糊的。

下一章,咱们聊聊如何用这套RoT实现真正的安全启动——从芯片上电到应用启动,每一步都踩在信任链上。