首先,我将大致解释一下我打算如何使用 TPM:
我正在使用一种名为的东西tpm-luks,它将密钥存储在 TPM NVRAM 中并将密钥添加到 LUKS 密钥槽之一。然后 initramfs 使用从 TPM 获得的密钥解密根 LUKS 加密分区。我还使用tpm-luks密封密钥,以便仅当 TPM PCR 寄存器处于给定状态时(例如,在加载了预先确定的引导加载程序、initramfs、linux 等之后),才从 TPM NVRAM 释放密钥。TrustedGRUB[2] 用作引导加载程序,以便它将自己的哈希记录到 TPM PCR。
我还计划不时对系统进行远程、无人值守的升级(例如更新内核,这也会改变内核文件的哈希值等)。为了解决这个问题,tpm-luks提供了一种在重新启动机器之前预先计算哈希并使用新值重新封装密钥的方法,以便可以使用新的 PCR 状态再次解锁密钥。
当前,此过程要求我在每次进行升级并想要添加新密钥时输入 TPM 所有者密码。
我的问题是:
- 可以使用20 字节 0的众所周知的密码作为 owner/SRK 密码吗?
tpm-luks可以选择使用那些众所周知的密码来执行这些操作,以便它们可以是非交互的。由于系统被锁定,我假设没有人能够利用这个? - 如果没有,将密码保存在加密的根分区上是否可行?系统在根分区被解密时是受信任的,因此在那里存储密码应该是安全的(并安全地访问它)?
- 如果需要执行此类操作,将密码保存在其他安全位置并将其发送到机器会更好吗?不确定它是否比上面的第二个选项更安全。
- 是否有其他更好的解决方案来实现上述目标(TPM NVRAM 密钥的非交互式存储)?