您好,我正在尝试加密辅助数据磁盘。我希望在我的计算机启动期间解密此磁盘。我目前已设置 RAID,顶部有一个 LVM 卷,该卷已使用 LUKS 加密。
我已经执行了这样的命令:sudo clevis luks bind -d /dev/RaidVG/LVMVol tpm2 '{"pcr_ids":"15", "pcr_bank":"sha256"}'
现在据我了解,我正在将一个密钥槽绑定到我的 LUKS 标头,该标头绑定到 PCR 库 15 上的 TPM2.0 模块。现在这似乎有效了,但我不明白的是当我执行“tpm2_pcrread”时会发生什么。它说我的 pcr“值”仍然为 0:
$ sudo tpm2_pcrread
sha1:
sha256:
0 : 0xREDACTED
1 : 0xREDACTED
2 : 0xREDACTED
3 : 0xREDACTED
4 : 0xREDACTED
5 : 0xREDACTED
6 : 0xREDACTED
7 : 0xREDACTED
8 : 0x0000000000000000000000000000000000000000000000000000000000000000
9 : 0x0000000000000000000000000000000000000000000000000000000000000000
10: 0x0000000000000000000000000000000000000000000000000000000000000000
11: 0x0000000000000000000000000000000000000000000000000000000000000000
12: 0x0000000000000000000000000000000000000000000000000000000000000000
13: 0x0000000000000000000000000000000000000000000000000000000000000000
14: 0x0000000000000000000000000000000000000000000000000000000000000000
15: 0x0000000000000000000000000000000000000000000000000000000000000000
16: 0x0000000000000000000000000000000000000000000000000000000000000000
17: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
18: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
19: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
20: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
21: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
22: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
23: 0x0000000000000000000000000000000000000000000000000000000000000000
sha384:
sha512:
这些 PCR 值到底是什么意思?我在网上找不到答案。我对 PCR 库进行任何操作后,这些值不应该改变吗?
另一件奇怪的事情是,当我按照本教程加密一个简单的 hello world 文件时(https://www.fit-pc.com/wiki/index.php?title=Linux:_Full_Disk_Encryption),我得到了完全相同的加密输出“eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI”。现在,他们不显示他们得到的全部输出,只显示第一行。这是因为我设置了一些默认密钥吗?还是这是某种通用标头?我的 TPM 模块是虚拟化的,所以这也可能是一个问题。
我希望有人可以进一步解释一下这实际上是如何工作的以及如何安全地设置我的加密方案。
答案1
现在据我了解,我正在将一个密钥槽绑定到我的 LUKS 标头,该标头绑定到 PCR 库 15 上的 TPM2.0 模块。现在这似乎有效了,但我不明白的是当我执行“tpm2_pcrread”时会发生什么。它说我的 pcr“值”仍然为 0:
将数据绑定到 PCR 不应该改变 PCR——它使用 TPM 以使用当前的PCR 值。通常,这意味着您应该选择一个 PCR,其值具有有用的意义(例如,Windows BitLocker 使用 PCR 7,它保留当前的安全启动状态)。使用全零的 PCR 仍然会将加密数据(即 LUKS 密钥槽)绑定到 TPM 本身,但不会阻止任何人启动实时 CD 并仅要求 TPM 为他们解封数据。
这些 PCR 值到底是什么意思?我在网上找不到答案。
每个 PCR 对应一个哈希链由 TPM 事件日志中的事件生成。每次记录事件时,都会更新相应的 PCR(或“扩展”,因为更新过程pcr = hash(pcr + new_event)
与 Git 提交的工作方式非常相似)。
基本事件记录在 TCG 规范中;tpm2_eventlog
可以显示当前启动期间记录的内容。例如,PCR 4 将包含在启动过程中启动的每个 .efi 可执行文件的精确哈希值。(实际上,所有默认 PCR 都以某种方式与启动过程相关。)大多数事件由固件记录,但有些由引导加载程序记录;操作系统可以记录,但通常不会。
换句话说,检查 PCR 是否包含预期值只是验证事件日志是否按预期顺序包含预期事件的捷径。
例如,BitLocker 使用 PCR7 或 PCR4 密封密钥槽(或“保护器”),以确保仅在启动实际的 Windows 安装时才可以自动解锁(即尊重用户帐户安全而不是实时 CD 的系统)。
在我对 PCR 库进行任何操作后,这些值不应该改变吗?
不会;这些值不会仅仅通过读取而改变。
“密封”操作要求 TPM 加密提供的数据并附加策略“仅当 PCR 15 与此值匹配时才解密”。它不会改变 PCR 本身。密封的数据将返回操作系统(存储在文件中或 LUKS 令牌中等)。
另一件奇怪的事情是,当我按照本教程加密一个简单的 hello world 文件时(https://www.fit-pc.com/wiki/index.php?title=Linux:_Full_Disk_Encryption),我得到了完全相同的加密输出“eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI”。
这是一些 Base64 编码的数据。解码后你会发现它包含一个固定的标头:
$ echo eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI | base64 -d
{"alg":"dir","clevis":{"pin":"tpm2","tpm2":{"hash":"sha2