2. 硬件信任根 (RoT):eFuse与OTP、硬件唯一密钥 (HUK)、安全存储区

聊安全启动,绕不开一个词——信任根。说白了,就是整个安全体系的“第一块基石”。如果这块石头是松的,上面盖再高的楼也没用。今天我们就来拆解硬件信任根的三个核心部件:eFuse/OTP、硬件唯一密钥,以及安全存储区。

2.1 什么是硬件信任根?

信任根(Root of Trust, RoT)是一个必须被无条件信任的实体。在嵌入式系统里,它通常是硬件实现的。为什么非得是硬件?因为软件可以被篡改,可以被调试器绕过。但硬件熔丝一旦烧断,神仙也救不回来。

我个人习惯把信任根比作“芯片的出生证明”。它是在芯片制造或第一次编程时写入的,之后就不能改了。安全启动链上的每一级校验,最终都要追溯到它。

核心原则:信任根必须是 不可变的、唯一的、可信的。缺一个,整个安全体系就垮了。

硬件信任根核心组件结构图 硬件信任根 (RoT) 核心组件 硬件信任根 eFuse / OTP 硬件唯一密钥 (HUK) 安全存储区 三者共同构成不可篡改的信任锚点 eFuse/OTP 存储根密钥和配置;HUK 派生会话密钥;安全区保护运行时敏感数据

2.2 eFuse 与 OTP:一次编程,终身锁定

eFuse 和 OTP(One-Time Programmable)是信任根最底层的物理载体。它们本质上都是一次性可编程存储单元。芯片出厂时全是默认值,你可以在产线上烧写一次,烧完就锁死。

eFuse 是怎么工作的? 简单说,就是通过大电流把芯片内部的金属连线“熔断”。熔断前是逻辑 0,熔断后是逻辑 1(或者反过来,各家实现不同)。OTP 则多用反熔丝技术,烧写时把绝缘层击穿,形成永久导通。

嗯,这里要注意:eFuse 的位宽通常很有限。一个芯片可能只有几百到几千比特的 eFuse 空间。所以你不能拿它当 Flash 用,只能存最关键的东西——比如根公钥的哈希、芯片唯一 ID、安全配置位。

我的经验: 曾经有个项目,产线烧写 eFuse 时电压没稳住,导致部分芯片的根密钥校验位写成了 0x5A 而不是 0xA5。结果这批芯片全部无法通过安全启动。从那以后,我要求产线每次烧写后必须做回读校验,并且至少烧 3 颗样品做破坏性测试。

特性 eFuse OTP (反熔丝)
编程原理 熔断金属连线 击穿绝缘层
编程电流 较大 (10-30mA/bit) 较小 (1-5mA/bit)
可靠性 受温度影响,有“愈合”风险 更稳定,抗辐射
典型容量 128 - 4096 bits 64 - 2048 bits
常见用途 密钥存储、芯片ID、配置位 密钥存储、安全配置

避坑指南: 我曾经见过一个团队,把 eFuse 当成普通 EEPROM 用,反复读写。结果芯片在实验室就挂了。记住:eFuse 只能烧一次!烧错了,芯片就废了。所以烧写逻辑一定要反复验证,最好加个“烧写使能”硬件锁。

2.3 硬件唯一密钥 (HUK)

HUK,全称 Hardware Unique Key。每颗芯片的 HUK 都不一样。它通常由芯片内部的物理不可克隆函数(PUF)生成,或者从 eFuse 中读取一个种子,再通过硬件引擎派生。

你想想看,如果所有芯片都用同一个密钥,攻破一台设备就等于攻破了整个产品线。HUK 的价值就在这里——即使攻击者拿到了你的固件,他也无法在其他芯片上解密你的数据。

HUK 一般不会直接暴露给软件。芯片内部有个硬件密钥管理单元,软件只能通过特定的命令请求它做加解密操作。密钥本身,软件是读不到的。

关键点: HUK 必须满足三个条件:唯一性(每颗芯片不同)、不可预测性(攻击者无法猜测)、不可克隆性(即使拿到一颗芯片,也无法复制到另一颗)。

2.4 安全存储区

安全存储区,也叫安全内存或安全沙箱。它是芯片内部一块独立的存储区域,通常与主系统总线隔离。只有经过安全认证的代码才能访问它。

这块区域用来存什么?

  • 运行时密钥: 比如从 HUK 派生出来的会话密钥。
  • 安全状态: 比如芯片是否已解锁、调试接口是否已关闭。
  • 敏感配置: 比如安全启动的策略位。

我建议在设计安全存储区时,一定要考虑“侧信道攻击”的防护。比如,不要用简单的 SRAM,要用带扰码的专用安全 RAM。否则攻击者通过功耗分析或电磁辐射,就能把密钥读出来。

我的一个教训: 早期做一款 IoT 芯片时,安全存储区直接用了普通 SRAM。结果安全研究员用激光照射芯片的特定区域,成功改变了存储区的数据,绕过了安全启动。后来我们改用了带 ECC 和物理防护的安全 RAM,才算彻底堵住这个漏洞。

2.5 三者如何协同工作?

光有单个组件是不够的。它们必须形成一个闭环:

  1. 上电复位: ROM 代码首先读取 eFuse 中的安全配置位,判断是否启用安全启动。
  2. 密钥加载: 硬件引擎从 eFuse 读取根密钥种子,结合 PUF 生成 HUK。
  3. 安全存储初始化: HUK 被加载到安全存储区,用于派生后续的固件解密密钥。
  4. 启动校验: 使用安全存储区中的密钥,验证下一级 Bootloader 的签名。

你看,每一步都依赖前一步。如果 eFuse 被篡改,HUK 就错了;如果 HUK 泄露,安全存储区就形同虚设。所以硬件信任根的设计,本质上是在做“最小可信计算基”的物理实现。

总结一句话: eFuse/OTP 是信任根的“根”,HUK 是信任根的“魂”,安全存储区是信任根的“盾”。三者缺一不可。