使用带有众所周知的 SRK/所有者密码的 TPM?

信息安全 linux 卢克斯 tpm
2021-08-17 00:01:05

首先,我将大致解释一下我打算如何使用 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 所有者密码。

我的问题是:

  1. 可以使用20 字节 0的众所周知的密码作为 owner/SRK 密码吗?tpm-luks可以选择使用那些众所周知的密码来执行这些操作,以便它们可以是非交互的。由于系统被锁定,我假设没有人能够利用这个?
  2. 如果没有,将密码保存在加密的根分区上是否可行?系统在根分区被解密时是受信任的,因此在那里存储密码应该是安全的(并安全地访问它)?
  3. 如果需要执行此类操作,将密码保存在其他安全位置并将其发送到机器会更好吗?不确定它是否比上面的第二个选项更安全。
  4. 是否有其他更好的解决方案来实现上述目标(TPM NVRAM 密钥的非交互式存储)?
1个回答

可以使用 20 字节 0 的众所周知的密码作为 owner/SRK 密码吗?tpm-luks 可以选择使用那些众所周知的密码来执行这些操作,以便它们可以是非交互的。由于系统被锁定,我假设没有人能够利用这个?

如果您将所有者和密码保留为默认值或众所周知的值,您将打开绕过整个安全启动过程的大门。这在现场的嵌入式系统中更令人担忧,这些系统旨在防篡改(在这种情况下,篡改会导致它们无法操作或陷入功能受限的故障安全模式)。

如果您使用众所周知的所有者/密码,任何有经验或知识的人都可以更改底层操作系统映像/硬件配置、更新 TPM PCR 值并仍然访问文件系统密钥,从而绕过您正在实施的任何安全/完整性措施。

如果没有,将密码保存在加密的根分区上是否可行?系统在根分区被解密时是受信任的,因此在那里存储密码应该是安全的(并安全地访问它)?

当然,我可以看到这个工作,但是,一旦系统启动并被认为是“受信任的”,你仍然容易受到有人拿起密钥,然后允许他们从系统中删除驱动器并解密它。所以,当然,将它存储在那里是安全的......虽然它是加密的,但启动后它是一个风险。(这最终可能导致在“受信任的系统”上安装后门)

如果需要执行此类操作,将密码保存在其他安全位置并将其发送到机器会更好吗?不确定它是否比上面的第二个选项更安全。

TPM 实际上是您存储密钥的最佳场所。

是否有其他更好的解决方案来实现上述目标(TPM NVRAM 密钥的非交互式存储)?

当然。听起来您正在为一个单一的工具问题寻找复杂的解决方案:您的工具不允许您自动化所有权/设置密码。

我可能会检查裤子代码仓库,构建它并对其进行健全性测试,然后修改 tpm_takeownership 工具以添加非交互式所有者/密码提示选项,然后在升级过程中使用该自定义二进制文件。