4、信任根(RoT):什么是信任根、硬件信任根(eFuse/OTP)、软件信任根、信任根的选择标准
聊到安全启动,有个概念绕不开——信任根。
说白了,信任根就是整个安全体系的「原点」。你想想看,如果连这个原点都不安全,那后面所有的校验、签名、度量,全都是空中楼阁。我经常跟团队讲一句话:信任根要是塌了,整个城堡就没了。
4.1 什么是信任根
信任根,英文叫 Root of Trust,简称 RoT。它是一个绝对可信的实体,是整个信任链的起点。
它的核心职责就两件事:
- 提供可信的度量:在启动过程中,测量下一级代码的完整性
- 提供可信的存储:保存密钥、证书、哈希值等敏感信息
我举个例子你就明白了。假设你要验证一张钞票的真伪,你得先有一张「绝对真」的钞票作为参照。信任根就是这个参照物。
在嵌入式系统里,信任根通常分为两类:硬件信任根和软件信任根。
核心原则:信任根必须是不可篡改的。一旦被篡改,整个信任链就崩塌了。
4.2 硬件信任根(eFuse/OTP)
硬件信任根,顾名思义,是用物理方式实现的信任根。它不可更改,不可绕过。
最常见的实现方式有两种:eFuse 和 OTP。
4.2.1 eFuse
eFuse 的全称是电子熔丝。你可以把它想象成芯片上的一排「小保险丝」。
出厂时,所有 eFuse 都是「导通」状态。当你需要写入数据时,通过施加高电压把某些熔丝「烧断」。烧断后,这个状态就永久固定了。
我在项目中遇到过一件事。有个客户想通过软件修改 eFuse 里的密钥,结果发现根本做不到。为什么?因为 eFuse 是单向编程的——只能从 0 变成 1,不能从 1 变回 0。
我的经验:eFuse 适合存储少量、一次性写入的数据。比如根密钥、芯片唯一ID、安全配置位。千万别用它存大块数据,成本太高。
4.2.2 OTP(一次性可编程存储器)
OTP 和 eFuse 本质上是同一类东西,只是实现方式不同。OTP 通常基于浮栅晶体管,写入后电荷被锁住,无法擦除。
OTP 的优点是密度更高,同样面积能存更多数据。缺点是写入速度慢,而且对温度敏感。
我记得有一次做车规级芯片,客户要求在 OTP 里存储校准参数。结果高低温测试时,部分 OTP 单元的数据发生了翻转。嗯,这里要注意——OTP 的可靠性需要仔细评估,尤其是在极端环境下。
| 特性 | eFuse | OTP |
|---|---|---|
| 编程方式 | 熔断金属丝 | 注入电荷 |
| 存储密度 | 低 | 高 |
| 写入速度 | 快 | 慢 |
| 可靠性 | 高 | 中等(受温度影响) |
| 典型用途 | 密钥、安全配置 | 校准参数、序列号 |
4.3 软件信任根
软件信任根,听起来有点矛盾——软件怎么能当「根」呢?软件不是可以修改吗?
你说得对。纯粹的软件信任根确实存在风险。但在某些场景下,我们不得不依赖软件来实现信任根。
典型的例子是 ROM Bootloader。芯片上电后,CPU 从 ROM 里执行第一段代码。这段代码是掩膜固化的,出厂后无法修改。从功能上看,它属于软件;但从不可篡改性看,它又具备硬件特性。
我个人习惯把软件信任根分为两类:
- ROM 代码:固化在芯片内部,无法修改。这是最可靠的软件信任根。
- 安全协处理器固件:运行在独立的安全核心上,通过硬件隔离保护。
我曾经参与过一个 IoT 项目,芯片没有硬件信任根,只能用 ROM Bootloader 做信任根。结果发现一个问题——ROM 代码有 bug,但没法修复。最后只能通过安全更新机制绕过这个 bug,但代价是增加了攻击面。
避坑指南:如果你选择软件信任根,一定要确保它满足两个条件:1)不可篡改(ROM 或硬件保护);2)足够小,便于形式化验证。我曾经见过一个项目,ROM 代码写了 200KB,结果漏洞多到数不清。
4.4 信任根的选择标准
选信任根,不是越贵越好,也不是越复杂越好。我总结了四个核心标准:
4.4.1 不可篡改性
这是第一位的。信任根如果可以被篡改,那它就不配叫「根」。
硬件信任根天然具备这个特性。软件信任根则需要通过 ROM 固化或硬件隔离来实现。
4.4.2 性能开销
信任根的操作会影响启动时间。尤其是 eFuse 的读取速度比较慢,如果每次启动都要读大量数据,用户可能会抱怨开机太慢。
我建议:信任根只存储最关键的信息。比如根密钥的哈希值,而不是整个密钥本身。
4.4.3 成本
eFuse 和 OTP 都需要额外的芯片面积。一颗芯片增加 0.1 平方毫米,量产百万颗就是不小的成本。
对于低成本 MCU,很多厂商选择用 ROM Bootloader 做信任根,配合外部 Flash 存储密钥。这是一种折中方案。
4.4.4 灵活性
硬件信任根一旦写入,就无法更改。这在某些场景下是个缺点。
比如,你的产品需要支持密钥轮换,或者需要修复安全漏洞。这时候,硬件信任根反而成了束缚。
我记得有个客户做智能门锁,一开始用了 eFuse 存储根密钥。后来发现密钥泄露了,但 eFuse 改不了。最后只能召回产品。嗯,这个教训挺深刻的。
| 选择标准 | 硬件信任根 | 软件信任根 |
|---|---|---|
| 不可篡改性 | ★★★★★ | ★★★☆☆ |
| 性能开销 | ★★★☆☆ | ★★★★★ |
| 成本 | ★★☆☆☆ | ★★★★★ |
| 灵活性 | ★☆☆☆☆ | ★★★★☆ |
我的建议:对于安全等级要求高的产品(如汽车、金融终端),优先选硬件信任根。对于成本敏感、安全等级一般的产品(如智能家居传感器),软件信任根也够用。关键是要清楚自己的威胁模型。
好了,信任根的内容就聊到这里。下一章我们聊聊信任链的构建——有了根,怎么把信任传递下去。