我正在尝试了解安全启动和 x86 机器的 ROM 固件中的关键要求
我来自这个安全启动的定义:
出售的 PC 的 ROM 固件中嵌入了某些证书。该 ROM 固件只有在使用其中一个证书验证签名后才会运行 UEFI 应用程序。
有了这个定义,我的问题是:
- x86/x64 PC 之间的安全启动实现是否不同?
- 在一台 PC 上运行的操作系统映像无法在另一台 PC 上安全启动
- 所有固件 ROM 上是否有一组预定义的证书?
答案1
x86/x64 PC 之间的安全启动实现是否不同?
确实如此,就像其他固件一样。一些制造商的固件可能具有共同的传统(使用 Tianocore 开源实现作为基础),但在每个制造商将其调整到自己的系统后,它们的工作原理不太可能完全相同。
理论上,诸如签名验证之类的基本操作在任何地方都应该以相同的方式运行(忽略规范中的错误和歧义)。但是,用户界面差别很大(某些实现具有广泛的 UI 来手动自定义证书列表,其他实现具有方便的预设“Windows”和“非 Windows”模板来控制 SB 和 CSM,而其他实现只有最低限度。)限制也不同,有时受硬件影响,例如证书总数db
或撤销哈希值dbx
可能不一样。
要求也各不相同。例如,在 ARM 设备上,微软真的希望除了 Windows 之外什么都不允许——没有第三方操作系统。而在 x86 设备上,默认允许它们和甚至需要固件允许用户通过物理访问完全自定义证书列表。
所有固件 ROM 上是否有一组预定义的证书?
实际上,安全启动“开箱即用”的要求是由微软设定的。这是他们的指南。
一般情况下,只有一稳定的安全启动 CA(制造商必须包括如果他们想通过微软的任何产品认证),该认证被标记为“Microsoft Windows Production PCA 2011”,专门用于签署微软Windows启动文件。
微软提供的另一个 CA 是“Microsoft Corporation UEFI CA 2011”,这是微软用来签署各种第三者软件,例如某些 Linux 发行版的启动文件(包括 Shim 和 Preloader),以及嵌入硬件的 Option ROM。此 CA 虽然非常广泛可用,但仍然只是“OEM 应该考虑包含”的东西。
如果我理解正确的话,它通常包含在 UEFI 环境中使外部 GPU 或 NIC 工作(即前操作系统启动时,系统会自动检查 CA 是否正确登录。但是,有些计算机专门在固件设置中提供了禁用此 CA 的选项,这样可以避免安全风险(例如,有缺陷的 Linux GRUB 版本)或使系统符合 Windows 10 Device Guard 的要求。
这就是“预定义”列表的结束。
一些计算机可能还包括制造商自己的 CA(比如 HP,大概是为了让他们的恢复/管理工具正常工作),或者 Canonical Ltd. 的 CA(用于 Ubuntu Linux),但这些都不是通用的。