3. 信任根概念
在嵌入式安全体系中,信任根(Root of Trust, RoT)是一切安全能力的起点。它并不是某个单一模块,而是一组“不可被篡改、可被验证、可被依赖”的硬件与固件基元集合。其核心价值在于:当系统上电时,如果连最底层的代码都无法确认是否可信,那么上层所有加密、认证、隔离机制都建立在流沙之上。硬件信任根的作用,就是为整个平台提供一个可验证的起点,让后续每一级软件都能在“前一级可信”的前提下被度量、校验和授权运行。
一、硬件信任根的定义与本质
硬件信任根通常由三部分构成:不可变的启动代码(Boot ROM)、受保护的密钥与配置存储(如 OTP eFuse、PUF、安全 SRAM),以及密码学引擎(如 SHA、AES、ECC/RSA 加速器)。Boot ROM 在芯片流片时固化,无法被软件改写;OTP eFuse 用于烧录根公钥哈希、安全启动使能位、生命周期状态等关键参数;密码学引擎则负责在启动早期完成签名验证和度量计算。三者结合,形成“代码不可改、密钥不可读、验证不可绕”的硬件根基。
需要强调的是,硬件信任根并不等于“绝对安全”。它解决的是起点可信问题,而不是全部安全问题。若 OTP 烧录策略错误、调试口未关闭、生命周期状态配置不当,信任根依然可能被旁路。因此,信任根的可信性依赖于芯片设计、制造、烧录和部署全流程的严格控制。
二、信任根的分类
按照实现形态和职责范围,硬件信任根可分为以下几类:
- 静态信任根(Static RoT):以固化 Boot ROM 和 OTP 配置为核心,负责上电后的第一段代码验证,通常不涉及运行时动态度量。
- 动态信任根(Dynamic RoT):在静态信任根基础上,引入运行时度量与远程证明能力,可持续监测固件和关键数据结构是否被篡改。
- 设备身份信任根(Identity RoT):以每颗芯片唯一的密钥或证书为核心,用于设备身份认证、安全入网和许可证绑定。
- 存储信任根(Storage RoT):以 OTP eFuse、安全 Flash 或 PUF 为根,保护密钥、配置和生命周期状态不被非法读取或修改。
在实际 SoC 中,这些分类往往交叉存在。例如,一颗安全 MCU 可能同时具备静态启动信任根、设备身份信任根和 OTP 存储信任根,三者协同完成从冷启动到安全服务的完整链路。
三、信任链与信任锚
信任链(Chain of Trust)描述的是信任如何从硬件根逐级传递到应用层。典型路径为:Boot ROM → 一级引导程序(BL1)→ 二级引导程序(BL2)→ 安全操作系统 → 可信应用。每一级在运行前,都要由上一级使用密码学方法验证其完整性和真实性。验证通过后,信任才被“传递”到下一级。
信任锚(Trust Anchor)则是信任链中不可再向上追溯的最终依据,通常表现为烧录在 OTP eFuse 中的根公钥哈希或证书哈希。信任锚一旦烧录,通常不可更改;若需要更新,必须依赖密钥轮换机制或生命周期状态迁移。信任锚的安全性直接决定整条信任链的上限。
关键理解:信任链是“传递过程”,信任锚是“起点依据”。没有信任锚,信任链无法建立;没有信任链,信任锚只能验证第一级,无法覆盖整个系统。
四、安全启动中的角色
安全启动是信任根最典型的应用场景。其流程可概括为:上电复位后,CPU 从 Boot ROM 开始执行;Boot ROM 读取 OTP eFuse 中的信任锚,对一级引导程序进行哈希计算和签名验证;验证通过后,将执行权交给一级引导程序;一级引导程序再以同样方式验证二级引导程序,依此类推,直到安全操作系统启动完成。
在这个过程中,硬件信任根承担了三个关键角色:第一,提供不可篡改的验证代码;第二,提供不可泄露的信任锚存储;第三,提供高速密码学运算能力。缺少任何一项,安全启动都无法在可接受的时间内完成,或者无法抵御物理攻击。
典型安全启动验证伪代码:
boot_rom():
anchor = otp_read(ROOT_KEY_HASH)
bl1_hash = sha256(bl1_image)
if verify_signature(bl1_hash, bl1_sig, anchor) != PASS:
halt_and_lock()
jump_to(bl1)
bl1():
bl2_hash = sha256(bl2_image)
if verify_signature(bl2_hash, bl2_sig, bl1_pubkey) != PASS:
halt_and_lock()
jump_to(bl2)
五、可信执行环境中的角色
可信执行环境(TEE)建立在安全启动完成之后。硬件信任根为 TEE 提供了两样关键基础:可信的启动镜像和可信的密钥材料。TEE 在安全世界中运行可信应用,负责密钥管理、安全存储、生物特征比对、支付认证等敏感操作。普通操作系统(Rich OS)运行在正常世界,无法直接访问 TEE 的内存和密钥。
硬件信任根在 TEE 中的角色可以理解为“信任的源头供给者”:TEE 的安全世界初始化代码由安全启动链验证后加载;TEE 使用的设备根密钥由 OTP eFuse 或 PUF 派生;TEE 对外提供的远程证明报告,其签名密钥也锚定在硬件信任根上。因此,TEE 的可信度不会超过硬件信任根的可信度。
六、常见误区与复盘
| 误区 | 问题本质 | 正确做法 |
|---|---|---|
| 认为“有 Boot ROM 就等于有信任根” | 忽略信任锚和密码学引擎的配套作用 | 信任根 = 不可变代码 + 受保护密钥存储 + 密码学验证能力 |
| OTP eFuse 烧录后未锁定 | 信任锚可被篡改,信任链起点失效 | 烧录后立即设置锁定位,关闭调试口 |
| 安全启动只验证一级 | 后续镜像可被替换,信任链断裂 | 每一级都必须验证下一级,直到应用层 |
| 把 TEE 当作信任根 | 混淆信任来源与信任使用方 | TEE 依赖硬件信任根,而非替代它 |
工程建议:在项目早期就明确信任锚的烧录策略、密钥轮换方案和生命周期状态迁移路径。信任根一旦部署,后期修改成本极高,必须在架构阶段完成评审。
总结来看,硬件信任根是安全体系的“第一块基石”,信任锚是这块基石的“固定点”,信任链是信任从底层向应用层传递的“路径”,安全启动是这条路径的“执行机制”,而 TEE 则是在可信基础上提供隔离运行环境的“安全容器”。五者环环相扣,缺一不可。