有关如何在电脑上的 TPM 2.0 设备上切换 PCR 库的步骤,应联系 OEM 或 UEFI 供应商。 本文提供有关在 TPM 2.0 设备上切换 PCR 库时发生的情况的背景。
平台配置寄存器 (PCR) 是 TPM 中具有一些唯一属性的内存位置。 可以存储在 PCR 中的值的大小由关联的哈希算法生成的摘要的大小决定。 SHA-1 PCR 可以存储 20 个字节 - SHA-1 摘要的大小。 与同一哈希算法关联的多个 PCR 称为 PCR 库。
若要在 PCR 中存储新值,请使用新值扩展现有值,如下所示: PCR[N] = HASHalg( PCR[N] || ArgumentOfExtend)
现有值与 TPM 扩展作的参数连接。 然后,生成的串联用作关联哈希算法的输入,该算法计算输入摘要。 计算摘要将成为 PCR 的新值。
TCG PC 客户端平台 TPM 配置文件规范定义了至少包含一个具有 24 个寄存器的 PCR 库。 重置前 16 个 PCR 的唯一方法是重置 TPM 本身。 此限制有助于确保只能通过 TPM 扩展作修改这些 PCR 的值。
某些 TPM PCR 用作日志事件的校验和。 日志事件在发生时在 TPM 中扩展。 稍后,审核员可以通过计算日志中的预期 PCR 值并将其与 TPM 的 PCR 值进行比较来验证日志。 由于无法任意修改前 16 个 TPM PCR,因此,该范围内的预期 PCR 值与实际 TPM PCR 值之间的匹配可确保未修改的对数。
Windows 如何使用 PCR?
若要将基于 TPM 的密钥的使用绑定到设备的某个状态,可将密钥密封为预期的一组 PCR 值。 例如,在加载 OS 时,启动过程后,PCR 0 到 7 具有定义完善的值。 当计算机的硬件、固件或启动加载程序发生更改时,可以在 PCR 值中检测到更改。 Windows 使用此功能使某些加密密钥仅在启动过程中的特定时间可用。 例如,BitLocker 密钥可以在启动时的某个点使用,但不能在启动之前或之后使用。
请务必注意,此与 PCR 值的绑定还包括用于 PCR 的哈希算法。 例如,如果使用 SHA-256 PCR 库,密钥可以绑定到 的特定值 SHA-1 PCR[12]
,即使使用相同的系统配置也是如此。 否则,PCR 值将不匹配。
切换 PCR 库时会发生什么情况?
切换 PCR 库时,用于计算在扩展作期间存储在 PCR 中的哈希值的算法将发生更改。 每个哈希算法为相同的输入返回不同的加密签名。
因此,如果切换了当前使用的 PCR 库,则绑定到以前的 PCR 值的所有键将不再工作。 例如,如果有一个密钥绑定到 PCR[12] 的 SHA-1 值,后来将 PCR 库更改为 SHA-256,则这些库将不匹配,并且你将无法使用该密钥。 BitLocker 密钥使用 PCR 库进行保护,如果启用 BitLocker 时切换了 PCR 库,则 Windows 无法将其解封。
当 BitLocker 已处于活动状态时,我该如何切换 PCR?
在切换 PCR 库之前,应暂停或禁用 BitLocker 或准备好恢复密钥。 有关如何在电脑上切换 PCR 库的步骤,请联系 OEM 或 UEFI 供应商。
如何确定正在使用哪个 PCR 库?
可以将 TPM 配置为激活多个 PCR 库。 当 BIOS 执行测量时,它会在所有活动 PCR 库中执行此作,具体取决于其进行这些测量的能力。 BIOS 可以选择停用它不支持的 PCR 库,或者通过扩展分隔符来 限制 它不支持的 PCR 库。 以下注册表值标识哪些 PCR 库处于活动状态:
- 注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\IntegrityServices
- DWORD:
TPMActivePCRBanks
- 定义当前处于活动状态的 PCR 库。 此值应解释为位图,其位在修订版 1.27 的 TCG 算法注册表 表 21 中定义。
Windows 检查 BIOS 处于活动状态并支持的 PCR 库。 Windows 还会检查测量的启动日志是否支持所有活动 PCR 库的测量。 Windows 倾向于使用 SHA-256 库进行测量,如果不符合其中一个先决条件,则回退到 SHA1 PCR 库。
可以通过查看注册表来确定 Windows 当前使用的 PCR 库:
- 注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\IntegrityServices
- DWORD:
TPMDigestAlgID
- Windows 当前使用的 PCR 库的算法 ID。 此值表示修订 1.27 的 TCG 算法注册表 表 3 中定义的算法标识符。
Windows 仅使用一个 PCR 库来继续启动测量。 所有其他活动 PCR 库都使用分隔符进行扩展,以指示 Windows 不使用它们,并且不应信任看似来自 Windows 的度量值。