安全启动
安全启动是电脑行业成员开发的一种安全标准,用于帮助确保设备仅使用受原始设备制造商 (OEM) 信任的软件进行启动。 当电脑启动时,固件会检查每个启动软件片段的签名,包括 UEFI 固件驱动程序(也称为选项 ROM)、EFI 应用程序和操作系统。 如果签名有效,则电脑将会启动,而固件会将控制权转递给操作系统。
OEM 可以使用固件制造商提供的指令创建安全启动密钥,并将其存储在电脑固件中。 添加 UEFI 驱动程序时,还需要确保这些驱动程序已签名并包含在安全启动数据库中。
有关安全引导进程的工作原理的信息,请参阅保护 Windows 10 启动进程。
安全启动的要求
若要支持安全启动,必须提供以下各项。
硬件要求 | 详细信息 |
---|---|
UEFI 版本 2.3.1 勘误表 C 变量 | 必须将变量设置为 SecureBoot=1 和 SetupMode=0,并使用所需的签名数据库 (EFI_IMAGE_SECURITY_DATABASE)(包括有效 KEK 数据库中设置的 PK)来启动安全预配的计算机。 有关详细信息,请在下载的 Windows 硬件兼容性计划规范和策略 PDF 文件中搜索“System.Fundamentals.Firmware.UEFISecureBoot 系统要求”。 |
UEFI v2.3.1 第 27 部分 | 平台必须公开一个符合 UEFI v2.3.1 第 27 部分所述配置文件的接口。 |
UEFI 签名数据库 | 平台必须在 UEFI 签名数据库 (db) 中预配正确的密钥,使 Windows 能够启动。 平台还必须支持在经过身份验证的情况下对数据库进行安全更新。 安全变量的存储必须与正在运行的操作系统相互隔离,以防在不经受检测的情况下修改这些变量。 |
固件签名 | 必须至少使用 RSA-2048 和 SHA-256 加密算法为所有固件组件签名。 |
启动管理器 | 打开电源时,系统必须开始执行固件中的代码,并根据算法策略使用公钥加密法来验证启动顺序中所有映像的签名,直到验证了 Windows 启动管理器为止。 |
回滚保护 | 系统必须防止固件回滚到旧版本。 |
EFI_HASH_PROTOCOL | 平台提供 EFI_HASH_PROTOCOL(符合 UEFI v2.3.1 规范)用于卸除加密哈希运算负载,并提供 EFI_RNG_PROTOCOL(由 Microsoft 定义)用于访问平台熵。 |
签名数据库和密钥
在部署电脑之前,OEM 需在该电脑上存储安全启动数据库。 这包括签名数据库 (db)、吊销的签名数据库 (dbx) 和密钥注册密钥数据库 (KEK)。 在制造时,这些数据库存储在固件的非易失性 RAM (NV-RAM) 中。
签名数据库 (db) 和吊销的签名数据库 (dbx) 将列出 UEFI 应用程序、操作系统加载程序(例如 Microsoft 操作系统加载程序或启动管理器)以及可在设备上加载的 UEFI 驱动程序的签名者或映像哈希。 吊销的列表包含不再受信任且不可加载的项。 如果映像哈希位于这两个数据库中,则吊销的签名数据库 (dbx) 优先。
密钥注册密钥数据库 (KEK) 是单独的签名密钥数据库,可用于更新签名数据库和吊销的签名数据库。 Microsoft 要求在 KEK 数据库中包含指定的密钥,以便 Microsoft 将来可向签名数据库添加新的操作系统,或者向吊销的签名数据库添加已知错误的映像。
添加这些数据库并完成最终的固件验证和测试后,OEM 将锁定固件以避免对其进行编辑(但使用正确密钥进行签名的更新,或者由使用固件菜单的实际用户所做的更新除外),然后生成平台密钥 (PK)。 PK 可用于对 KEK 的更新进行签名或关闭安全启动。
如需相关的工具或者在创建这些数据库时需要帮助,请与固件制造商联系。
启动顺序
- 打开电脑后,将会根据平台密钥检查每个签名数据库。
- 如果固件不受信任,则 UEFI 固件必须启动 OEM 特定的恢复过程,以还原受信任的固件。
- 如果 Windows 启动管理器出现问题,固件将尝试启动 Windows 启动管理器的备份副本。 如果此措施仍然失败,则固件必须启动 OEM 特定的补救过程。
- 在 Windows 启动管理器开始运行后,如果驱动程序或 NTOS 内核出现问题,则会加载 Windows 恢复环境 (Windows RE),以便能够恢复这些驱动程序或内核映像。
- Windows 加载反恶意软件。
- Windows 加载其他内核驱动程序并初始化用户模式进程。