我的设置
我有一台 ThinkPad P1 Gen 3 笔记本电脑,想让它双启动 Linux 和 Windows 10。为此,我想使用一个同时支持 Linux 和 Windows 的启动管理器;目前我使用的是 rEFInd。我还想启用安全启动并使用 BitLocker 加密我的 Windows 驱动器。
问题:BitLocker无法工作
问题是我无法使用 BitLocker 加密我的驱动器。当我使用 rEFInd 启动 Windows 时,BitLocker 不起作用。我发现它被禁用了,因为无法进行 PCR7 绑定 - 在系统信息它说:
PCR7 配置: 无法绑定
设备加密支持: 自动设备加密失败的原因:不支持 PCR7 绑定;检测到不允许的 DMA 总线/设备
所有这些似乎都与可信平台模块(TPM)有某种关系,但我仍在阅读有关这个主题的更多信息,这对我来说很新。
另一方面,当我直接从 UEFI 条目启动 Windows 时,省略 rEFInd,PCR7 绑定是可能的,并且 BitLocker 可以正常工作。
我测试了其他支持 Linux 的启动管理器,例如 systemd-boot,问题是一样的。所以这个问题并不是 rEFInd 独有的,而是任何非 UEFI 直接运行的 Windows 启动管理器都会出现的问题。
问题
为什么从其他启动管理器启动 Windows 时无法进行 PCR7 绑定?我该如何修复?
答案1
为什么从其他启动管理器启动 Windows 时无法进行 PCR7 绑定?
PCR7 是记录所有安全启动参数的寄存器 - PK/KEK/db 的完整内容,以及用于验证每个启动应用程序(即 rEFInd、Bootmgfw、Winload.efi)的特定证书。
BitLocker 似乎有一个故意限制它将仅有的如果其值表明整个引导链仅使用 Microsoft 的“Windows Production PCA”证书进行签名,则绑定到 PCR7。如果沿途某些内容(例如 rEFInd 或其他第三方引导加载程序)使用其他证书进行签名,则它会拒绝,即使该其他证书受您的 UEFI 配置信任。
这很可能是为了在双启动环境中隔离操作系统,例如防止某人通过 Shim 简单地重新启动到任意不安全的 Linux 并以此方式访问您的 Windows 文件。
(注意:BitLocker 的 PCR7 使用不会阻止您在 PK、KEK 或 db 中安装自定义证书 - 可以为 Linux 目的使用自定义密钥的安全启动设置,只要这些自定义 db 条目不参与 Windows 启动过程。)
当然,如果安全启动已关闭且 rEFInd 根本没有签名,那么 PCR7 根本没有有用的信息,也无法使用。
我该如何修复它?
如果您正在使用“设备加密”功能(Windows 10 家庭版/专业版),则无法避免这种情况 - 此精简版 BitLocker 始终需要安全启动和 TPM PCR7 的使用。
如果您使用的是完整版 BitLocker(仅限 Windows 10 Pro),所有这些都不会阻止 BitLocker 使用 TPM——它仍然可以使用绑定到 PCR0/2/4/11 的替代方法(PCR4 是包含启动文件精确哈希值的寄存器)。问题是 PCR0/2/4 的使用稍微脆弱一些,并且往往会导致更频繁地提示恢复密钥。例如,每次更新 Shim 或 rEFInd 时,PCR4 值都会发生变化,您将需要恢复密钥。
最后,TPM 的使用不是实际上对于 BitLocker 来说是强制性的。如果它导致太多问题,有一个组策略设置和一个manage-bde
命令,允许您改用基于密码的基本保护程序。(同样,这仅适用于 Windows Pro 中的完整 BitLocker。)
(注意:如果您在 PCR7 绑定处于活动状态的情况下启用 BitLocker,然后通过 rEFInd 重新启动,这样 PCR7 现在不可用,系统将提示您输入恢复密钥,并且 BitLocker 将自动重新绑定到 PCR0/2/4/11。反之亦然,从 UEFI 菜单直接重新启动到 Windows 将导致 BitLocker 在输入恢复密钥后尝试重新绑定到 PCR7。)
我的建议:始终使用固件提供的 UEFI 启动菜单来选择操作系统。如果它不好看或不方便,则通过efibootmgr --boot-next
或使用“BootNext”功能bcdedit.exe /bootsequence
直接启动到请求的操作系统。(例如,这甚至允许您将“Linux”作为 Windows 桌面快捷方式。)
我认为 BitLocker 不仅限于加密整个磁盘。
“软件加密”模式下的 BitLocker 永远不会加密整个磁盘 - 它加密 Windows分割,就像人们使用 LUKS 加密他们的 Linux 分区一样。
所有其他分区不受影响。特别是,由于 UEFI 固件通常没有内置 BitLocker 支持,“EFI 系统分区”有保持未加密状态。
可以使用两个 UEFI 分区吗?
是的,但是 1) 你不需要,2) 它不会真正帮助你。使用两个分区和将 Windows 和 Linux 启动文件放在同一个分区中没有区别——只有文件本身才重要。
答案2
我有一台双启动笔记本电脑,带安全启动的 UEFI、带 LUKS 的 Ubuntu 和带 Bitlocker 的 Windows 10 Pro。我的安装的缺点是我不使用 TPM 模块,必须输入密码才能解锁 Bitlocker。我不记得确切的步骤了,我相信我遵循了不使用 Bitlocker 的双启动的标准程序,然后启用了 Bitlocker。我不知道 PCR7 绑定是什么。我使用 Grub2 作为启动管理器。
编辑:刚记得我遵循了本指南:Mike Kasberg - 如何使用加密实现 Ubuntu 20.04 和 Windows 10 双启动
答案3
我遇到了同样的问题,并链接到 Arch Linux 论坛上的 @u1686_grawity 的回答。它很好地解释了这种情况,因此我能够找到解决这个问题的方法,至少对于 Windows 11 Pro 来说是这样。
我目前有一个双启动的 Arch Linux/Windows 11 系统,使用 rEFInd,启用了安全启动并且 BitLocker 正常工作,以及用于我的 Arch 安装的 LVM on LUKS 加密。
诀窍是强制 BitLocker 将自身与安全启动分离,并限制其对 TPM 的使用,禁止 BitLocker 使用 PCR 7 或任何被 rEFInd 或其他操作系统更改的 PCR。
我不会否认在削弱 Windows 检测系统篡改能力方面存在潜在的安全隐患,而且我可能不会在公司环境中使用这种方法,但对于我的家庭系统来说,这已经足够好了™。
首先,您必须先完全禁用 BitLocker,然后通过 Windows 清除 TPM。然后打开组策略编辑器 (gpedit.msc) 并导航至计算机配置 -> 管理模板 -> Windows 组件 -> BitLocker 驱动器加密 -> 操作系统驱动器
- 禁用策略“允许安全启动进行完整性验证”。
- 启用策略“为本机 UEFI 固件配置 TPM 平台验证配置文件”
- 取消勾选除 11:BitLocker 访问控制之外的所有 PCR。
您可能希望仔细查看其中的一些以使其保持启用状态,例如前两个检查固件的功能(警告:如果您在更新之前没有先暂停它,固件升级将触发 BitLocker 恢复模式)。不过,我可以根据个人经验告诉您,4 和 7 都必须禁用。
关闭组策略编辑器,重新启动,即使通过不同的引导加载程序(例如 rEFInd)进行链式加载,BitLocker 也应该可以正常工作。
我知道这个答案有点晚了,考虑到它是很久以前问的,但我希望它能帮助到别人。我花了一周时间自己弄清楚这一切,并在新硬件上安装了这两个操作系统。干杯!