不久前,我从零开始组装了一台 PC,在了解了 UEFI 安全启动和 Microsoft 的 Bitlocker 的推荐要求后,我在主板上安装了 Infineon TPM。我的理解是,TPM 应该是一个独立于软件的信任源,可以安全地存储加密密钥(可能还有证书?)。我对“公钥认证思想”有基本的了解,我并不是想在这里寻找对加密技术的解释,但我想知道当 UEFI 系统要求我“初始化出厂默认密钥”时指的是什么?我这样做了,这样做似乎已经满足了安全启动的要求,但是:
- 这些出厂默认密钥是 TPM 制造商创建的吗?
- 我不应该生成自己的密钥吗?2b. 如果我使用这些出厂默认密钥初始化 Bitlocker,是否意味着我正在使用英飞凌(TPM 制造商)私钥?
- 在研究这个问题的过程中,我找到了几个针对各种 Linux 发行版的安全启动/TPM 指南,但我能找到的唯一针对 Windows 的指南这是,其 A) 似乎是针对 OEM PC 制造商而设计的,且 B) 它更多的是一个概念指南,而不是关于如何正确设置 TPM 以进行安全启动和 Bitlocker 加密的解释。
编辑:
TPM 和主板支持 TPM2.0 规格
tpmtool getdeviceinformation 命令的输出:
-TPM Present: True
-TPM Version: 2.0
-TPM Manufacturer ID: IFX
-TPM Manufacturer Full Name: Infineon
-TPM Manufacturer Version: 5.63.3353.0
-PPI Version: 1.3
-Is Initialized: True
-Ready For Storage: True
-Ready For Attestation: True
-Is Capable For Attestation: True
-Clear Needed To Recover: False
-Clear Possible: True
-TPM Has Vulnerable Firmware: False
-PCR7 Binding State: 0
-Maintenance Task Complete: True
-TPM Spec Version: 1.16
-TPM Errata Date: Wednesday, September 21, 2016
-PC Client Version: 1.00
-Is Locked Out: False
答案1
听起来你不是初始化 BitLocker – 这些密钥仅用于安全启动,即 PK/KEK/db/dbx 变量。默认设置将安全启动配置为仅允许由 Microsoft 签名的操作系统(和有时由 Canonical Ltd. 开发),以及由 PC 制造商签名的驱动程序。
安全启动变量仅存储公共证书,不存储私钥,并且不用于加密任何数据(仅用于验证签名)。一些固件可能将它们存储在 TPM 提供的 NVRAM 中以满足规范中的“防篡改”要求,但除此之外,这些密钥与 TPM 无关。
我不应该生成自己的密钥吗?2b. 如果我使用这些出厂默认密钥初始化 Bitlocker,是否意味着我正在使用英飞凌(TPM 制造商)私钥?
TPM 2.0 将“用户生成”和“出厂默认”视为两个独立的世界(又名密钥层次结构)——它不是两者之间的切换开关,而是每个都有不同的用途:
“所有者”根密钥用于加密其他密钥(包括密封 BitLocker 卷密钥)。它是总是当用户执行“取得所有权”步骤时,会生成新的密钥。Windows 在启动时会自动执行此步骤 (
Is Initialized: True
),如果您清除 TPM,则 Windows 将再次生成新密钥。“所有者”根密钥上的某些操作受密码保护(例如,Windows 会生成一个随机密码并将其丢弃)。因此,初始化所有者层次结构留给操作系统 - 如果不知道密码,固件只能清除它。
“Endorsement”根密钥用于签名證明证书(即,证明真正的正版 Infineon TPM 正在执行操作)。它是出厂设置的,本质上是只读的。BitLocker 不使用此密钥。
固件本身也有一个“平台”层次结构。您的固件可能使用它来存储 TPM 的 NVRAM 中的安全启动变量。我相信 HP 笔记本电脑也以这种方式存储固件“设置”密码。
如果你被给予选择在“自定义”和“出厂默认”键之间,则它很可能用于安全启动,而不是用于 TPM。
(您应该生成自己的安全启动密钥吗?可能不需要。这样做不会为 BitLocker 或通常启动 Windows 时提供额外的安全性。但它对于在 Linux 上实现类似 BitLocker 的系统很有用。)