3. BootROM概述

BootROM 是芯片上电后执行的第一段不可修改的固件,通常固化在芯片内部的只读存储器或一次性可编程存储区中。它不依赖外部 Flash、DDR 或操作系统,是整条信任链的绝对起点。理解 BootROM,不能只把它当作“一段启动代码”,而应从功能定位、硬件实现、启动流程和安全职责四个维度建立系统认知。

一、功能定位:信任根与启动调度器

BootROM 在系统中承担两个核心角色。第一,它是信任根(Root of Trust, RoT):后续所有固件、引导程序、操作系统的可信性,最终都追溯到 BootROM 中固化的验证逻辑和内置公钥。第二,它是启动调度器:负责在多种启动介质之间选择、加载并移交控制权。

从信任链视角看,BootROM 的定位可以用“先验证、后执行、再移交”来概括。它自身不可被篡改,因此其代码逻辑和内置密钥成为整个平台可信的锚点。任何试图绕过 BootROM 验证直接运行外部镜像的行为,都会导致信任链断裂。

核心结论:BootROM 的可信性不来自“它运行得早”,而来自“它不可修改且验证逻辑固化”。一旦 BootROM 被替换或密钥泄露,整条信任链的根基即失效。

二、硬件实现:ROM、SRAM 与安全引擎

BootROM 的硬件实现通常包含以下组成部分:

  • ROM 存储区:存放固化代码和内置公钥/证书,出厂后不可写,部分芯片支持一次性熔丝编程。
  • 片上 SRAM:作为启动阶段的临时运行内存,因为此时 DDR 尚未初始化。
  • 安全引擎:包括 SHA、AES、RSA/ECC 等硬件加速器,用于镜像哈希、签名验证和解密。
  • 启动介质控制器:如 SPI、eMMC、SD、UART、USB 等接口控制器,用于读取外部镜像。
  • 熔丝/OTP 区:存储安全启动使能位、密钥哈希、生命周期状态等不可逆配置。

这些硬件模块协同工作,使 BootROM 能在极短时间内完成介质探测、镜像读取、完整性校验和跳转。下图展示了 BootROM 在芯片内部的典型硬件结构与数据流向。

BootROM 硬件结构与数据流 BootROM 存储区 固化启动代码 内置公钥 / 证书 不可写 · 不可改 片上 SRAM 启动阶段临时内存 存放待验证镜像 DDR 未初始化时使用 安全引擎 SHA / AES 哈希解密 RSA / ECC 签名验证 硬件加速 · 防侧信道 熔丝 / OTP 区 安全启动使能位 密钥哈希 · 生命周期 启动介质控制器 SPI / eMMC / SD UART / USB 下载模式 外部启动镜像 Bootloader / SPL 含签名与证书链 加载 校验 配置读取 读取镜像 传输 启动数据流:上电 → ROM 执行 → 介质探测 → 镜像读取 → SRAM 暂存 → 安全引擎校验 → 通过则跳转 校验失败则进入恢复模式或停机,绝不执行未通过验证的镜像 整个过程中,BootROM 代码与内置公钥始终不可被外部修改

三、启动流程:从上电到移交控制权

BootROM 的启动流程通常分为以下几个阶段:

  1. 上电复位:CPU 从固定地址取指,该地址映射到 BootROM 存储区。
  2. 硬件初始化:配置时钟、看门狗、基本引脚复用,读取熔丝/OTP 中的启动配置。
  3. 启动介质探测:根据熔丝配置或引脚采样,依次尝试 SPI、eMMC、SD、UART 等介质。
  4. 镜像读取:从选定介质读取头部信息,解析镜像长度、加载地址和签名信息。
  5. 完整性校验:计算镜像哈希,与签名解密后的哈希比对;若启用加密,先解密再校验。
  6. 控制权移交:校验通过后,跳转到镜像入口地址,由下一级 Bootloader 继续启动。

以下是一段典型的 BootROM 启动日志片段,展示了介质探测和校验过程:

BootROM v2.3.1 (ROM)
[0.000] Power-on reset, CPU @ 24MHz
[0.012] OTP read: secure_boot=1, boot_media=SPI
[0.035] Probing SPI flash... JEDEC ID: 0xEF4018
[0.058] Reading image header @ 0x000000
[0.072] Image size: 0x1A000, load addr: 0x20000000
[0.095] SHA-256 hash computed: 3f2a...c81d
[0.120] RSA-2048 verify: PASS (key index 0)
[0.135] Jump to 0x20000000

从日志可见,BootROM 在 135 毫秒内完成了从复位到移交的全过程。这个时间窗口极短,意味着攻击者若想通过物理手段干预,必须在极早期完成,而安全引擎和 OTP 的硬件保护正是针对这一窗口设计的。

四、安全职责:信任链的第一道闸门

BootROM 的安全职责可归纳为以下清单:

安全职责 实现机制 失败后果
镜像完整性校验 SHA-256 哈希 + RSA/ECC 签名验证 篡改镜像被执行,系统被植入恶意代码
镜像机密性保护 AES 解密后再校验,密钥由 OTP 派生 固件被提取逆向,泄露敏感算法或密钥
启动介质锁定 熔丝配置仅允许指定介质启动 攻击者通过 UART/USB 注入恶意镜像
防回滚保护 OTP 中记录最低版本号,拒绝旧版本镜像 攻击者利用已知漏洞的旧固件降级攻击
生命周期管理 OTP 状态位控制调试接口开放/关闭 量产设备调试口未关,可被物理读取密钥

常见误区:很多团队认为“启用了安全启动就安全了”,却忽略了 OTP 中密钥哈希未烧录、调试接口未关闭、回滚保护未启用等配置问题。BootROM 的安全能力依赖正确的熔丝配置,配置错误会使安全启动形同虚设。

五、案例与复盘:一次启动失败的分析

某量产设备在产线测试中出现约 3% 的启动失败,日志停在签名验证阶段:

[0.120] RSA-2048 verify: FAIL (key index 0)
[0.121] Secure boot failure, halt.

排查发现,BootROM 内置公钥哈希与 OTP 中烧录的密钥哈希不一致。原因是产线在烧录 OTP 时使用了旧版密钥,而镜像签名使用了新版密钥。BootROM 在验证时,先用 OTP 中的哈希校验内置公钥,发现不匹配后直接拒绝继续。这一案例说明:BootROM 的安全职责不仅是验证镜像,还包括验证自身内置公钥的可信性。密钥哈希与 OTP 的绑定关系,是信任链中极易被忽视的一环。

复盘结论:在信任链工程中,BootROM 是唯一不可更新的环节,因此其内置公钥、OTP 配置和熔丝状态必须在量产前完成一致性校验。任何密钥轮换、版本升级,都需要同步更新 OTP 和镜像签名,否则将导致批量启动失败。

工程建议:在产线增加“BootROM 公钥哈希与 OTP 一致性”检查工位,并在研发阶段使用熔丝模拟器验证不同配置组合下的启动行为,避免量产阶段出现不可逆的配置错误。