第4章 信任根与安全启动:核心概念、原理机制、实战要点

4.1 问题背景

芯片上电后的第一段代码决定了后续所有软件运行环境的可信性。如果攻击者能够篡改或替换引导镜像,上层安全机制——即使加密、隔离做得再完善——都可能被绕过。安全启动要解决的正是“系统从第一条指令开始,如何逐级建立可信状态”的问题。

典型攻击场景:

  • 固件替换:将Bootloader或OS镜像替换为带后门的版本;
  • 版本回滚:把安全补丁版本回退到存在已知漏洞的旧版本;
  • 调试口劫持:在启动早期通过JTAG/SWD或调试串口接管CPU控制权。

4.2 核心概念

信任根是芯片内物理上不可篡改、逻辑上最先被信任的安全基点。没有信任根,安全启动的验证链条就没有可靠起点。

  • Boot ROM:复位后执行的首段固化代码,通常由芯片厂写入ROM,不可在线修改。
  • OTP/熔丝:一次性可编程存储区,用于固化根公钥哈希、安全使能位与版本号。
  • PUF:基于物理随机特性生成设备唯一密钥,防止芯片被物理克隆。
信任根与安全启动:信任链逐级验证 信任根 硬件锚点 Boot ROM 不可变代码 Bootloader 验签加载 OS内核 完整性度量 应用/服务 隔离执行 逐级签名校验,信任从硬件锚点向外传递

4.3 原理机制

安全启动的密码学基础是“签名的逐级验证”。在每一级跳转之前,当前可信代码必须使用已知公钥校验下一级镜像的签名,通过后才能加载执行。签名算法应至少使用RSA-2048或ECDSA-P256,哈希算法使用SHA-256及以上。

  1. 公钥固化:芯片出厂时将根公钥的哈希写入OTP,Boot ROM在启动时读取该哈希并与镜像携带的证书进行比对。
  2. 逐级签名:Bootloader镜像由根私钥签名,内核镜像由设备密钥签名;每一级都验证下一级完整镜像的哈希和签名。
  3. 版本防回滚:OTP中维护单调递增版本号,任何低于当前版本的镜像都被拒绝加载。
  4. 运行时强化:安全启动只保证加载阶段可信,加载完成后的运行期通常还需要配合ASLR、PAC或MPU/MMU等机制防御后续攻击。

4.4 流程步骤

典型的安全启动处理流程(以Linux/ARM嵌入式系统为例):

1. CPU复位 → 取指地址映射到Boot ROM
2. Boot ROM检查OTP状态:
   - SecureBoot_Enable = 1?
   - Debug_Disable = 1?
3. Boot ROM从eMMC/NOR Flash加载Bootloader
4. Boot ROM使用OTP根公钥哈希验证Bootloader签名证书
5. 校验通过 → 跳转Bootloader
6. Bootloader加载内核镜像
7. Bootloader使用SPK/KBK验证内核签名及DTS签名
8. 校验通过 → 进入内核
9. 内核挂载根