3、信任根(Root of Trust):什么是信任根、为何需要、常见实现方式(如OTP、eFuse、ROM代码)
在嵌入式设备的安全启动(Secure Boot)体系中,信任根(Root of Trust,RoT)是整个安全链路的起点和基石。如果把Secure Boot比作一座大厦,那么信任根就是这座大厦的地基——地基不牢,大厦越高越危险。本章将深入剖析信任根的本质、必要性以及三种主流实现方式(OTP、eFuse、ROM代码),帮助你在实际项目中做出正确的信任根选型与部署决策。
3.1 核心原理:信任根的本质与安全锚点
信任根(Root of Trust)是指在一个安全系统中,被无条件信任、无需外部验证即可作为安全基准的硬件、固件或数据实体。在嵌入式Secure Boot场景中,信任根通常由芯片内部的不可变代码(BootROM)和不可变数据(OTP/eFuse中存储的根公钥或根密钥)共同构成。其核心思想是:信任必须有一个起点,而这个起点本身必须是可信的、不可伪造的、不可篡改的。
从密码学角度看,信任根解决的是"先有鸡还是先有蛋"的悖论。如果所有代码都需要被验证,那么第一段执行的代码由谁来验证?答案就是信任根——它不需要被验证,因为它被物理地固化在芯片内部,攻击者无法修改。信任根通常承担以下职责:
- 存储安全关键参数:包括根公钥(RSA/ECC公钥)、根密钥哈希、安全配置位(如是否强制启动校验)、版本号等。
- 执行首次验证动作:BootROM上电后,从固定地址读取下一级引导程序(如Bootloader),使用信任根中存储的公钥验证其签名。
- 建立信任链:验证通过后,将控制权移交给下一级,同时传递安全上下文(如已解锁的外设、安全配置),形成逐级验证的信任链。
信任根的设计必须满足三个关键属性:不可篡改性(物理上无法修改)、不可绕过性(系统启动路径必须经过信任根)、可验证性(信任根的公钥可以被外部工具验证,确保设备身份真实)。
3.2 判断方法与选型:如何确定你的设备需要哪种信任根
在实际项目中,选择信任根实现方式需要综合考虑安全等级、成本、开发周期和供应链因素。以下是判断流程和选型建议:
- 第一步:评估安全需求等级。如果产品涉及金融支付、车联网、医疗设备等高安全场景,必须使用硬件级信任根(OTP/eFuse + BootROM);如果是消费类IoT设备,可考虑使用eFuse方案;如果只是内部工具或原型验证,可暂时使用软件模拟信任根,但量产前必须升级。
- 第二步:确认芯片支持能力。查阅芯片手册,确认是否集成BootROM、是否有OTP/eFuse区域、是否支持安全启动(Secure Boot)硬件加速。主流MCU/SoC(如STM32MP1、i.MX8、NXP LPC55xx、ESP32等)均内置了完整的信任根方案。
- 第三步:确定密钥存储策略。根公钥通常以哈希形式存储在OTP/eFuse中(节省空间且防提取);根私钥则保存在安全的生产环境中(HSM或离线电脑),永不进入设备。
- 第四步:规划密钥生命周期。包括密钥生成、注入、备份、吊销、轮换策略。eFuse支持多次烧写,可实现在线升级密钥;OTP一旦烧写不可更改,需在出厂前确定最终密钥。
| 对比维度 | OTP(一次性可编程) | eFuse(电子熔丝) | ROM代码(BootROM) |
|---|---|---|---|
| 可写性 | 出厂后不可写 | 可多次烧写,可锁定 | 不可写(掩膜固化) |
| 存储容量 | 小(几KB~几十KB) | 中等(几KB~几百KB) | 代码区(几十KB~几百KB) |
| 典型用途 | 根公钥哈希、安全配置位 | 密钥、版本号、配置、安全策略 | 启动代码、验证逻辑、安全监控 |
| 抗物理攻击 | 较高(熔丝状态难探测) | 中等(可通过电子显微镜分析) | 高(掩膜难以逆向) |
| 灵活性 | 低(一次性决定) | 高(支持密钥轮换) | 极低(出厂后无法修改) |
| 成本 | 低 | 中 | 高(需芯片流片时固化) |
3.3 案例拆解:基于eFuse的Secure Boot信任根部署实战
下面通过一个具体的工业网关项目案例,展示信任根的实际部署过程。该案例基于NXP i.MX8M Plus处理器,该芯片内置BootROM和eFuse安全子系统。
项目背景与约束:某工业设备厂商需要为边缘计算网关实现Secure Boot,要求:① 防止固件被篡改后运行;② 支持远程固件升级(需密钥轮换能力);③ 满足IEC 62443工业安全标准;④ 量产规模5万台,成本敏感。
初始现象与目标:早期产品无安全启动机制,曾发生固件被篡改导致设备被植入挖矿程序的事件。目标是通过信任根机制,确保只有经过签名的固件才能运行。
关键输入数据:
- 芯片:i.MX8M Plus,内置4KB eFuse区域,支持SRK(Super Root Key)哈希存储
- 密钥算法:RSA-2048,SHA-256哈希
- BootROM支持:从eFuse读取SRK哈希,验证Bootloader签名
实施步骤:
- 密钥生成:在离线HSM中生成RSA-2048根密钥对,私钥保存在HSM中,公钥导出。
- 计算SRK哈希:对根公钥进行SHA-256哈希,得到32字节的SRK_HASH。
- 烧写eFuse:在产线上通过JTAG或专用工具,将SRK_HASH写入eFuse的SRK区域,并设置安全启动使能位(SEC_CONFIG[1])。
- 签名Bootloader:使用根私钥对U-Boot二进制进行签名,生成签名文件。
- 验证启动流程:上电后BootROM读取eFuse中的SRK_HASH,从Boot设备加载Bootloader签名文件,使用SRK_HASH对应的公钥验证签名,验证通过后跳转执行。
- 密钥轮换准备:eFuse支持追加烧写,预留了SRK_HASH[1]区域,用于未来根密钥轮换。
结果对比:部署后,任何未签名的固件或篡改过的Bootloader都无法通过验证,设备启动失败并进入恢复模式。安全事件清零,且通过了IEC 62443认证审核。
风险与代价:eFuse烧写是一次性操作,如果烧写错误(如SRK_HASH错误),设备将变砖。因此产线烧写必须增加校验步骤,且需要准备备用芯片。另外,eFuse区域有限,需合理规划密钥和配置位的使用。
复盘经验:① 信任根部署必须与产线流程紧密结合,烧写工具需要防呆设计;② 密钥管理是信任根安全性的关键,私钥必须存储在HSM中;③ 建议在eFuse中预留安全版本号区域,用于防回滚攻击。
3.4 常见误区与总结复盘
在信任根的设计与部署中,工程师常犯以下错误,需要特别注意:
- 误区一:信任根等同于加密芯片。信任根是安全体系的一部分,而非独立组件。即使有独立安全芯片(如TPM),仍需在SoC内部建立信任根,否则安全芯片与主处理器之间的通信可能被劫持。
- 误区二:OTP和eFuse可以互相替代。两者在可写性、容量、抗攻击能力上差异显著。OTP适合一次性写入的固定信息,eFuse适合需要更新的场景。选错会导致后期无法升级密钥。
- 误区三:信任根只需要保护Bootloader。信任根是整个信任链的起点,后续的每个引导阶段(Bootloader→内核→文件系统→应用)都需要逐级验证。如果只保护Bootloader,攻击者可以篡改内核或文件系统。
- 误区四:信任根可以完全防止物理攻击。信任根能防软件攻击和大部分物理攻击,但高级攻击者仍可通过探针、电子显微镜等手段提取eFuse内容。高安全场景需配合主动屏蔽层、传感器等防护措施。
- 误区五:信任根部署后无需维护。密钥轮换、版本管理、证书吊销等都需要持续维护。eFuse虽然支持多次烧写,但次数有限,需合理规划。