1、信任根概述:什么是硬件信任根(RoT)、为什么需要硬件信任根、信任根在安全启动中的角色

各位同学,咱们今天聊一个很核心的概念——硬件信任根。说白了,它就是整个安全体系的“第一块基石”。你想想看,如果连第一块砖都是歪的,那上面盖的房子能稳吗?

我在做嵌入式安全这行之前,其实也踩过不少坑。有一次客户的产品在量产阶段被爆出固件被篡改,查到最后发现是启动链的最底层没有做任何校验。嗯,从那以后我就深刻理解了——没有信任根,安全就是空中楼阁。

1.1 什么是硬件信任根(RoT)

硬件信任根,英文叫 Root of Trust,简称 RoT。它不是一个具体的芯片型号,而是一个不可伪造、不可篡改的信任锚点。这个锚点必须建立在硬件层面,因为软件层面的东西,说白了都是可以被改写的。

我个人习惯把 RoT 理解为“安全世界的原点”。就像 GPS 定位需要一颗卫星作为基准一样,整个系统的安全启动也需要一个绝对可信的起点。

核心定义:硬件信任根是一个在物理上受保护、在逻辑上不可篡改的安全元件或安全区域。它负责在系统上电的第一时间建立信任,并逐级验证后续的代码和配置。

RoT 通常具备以下几个关键属性:

  • 不可克隆性:每个芯片的 RoT 都是唯一的,无法被复制到另一个芯片上。
  • 防篡改性:物理攻击(如探针、激光)无法读取或修改 RoT 内部存储的秘密。
  • 隔离性:RoT 运行在独立的执行环境中,主处理器上的恶意软件无法访问它。
  • 持久性:RoT 的身份和密钥在芯片整个生命周期内保持不变。

1.2 为什么需要硬件信任根

你可能会问:我用软件做校验不行吗?比如在 BootROM 里写一段代码,去检查下一级镜像的签名。听起来好像也行?

但问题在于——BootROM 本身也是软件。如果攻击者能修改 BootROM 的代码,那它校验出来的结果还有什么意义?这就好比让一个小偷去检查自己有没有偷东西,你觉得靠谱吗?

我在项目中遇到过一种攻击手法,叫“BootROM 替换攻击”。攻击者通过物理手段(比如 SPI Flash 编程器)直接改写外部存储中的 BootROM 镜像。如果系统没有硬件 RoT 做保护,那整个启动链就彻底沦陷了。

所以,硬件信任根存在的意义,就是解决一个根本问题:谁来信任第一个检查者?答案只有一个——硬件自己。

避坑指南:我曾经见过一个团队,为了省成本,把 RoT 功能用软件模拟。结果产品上市三个月就被爆出安全漏洞。后来一查,攻击者就是通过修改外部 Flash 里的“软件 RoT”代码,绕过了所有校验。嗯,省下的那几毛钱成本,最后花了几十万去做召回。

硬件信任根的核心价值,我总结为三点:

  1. 物理隔离:RoT 运行在独立的硬件模块中,主 CPU 无法直接访问其内部状态。
  2. 不可绕过:系统上电后,第一条指令必须从 RoT 开始执行,无法跳过。
  3. 密钥保护:签名验证用的公钥、私钥都存储在 RoT 的 OTP(一次性可编程)存储器中,无法被读取或修改。

1.3 信任根在安全启动中的角色

安全启动,说白了就是一条“信任链”。这条链的起点就是 RoT。咱们来看一个典型的启动流程:

硬件信任根安全启动链流程图 硬件信任根驱动的安全启动链 硬件信任根 (RoT) BootROM 签名校验 一级 Bootloader 系统镜像 / OS 信任链传递规则 1. 每一级只信任上一级 2. 每一级校验下一级的签名 3. 任何一级校验失败 → 停机 4. RoT 是整个链的物理锚点 校验失败 → 安全停机 图:基于硬件信任根的逐级安全启动链

这个图其实很直观。RoT 是第一个上电的模块,它内部固化的代码(通常是 BootROM)会做第一件事:验证下一级镜像的签名。如果签名通过,就把控制权交给下一级;如果失败,直接锁死系统。

