4、信任根(RoT):什么是信任根、硬件信任根 vs 软件信任根、eFuse与OTP存储

各位同学,咱们今天聊一个安全启动里最核心、也最容易被忽视的概念——信任根(Root of Trust,简称RoT)。

说白了,信任根就是整个安全体系的「原点」。你想想看,如果连这个原点都不安全,那后面所有的校验、签名、加密,全都是空中楼阁。我在做第一个安全启动项目时,就犯过这个错误——光顾着搭链路,结果信任根选了个纯软件的方案,最后被攻破得干干净净。嗯,从那以后,我对信任根的选择就格外谨慎。

4.1 什么是信任根?

信任根,就是系统中绝对可信的最小集合。它必须满足三个条件:

  • 不可篡改:攻击者无法修改它的行为或内容
  • 不可伪造:无法用其他实体冒充它
  • 不可绕过:所有安全校验都必须经过它

我习惯把信任根比作「安全大厦的地基」。地基要是歪了,上面盖再高的楼也没用。在嵌入式系统里,信任根通常负责:

  • 验证第一段启动代码的签名
  • 存储根密钥(比如RSA私钥或对称密钥)
  • 提供真随机数(用于密钥生成)
  • 执行哈希计算(比如SHA-256)

核心原则:信任根必须是「自证清白」的。它不能依赖任何外部实体来证明自己可信——它本身就是可信的源头。

4.2 硬件信任根 vs 软件信任根

这里有个经典问题:信任根到底该用硬件实现,还是软件实现?

我直接说结论:能用硬件就别用软件。为什么?咱们看个对比:

特性 硬件信任根 软件信任根
安全性 高(物理隔离,难以篡改) 低(可被内存篡改、代码注入)
性能 快(专用硬件加速) 慢(依赖CPU计算)
成本 高(需要额外芯片或IP) 低(纯代码实现)
灵活性 低(出厂后难以修改) 高(可OTA升级)
典型实现 TPM、HSM、eFuse、Secure Element Boot ROM中的校验代码

你可能会问:「那软件信任根是不是完全不能用?」也不是。在一些低成本的IoT设备里,软件信任根确实存在。但我个人建议——至少把根密钥放在硬件里。我曾经见过一个产品,所有密钥都写在Flash里,结果攻击者通过读Flash直接拿到了私钥……嗯,那场面挺尴尬的。

我的经验:如果预算允许,选硬件信任根。如果实在要省成本,至少用OTP(一次性可编程)存储来保护根密钥。别把密钥放在可擦写的Flash里,那是给自己挖坑。

4.3 eFuse与OTP存储

聊到硬件信任根,就绕不开eFuse和OTP。这两个东西是嵌入式安全里的「硬通货」。

4.3.1 什么是OTP?

OTP(One-Time Programmable),一次性可编程存储器。顾名思义,它只能写一次,写完之后就不能再改了。这特性天然适合存储:

  • 根公钥哈希
  • 芯片唯一ID
  • 安全配置位(比如是否开启调试接口)
  • 设备密钥

OTP的实现方式有很多种,比如熔丝(Fuse)、反熔丝(Anti-Fuse)、电荷俘获(Charge Trap)等。其中eFuse是最常见的一种。

4.3.2 eFuse的工作原理

eFuse,说白了就是一根「可烧断的导线」。芯片出厂时,eFuse默认是导通的(逻辑1)。当我们需要写入数据时,通过施加高电压、大电流,把对应的eFuse熔断(变成逻辑0)。

嗯,这里要注意:eFuse一旦熔断,就不可恢复了。所以烧录eFuse是个「开弓没有回头箭」的操作。我在项目中就遇到过烧错eFuse导致整批芯片报废的情况……从那以后,我每次烧eFuse前都会做三次检查。

避坑指南:

  • 烧录eFuse前,务必在测试芯片上验证流程
  • 设计时预留一些「备用位」,万一需要修正还能补救
  • eFuse有寿命限制(通常几百次编程),别反复测试

4.3.3 eFuse在安全启动中的典型用法

咱们来看一个实际场景:安全启动中,如何用eFuse存储根公钥的哈希?

// 伪代码:安全启动时验证根公钥
// 1. 从eFuse中读取预置的根公钥哈希
uint8_t expected_hash[32];
efuse_read(EFUSE_ROOT_KEY_HASH, expected_hash, 32);

// 2. 计算当前加载的根公钥的哈希
uint8_t actual_hash[32];
sha256_compute(root_public_key, root_public_key_len, actual_hash);

// 3. 比较两者是否一致
if (memcmp(expected_hash, actual_hash, 32) == 0) {
    // 根公钥可信,继续启动
    boot_continue();
} else {
    // 根公钥被篡改,停止启动
    boot_halt();
}

这个流程的关键在于:eFuse里的哈希值是在芯片出厂时烧录的,攻击者无法修改。而根公钥虽然存储在Flash里,但每次启动都会用eFuse里的哈希去校验它——这就形成了一个「信任链」。

4.3.4 eFuse vs 其他OTP技术

除了eFuse,市面上还有几种常见的OTP实现:

类型 原理 优点 缺点
eFuse 熔断金属导线 成熟、成本低 占用面积大、功耗高
反熔丝 击穿绝缘层形成导通 面积小、可靠性高 工艺复杂、成本高
MTP 多次可编程(类似EEPROM) 可多次写入 安全性低于一次性OTP
激光熔丝 用激光烧断 精度高、可后期编程 需要专用设备、成本极高

我个人最常用的是eFuse,因为它性价比高,而且各大芯片厂商(比如NXP、ST、TI)都有成熟的IP。但如果你做的是军工级或车规级产品,反熔丝可能是更好的选择——它的抗物理攻击能力更强。

4.4 信任根的层级结构

最后,咱们用一张图来总结信任根在安全启动中的位置。下面这张SVG图展示了从硬件信任根到应用层的完整信任链:

信任根层级结构 硬件信任根(eFuse / OTP) 存储根密钥哈希、芯片ID、安全配置 Boot ROM(不可修改) 读取eFuse,验证Bootloader签名 Bootloader(签名校验) 验证OS内核签名,加载系统 OS内核与应用 运行在可信环境中的上层软件 不可篡改 只读 可更新 可更新 信任根 信任链 信任链 信任链

从这张图可以看得很清楚:信任根是整个安全启动的「锚点」。它位于最底层,不可篡改。Boot ROM从eFuse中读取根密钥哈希,然后逐级验证Bootloader、OS内核,最终建立起一条完整的信任链。

总结一下:

  • 信任根是安全体系的基石,必须硬件实现
  • eFuse和OTP是存储根密钥的最佳选择
  • 烧录eFuse要谨慎,一次失误可能报废整批芯片
  • 信任链从硬件信任根开始,逐级传递信任

好了,这一章的内容就到这里。信任根的概念虽然基础,但它是整个安全启动的「命门」。下一章咱们会深入聊聊如何用这些信任根来构建完整的启动验证流程。

可可精品资料库