2. Secure Boot基础概念

Secure Boot 的本质,是在设备上电到操作系统接管之间,建立一条“每一级只信任上一级”的验证路径。它并不是单一功能,而是由信任根、信任链、数字签名、哈希校验、公钥基础设施(PKI)以及启动阶段划分共同构成的完整体系。理解这些概念之间的依赖关系,是后续量产配置与调试的基础。

一、信任根:不可变的起点

信任根(Root of Trust, RoT)是整个安全启动的锚点。它必须满足三个条件:代码或密钥在制造阶段固化、运行时不可被软件修改、其行为可被外部验证。常见实现包括芯片内部的 BootROM、一次性可编程(OTP)熔丝区、硬件安全模块(HSM)或只读的信任根公钥哈希。

信任根通常保存的是“公钥的哈希”而非公钥本身,这样可以避免公钥被替换。设备上电后,BootROM 首先读取该哈希,用它验证第一级引导程序的公钥,从而决定是否继续启动。如果信任根本身可被改写,整条信任链就失去意义。

信任根不是“最大的密钥”,而是“最小的、不可变的验证起点”。它只负责验证下一级,不负责业务逻辑。

二、信任链:逐级传递的验证关系

信任链(Chain of Trust)描述的是从信任根到最终系统的逐级验证过程。每一级在将控制权交给下一级之前,必须先验证下一级的完整性与真实性。典型链路如下:

  • BootROM 验证一级引导程序(如 BL1、SPL、Primary Bootloader);
  • 一级引导程序验证二级引导程序(如 U-Boot、BL2、UEFI 固件);
  • 二级引导程序验证内核、设备树与根文件系统;
  • 内核验证内核模块、系统应用或容器镜像。

信任链的关键在于“验证发生在跳转之前”。如果先跳转再验证,攻击者可以在验证前劫持执行流。因此,代码中必须保证验证函数返回成功后才执行下一级入口。

信任链与启动阶段划分 阶段 0:信任根 阶段 1:一级引导 阶段 2:二级引导 阶段 3:内核/系统 BootROM / OTP 哈希 BL1 / SPL U-Boot / BL2 / UEFI Kernel + DTB + RootFS 用 OTP 中的公钥哈希验证 BL1 公钥 用 BL1 公钥验证 BL2 签名与哈希 用 BL2 公钥验证内核与 DTB 签名 内核验证模块/应用,进入用户态 控制权传递 控制权传递 控制权传递

三、数字签名与哈希校验:验证的两个动作

哈希校验解决“数据有没有被改动”,数字签名解决“数据是不是由可信方发布的”。两者通常配合使用:先对镜像计算哈希,再用公钥验证签名,最后比对哈希值。

机制 作用 典型算法 量产关注点
哈希校验 检测镜像是否被篡改 SHA-256、SHA-384 哈希长度、是否截断、是否覆盖全部镜像
数字签名 证明镜像来源可信 RSA-2048/3072、ECDSA P-256 密钥长度、签名格式、是否支持多密钥
PKI 管理密钥与证书的信任关系 X.509、密钥库、CRL 根密钥保护、证书链、吊销与轮换

在量产环境中,签名通常由离线签名服务器或 HSM 完成,私钥不进入产线。产线只烧录公钥哈希或公钥证书,并对镜像做签名验证。这样即使产线被入侵,攻击者也无法伪造合法镜像。

四、公钥基础设施:密钥如何被信任

PKI 在 Secure Boot 中负责回答“这个公钥为什么可信”。常见做法是将根公钥哈希烧入 OTP,再由根公钥签发二级公钥证书。设备启动时,BootROM 用 OTP 中的哈希验证根公钥,再用根公钥验证二级公钥,最后用二级公钥验证镜像签名。

量产中常见的 PKI 配置包括:

  • 根密钥离线保存,仅用于签发二级密钥;
  • 二级密钥按产品线或批次划分,便于吊销和轮换;
  • 证书中绑定设备型号、安全版本号和安全启动使能标志;
  • 使用 CRL 或 OCSP 处理密钥吊销,但嵌入式设备通常采用版本号回滚保护。
不要把私钥放在代码仓库、产线脚本或普通服务器上。私钥一旦泄露,整条信任链都可以被伪造,且无法通过软件更新修复。

五、启动阶段划分与调试切入点

不同芯片的启动阶段命名不同,但逻辑划分基本一致。以典型 ARM 平台为例:

阶段 0:BootROM
  - 读取 OTP 中的根公钥哈希
  - 验证 BL1 签名
  - 失败则进入恢复模式或停止启动

阶段 1:BL1 / SPL
  - 初始化 DDR、时钟、存储
  - 验证 BL2 签名与哈希
  - 记录启动日志到 SRAM

阶段 2:BL2 / U-Boot / UEFI
  - 加载内核、设备树、根文件系统
  - 验证镜像签名
  - 传递启动参数

阶段 3:Kernel + RootFS
  - 验证内核模块
  - 启动 init 与用户态服务
  - 进入正常业务

调试时,最有效的切入点是串口日志和启动阶段标记。如果设备在阶段 0 停止,通常说明 OTP 哈希与 BL1 公钥不匹配;如果停在阶段 1,常见原因是 BL2 签名格式错误或哈希覆盖范围不一致;如果停在阶段 2,则要检查内核镜像是否被重新打包、设备树是否被修改。

六、常见误区与复盘

  • 误区一:只做哈希不做签名。哈希只能防篡改,不能防替换。攻击者可以同时替换镜像和哈希。
  • 误区二:信任根可更新。如果 OTP 未锁死或 BootROM 可改写,信任根就不成立。
  • 误区三:签名后重新打包镜像。任何后处理都会改变哈希,导致验证失败。量产打包必须在签名前完成。
  • 误区四:忽略安全版本号。没有版本号回滚保护,攻击者可以刷入旧版有漏洞但签名合法的镜像。
调试 Secure Boot 时,先确认“哪一级验证失败”,再检查“公钥、哈希、签名、镜像范围”四个要素是否一致。大多数问题不是算法错误,而是配置与打包流程不一致。

掌握信任根、信任链、数字签名、哈希校验、PKI 与启动阶段划分之后,后续的量产密钥配置、镜像签名、OTP 烧录和故障排查才有稳定的分析框架。Secure Boot 不是一次性的功能开关,而是一条需要从密钥生成到产线烧录全程保持一致的安全流水线。