每一级都重复这个动作:校验通过 → 移交控制权;校验失败 → 安全停机。这样就形成了一条不可中断的信任链。

重要提醒:信任链的强度取决于最弱的一环。如果某一级校验实现有漏洞,或者密钥被泄露,那整个链就断了。我见过一个案例,某厂商在二级 Bootloader 里用了硬编码的测试密钥,结果被攻击者提取后伪造了系统镜像。嗯,测试密钥一定要在量产前销毁,这个教训是用真金白银换来的。

1.4 RoT 的物理实现方式

讲到这里,你可能想知道 RoT 到底长什么样。其实常见的实现方式有这么几种:

实现方式 典型代表 安全等级 成本
独立安全芯片 TPM、HSM、SE 高 高
SoC 内置安全区域 ARM TrustZone、RISC-V 物理内存保护 中高 中
MCU 内部 OTP + BootROM STM32 安全启动、NXP i.MX HAB 中 低
FPGA 内嵌安全硬核 Xilinx Zynq 的 RSA 引擎 中 中高

我个人比较推荐 SoC 内置安全区域这种方式。为什么呢?因为它在成本和安全性之间取得了比较好的平衡。独立安全芯片虽然更安全,但会增加 BOM 成本和 PCB 面积;而纯软件方案又不靠谱。

选型建议:如果你的产品是消费级(比如智能家居),用 MCU 内置的 OTP + BootROM 就够了。如果是工业控制或汽车电子,建议上独立安全芯片。我做过一个车载项目,客户坚持用 MCU 内置方案,结果 EMC 测试时 RoT 被干扰导致误触发安全停机。后来换了独立安全芯片,问题才解决。

1.5 一个简单的 RoT 校验代码示例

光说不练假把式。咱们来看一段简化的 RoT 校验代码。这是 BootROM 里最核心的逻辑:

// 简化版 RoT 签名校验流程
// 实际实现会更复杂,但核心逻辑就是这样

#define PUBLIC_KEY_HASH 0x1FFF7800  // OTP 中存储的公钥哈希
#define IMAGE_BASE      0x08010000  // 待校验镜像的起始地址

int rot_verify_bootloader(void) {
    uint8_t  signature[256];
    uint8_t  hash[32];
    uint8_t  expected_hash[32];
    
    // 1. 从 OTP 读取预期的公钥哈希
    memcpy(expected_hash, (uint8_t*)PUBLIC_KEY_HASH, 32);
    
    // 2. 从镜像头部读取签名
    memcpy(signature, (uint8_t*)(IMAGE_BASE + 0x200), 256);
    
    // 3. 计算镜像的哈希值
    sha256_compute((uint8_t*)IMAGE_BASE, 0x20000, hash);
    
    // 4. 用公钥验证签名
    if (rsa_verify(hash, signature, public_key) != 0) {
        // 校验失败,锁死系统
        system_halt();
        return -1;
    }
    
    // 5. 校验通过,跳转到镜像入口
    jump_to(IMAGE_BASE + 4);
    return 0;
}

这段代码看起来简单,但有几个关键点要注意:

  • OTP 里的公钥哈希是在芯片出厂时烧录的,之后任何人都无法修改。
  • 签名算法必须用硬件加速,用软件算 RSA 太慢了,上电延迟会很大。
  • 校验失败后的行为必须是“安全停机”,不能只是打印一条日志就继续执行。

核心要点总结:

  • 硬件信任根是安全启动的物理锚点,不可伪造、不可篡改。
  • 没有硬件 RoT,软件层面的校验都是空中楼阁。
  • 信任链从 RoT 开始,逐级传递,任何一级失败都会导致系统停机。
  • RoT 的实现方式有多种,选型时要平衡安全等级和成本。

嗯,这一章的内容就到这里。硬件信任根这个概念,说复杂也复杂,说简单也简单。你只要记住一句话:它是整个安全体系的“第一块基石”,这块基石必须是硬的,不能是软的。