BMC/BIOS 安全启动(Secure Boot)底层逻辑与启停流程

我们正在打算在X20主板 BMC上启用 Secure Boot。由于这块细节不太了解,无法自行梳理完整启动链,现重点请教以下三点。
声明:我对底层细节的理解较为浅薄,可能有误,请大佬们指正与补充。

1) 可信根与签名链如何设计(BMC 与 BIOS 各自)

  • 分层与验签深度:层级与验签点(如:BootROM → BL1/BL2 → U-Boot → Kernel → RootFS/应用;以及 BIOS 侧链路)。
  • 公钥/哈希的存放与写入顺序:OTP/eFuse/ROM/受保护分区等位置的推荐做法与实际烧写顺序。

2) 如何开启 / 关闭 / 恢复(SOP 级别步骤)

  • 开启:烧写 Root/公钥哈希 → 使能验签 → 关闭/封装调试口→ 写保护。
  • 关闭/解锁(开发/RMA):是否存在受控的临时绕过或恢复模式入口?适用条件与风险提示。
  • 验证已启用的判据:推荐的日志/寄存器/工具检查点与常见错误码定位方法。

3) BMC 与 BIOS 的根证书是否必须一致

  • 同根 vs 不同根的安全边界;若不同根,如何做跨链互证/相互授权。

1、可信根与签名链如何设计 – 这块当前openUBMC已经有现成机制流程并在security sig中讨论

2、 如何开启、关闭安全启动 — 通过导入伙伴的可信根启动,关闭需要返厂维修

3、BMC与BIOS根证书是一致的

那按如上以及社区博客等等收集的资料,我理解是伙伴侧若需将包转换为华为包,仅能在软件层面的可信根上进行切换;而eFuse 层的根公钥哈希不可更改,若要调整则必须通过返修处理。也就是说,一旦设备已发布,就无法将华为包直接转化为伙伴包,以及伙伴包再转华为包或者其他伙伴包,除非在底层关闭安全启动机制。
另外,关于 BIOS 侧的根公钥;是不是目前给伙伴的都是不带根的吗,如果让伙伴自行导入,这块有教程吗?

荷兰 NSCIB收录的华为Security Target of Huawei iBMC这个文档是可参考的吧

通过文档理解出来是这样:

硬件信任根(RoT)= eFuse(不可变凭据)+ ROM(BootROM);BootROM 上电后负责加载并校验第一包固件。这些以及其中的凭据共同构成 RoT,用于启动与更新的完整性校验。

  1. 安全启动(FPT_ROTSB):除第一包外,每个固件包在执行前都要验签(参照 RoT 或前一已验证阶段的可信数据),启动过程离线/不交互;失败有后备镜像维护模式
  2. 原子顺序(ROTSB.2)先完整性、再版本号;任一失败即终止并走失败处置;极早期失败可能无法写日志
  3. 防回滚(FPT_ARB):版本校验在完整性通过之后做;参考版本值存 OTP首个包只从 ROM 读;若低于参考值则进入安全态。
  4. 受控更新(FPT_ROTSU)写盘前对更新包做数字签名完整性验证;校验包内公钥(比对或哈希比对);不覆盖原镜像;失败保留旧版;首启成功才替换,并跑自检;全程密码学操作只在 TOE 内不依赖外部服务/协处理器
  5. 算法指派:启动/更新验签 RSA-2048;公钥哈希 SHA-512

nscib-cc-0461863-st2.0.pdf (995.3 KB)

如果说理论上真要去改,可以通过算法方式,在 RoT 的 eFuse 里多烧一个公钥哈希,再配合算法来实现。但这还得看 eFuse 阵列大小够不够
不过实际操作上,这么干在 安全性上风险很大,违背了ROT使用efuse的初衷

也就是说安全启动目前是后续装备出厂后,就不能再动了。

此问题已解决。sig 组会议得到具体回复,可以查看录像
https://www.openubmc.cn/video/sig-security/985398813/2025-09-19
https://www.openubmc.cn/video/sig-security/967599100/2025-09-18