信任根与安全启动:芯片的第一道防线
说实话,做了这么多年硬件安全,我越来越觉得信任根这东西就像芯片的「出生证明」。没有它,后面所有的安全机制都是空中楼阁。今天咱们就聊聊这个最基础、也最关键的话题。
信任根(RoT)到底是什么?
信任根,英文叫 Root of Trust,简称 RoT。说白了,它就是系统中一个绝对可信的起点。这个起点必须是硬件实现的,不能被篡改的。
我习惯把 RoT 比作「锚」。一艘船不管怎么漂,锚点不动,船就安全。芯片也一样——所有安全决策最终都要追溯到某个不可更改的硬件单元。
信任根的核心属性:
- 不可篡改性——物理上无法改写
- 唯一性——每颗芯片的 RoT 都不同
- 隔离性——普通软件无法访问
- 持久性——掉电不丢失
你想想看,如果攻击者能改掉信任根,那整个安全体系就崩了。所以 RoT 通常放在一次性可编程(OTP)存储器里,或者用熔丝实现。写进去就锁死,谁也别想动。
安全启动链:一级验证一级
有了信任根,接下来就是怎么用它来验证整个系统。这就是安全启动链要做的事。
安全启动链的核心理念很简单:逐级验证,层层信任。就像接力赛,每一棒都要确认下一棒是合法的。
这个流程里,BootROM 是硬件固化的,它里面存着信任根的根密钥。芯片上电后,BootROM 先验证一级 Bootloader 的签名。通过了,一级 Bootloader 再去验证二级 Bootloader。以此类推,直到操作系统和应用程序。
我的经验:有一次做 IoT 芯片,客户说启动太慢。查了半天发现是签名验证算法选得太重。后来换成 ECDSA,速度提了 3 倍。选算法时一定要权衡安全性和性能。
密钥存储与保护:别把钥匙挂在门上
密钥存储是信任根里最头疼的部分。我见过太多设计,密钥存得跟闹着玩似的。
密钥存储的几个层次:
| 存储位置 | 安全等级 | 典型用途 | 风险点 |
|---|---|---|---|
| OTP 熔丝 | 最高 | 根密钥、芯片身份 | 容量小,一次性写入 |
| eFuse | 高 | 设备密钥、配置 | 编程电压高,有物理攻击风险 |
| 安全 SRAM | 中高 | 会话密钥、临时密钥 | 掉电丢失,需电池备份 |
| Flash 加密区 | 中 | 固件密钥、证书 | 易被读擦,需配合加密引擎 |
我个人习惯把根密钥放在 OTP 里,然后用它来加密派生密钥。这样即使攻击者拿到芯片,也只能看到加密后的密钥 blob,真正的密钥在 OTP 里出不来。
密钥生命周期管理
密钥不是存进去就完事了。它有自己的生命周期:
- 生成——必须在芯片内部真随机数发生器(TRNG)产生,不能从外部导入
- 分发——产线烧录时要用安全通道,我见过有人用 JTAG 明文传密钥,当场裂开
- 使用——密钥只在硬件安全模块(HSM)内部使用,软件永远拿不到明文
- 更新——支持密钥轮换,但不能影响正在运行的系统
- 销毁——芯片报废时,密钥必须物理销毁,不能残留
我曾经踩过的坑:有一款芯片产线烧录密钥时,测试脚本把密钥写进了日志文件。结果这批芯片还没出厂,密钥就已经泄露了。后来我们加了产线审计,所有密钥操作必须双人复核。
物理攻击与防护
密钥存好了,还得防着别人物理拆解。常见的物理攻击手段:
- 探针攻击——用微探针直接读总线上的密钥
- 侧信道攻击——通过功耗、电磁辐射分析密钥
- 故障注入——用激光或电压毛刺让芯片出错,泄露信息
- 反向工程——逐层打磨芯片,拍照分析电路
对应的防护措施:
- 总线加密,密钥传输全程密文
- 加掩码逻辑,让功耗曲线随机化
- 电压/频率/温度检测,异常时自动擦除密钥
- 顶层金属网格,探测到开盖就触发自毁
嗯,这里要注意——防护措施不是越多越好。每加一层防护,芯片面积和功耗就涨一截。你得根据产品的威胁模型来取舍。消费级芯片和军用芯片的防护等级肯定不一样。
安全启动的验证流程
最后,咱们把整个流程串起来看一遍:
上电复位
↓
BootROM 执行(硬件固化)
↓
读取 OTP 中的根公钥
↓
验证一级 Bootloader 签名 ← 失败 → 进入安全错误状态
↓ 成功
一级 Bootloader 执行
↓
验证二级 Bootloader 签名 ← 失败 → 进入恢复模式
↓ 成功
二级 Bootloader 执行
↓
验证 OS 内核签名 ← 失败 → 停止启动
↓ 成功
OS 启动,加载安全应用
↓
应用运行时,HSM 提供密钥服务
这个流程看起来简单,但每个环节都有坑。比如 BootROM 的代码必须极其精简,因为它是只读的,一旦流片就不能改。我见过一个项目,BootROM 里有个 bug,导致整个芯片无法安全启动,最后只能重新流片,损失几百万。
建议:BootROM 的代码一定要做形式化验证。光靠测试用例覆盖不全。我团队现在所有 RoT 相关的代码都跑过形式化验证工具,虽然慢,但值得。
信任根和安全启动,说白了就是给芯片装一个「防伪标签」和「验货流程」。没有它,你的芯片就是个裸奔的。有了它,至少攻击者得花点功夫才能撬开你的门。