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