3. Boot Guard与硬件信任根

Intel Boot Guard 是 Intel 平台在 UEFI 固件之前建立的第一道硬件级信任锚。它把信任根从可被替换的固件 Flash 芯片,下沉到 CPU 内部一次性可编程(OTP)的熔断区(Field Programmable Fuses,FPF)。理解 Boot Guard,关键要抓住三件事:密钥如何被"烧死"在芯片里、ACM 如何用这些密钥验证固件、以及 OEM 如何通过策略配置决定"验不过时怎么办"。

一、硬件信任根:为什么是熔断而不是 Flash

传统启动链中,CPU 复位后从 Flash 的固定地址取第一条指令,这段代码本身没有任何密码学校验,攻击者只要改写 Flash 就能植入持久化恶意代码。Boot Guard 的思路是:在 CPU 内部预置一段由 Intel 签名、不可修改的微码——认证代码模块(Authenticated Code Module,ACM),由它作为"根",去验证 Flash 中的初始启动块(Initial Boot Block,IBB)。

信任的起点是熔断区中的几组关键 FPF:

  • Boot Guard 使能熔断:标记平台是否启用 Boot Guard,以及采用哪种模式(Verified Boot 或 Measured Boot)。
  • OEM 公钥哈希熔断:存放 OEM 签名公钥的 SHA-256 哈希(通常 32 字节),是整条链的信任锚。
  • Profile 与策略熔断:决定失败时的行为(关机、降级或仅记录)。

熔断的本质是"一次性、不可逆"。一旦 OEM 公钥哈希被烧入,CPU 在后续每次启动时都会用这个哈希去比对 ACM 中携带的公钥。如果攻击者替换了 Flash 中的公钥,哈希对不上,验证直接失败。这就是"密钥熔断"作为硬件信任根的核心价值——它把信任从可写介质转移到了物理不可逆的硅片状态。

熔断不可逆:量产前必须确认 OEM 公钥哈希、Boot Guard 模式与策略配置全部正确。一旦烧错,整批主板只能报废或更换 CPU,无法通过固件更新修复。

二、ACM 验证流程:从复位向量到 IBB

上电复位后,CPU 首先执行的是 Intel 微码中的 ACM。ACM 内部携带了 Intel 的签名和 OEM 公钥(或其哈希),验证流程大致如下:

  1. CPU 从 Flash 读取 Boot Guard 相关 FPF,确认使能状态与模式。
  2. ACM 计算自身携带的 OEM 公钥哈希,与 FPF 中烧入的哈希比对。不一致则立即终止启动。
  3. ACM 读取 Flash 中的 IBB(通常包含 UEFI SEC/PEI 阶段代码),计算其哈希。
  4. 用 OEM 公钥验证 IBB 的 RSA/ECDSA 签名,确认代码未被篡改。
  5. 验证通过后,ACM 将控制权交给 IBB;失败则按策略熔断配置执行关机或降级。

这里有一个容易混淆的点:ACM 验证的是 IBB 的签名,而不是整个 Flash。IBB 之后的 PEI、DXE、BDS 阶段由 UEFI 自身的信任链(如 PEI 验证 DXE、DXE 验证驱动)继续保障。Boot Guard 只负责"第一跳",但这一跳决定了后续所有代码是否可信。

Boot Guard 硬件信任根与 ACM 验证链 CPU 内部(不可修改) Intel ACM 微码 Intel 签名 · 携带 OEM 公钥 FPF 熔断区(OTP) OEM 公钥哈希 SHA-256 Boot Guard 使能 · 策略位 SPI Flash(可写介质) IBB 初始启动块 SEC / PEI 早期代码 + 签名 后续固件阶段 DXE / BDS / OS Loader 由 UEFI 信任链继续验证 ACM 验证流程 ① 读取 FPF 使能 / 模式 / 策略 ② 公钥哈希比对 ACM 公钥 vs FPF ③ 验证 IBB 签名 RSA / ECDSA ④ 移交控制权 进入 IBB 验证失败 → 按策略熔断执行 关机 / 降级 / 仅记录(依 Profile 配置) 读取 IBB

三、OEM 公钥哈希与启动策略配置

OEM 在量产阶段需要完成两项关键配置:把公钥哈希烧入 FPF,以及选择启动策略。这两者共同决定了平台的信任行为。

公钥哈希的生成与烧录。OEM 首先生成一对签名密钥(通常 RSA-2048 或 ECDSA P-256),私钥保存在 HSM 中用于签名 IBB,公钥则用于计算哈希。哈希算法固定为 SHA-256,计算对象是公钥的 DER 编码。示例流程如下:

# 1. 生成 OEM 签名密钥对(示例)
openssl genrsa -out oem_priv.pem 2048
openssl rsa -in oem_priv.pem -pubout -out oem_pub.pem

# 2. 计算公钥 DER 编码的 SHA-256 哈希
openssl rsa -in oem_priv.pem -pubout -outform DER -out oem_pub.der
sha256sum oem_pub.der
# 输出示例:a3f1c9...(32 字节,即烧入 FPF 的值)

# 3. 用私钥对 IBB 签名
openssl dgst -sha256 -sign oem_priv.pem -out ibb.sig ibb.bin

烧录通常通过 Intel 提供的 FIT(Firmware Interface Table)工具或主板厂商的产线工具完成。烧录后必须回读校验,确认 FPF 中的哈希与预期一致。

启动策略配置。Boot Guard 提供两种主要模式:

模式行为适用场景
Verified Boot验证失败则强制关机,不进入固件高安全要求设备,如支付终端、服务器
Measured Boot不阻断启动,但将度量值记入 TPM PCR需要远程证明、审计的场景

此外还有"失败策略"配置:验证失败时是立即关机、降级到无 Boot Guard 模式,还是仅记录事件。降级模式会削弱安全性,一般只在调试阶段使用。量产设备应配置为强制关机。

策略配置与公钥哈希通常在同一次熔断操作中完成。建议在烧录前用 FIT 工具生成配置文件,并在实验室样机上完整验证一次"正确签名通过、篡改签名失败"两条路径,再进入量产。

四、验证与排障要点

判断 Boot Guard 是否生效,可以从几个角度观察:启动日志中是否出现 ACM 相关条目;用 Intel 提供的工具读取 FPF 状态,确认使能位与哈希值;故意篡改 IBB 的一个字节,观察平台是否按策略拒绝启动。如果篡改后仍能正常启动,说明 Boot Guard 未真正使能或策略被配置为降级,需要立即排查。

常见问题包括:公钥哈希烧录错误导致所有设备无法启动;签名算法与 FPF 配置不匹配;IBB 范围定义过小,导致部分早期代码未被覆盖。这些都需要在产线配置阶段通过回读和样机验证来提前发现。

Boot Guard 把信任根牢牢钉在 CPU 的熔断区里,ACM 用这个根去验证第一段固件,OEM 则通过公钥哈希和策略配置决定整条链的起点是否可信。三者缺一不可:没有熔断,信任可被替换;没有 ACM,验证无从执行;没有正确的策略,验证通过与否都无法转化为实际的安全行为。