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 固件);
- 二级引导程序验证内核、设备树与根文件系统;
- 内核验证内核模块、系统应用或容器镜像。
信任链的关键在于“验证发生在跳转之前”。如果先跳转再验证,攻击者可以在验证前劫持执行流。因此,代码中必须保证验证函数返回成功后才执行下一级入口。
三、数字签名与哈希校验:验证的两个动作
哈希校验解决“数据有没有被改动”,数字签名解决“数据是不是由可信方发布的”。两者通常配合使用:先对镜像计算哈希,再用公钥验证签名,最后比对哈希值。
| 机制 | 作用 | 典型算法 | 量产关注点 |
|---|---|---|---|
| 哈希校验 | 检测镜像是否被篡改 | 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 可改写,信任根就不成立。
- 误区三:签名后重新打包镜像。任何后处理都会改变哈希,导致验证失败。量产打包必须在签名前完成。
- 误区四:忽略安全版本号。没有版本号回滚保护,攻击者可以刷入旧版有漏洞但签名合法的镜像。
掌握信任根、信任链、数字签名、哈希校验、PKI 与启动阶段划分之后,后续的量产密钥配置、镜像签名、OTP 烧录和故障排查才有稳定的分析框架。Secure Boot 不是一次性的功能开关,而是一条需要从密钥生成到产线烧录全程保持一致的安全流水线。