可以在 TPM 之外创建 TPM“存储密钥”吗?

信息安全 密码学 密钥管理 密钥生成 tpm 可信计算
2021-08-23 14:32:25

我对将预先存在的密钥“添加”到 TPM 的存储层次结构感兴趣。

所需密钥层次结构的示例可以显示为:

(SRK)----->(User Storage Key)-------> User Working Key 1
                             |
                             |------> User Working Key 2
                             |
                             |------> User Working Key 3

在哪里:

  • SRK是 TPM 管理员创建和管理的存储根密钥
  • 用户存储密钥创建为 TPM 外部的(公共、私有)密钥对。例如,通过使用 OpenSSL 命令行工具。
  • 用户工作密钥也是使用 OpenSSL 在 TPM 之外创建的。

如何在上述层次结构中插入“用户存储密钥”和“用户工作密钥”?

TPM 允许我在 TPM 内部创建(公钥、私钥)密钥对(并导出公钥及其(封装形式的)私钥)。但我不清楚 TPM 命令是否喜欢TPM_CreateWrapKeyTPM_LoadKey2允许此选项。

这在用户的签名/加密密钥已经在其他地方创建并且我们有兴趣使用 TPM 作为操作平台上的安全密钥存储库的情况下得到保证。(绑定/密封在 TPM 中创建不透明数据在这里没有用,因为绑定/密封数据无法扩展密钥层次结构)。

2个回答

我不会认为这是一个好主意。TPM 只能为在 TPM 中创建的密钥提供“信任”。否则,谁知道密钥在添加到 TPM 之前发生了什么?如果私钥曾经存在于 TPM 之外,则所有赌注都将失败。

在 TPM 规范中,SRS 密钥是一个公私密钥对,私有密钥保存在 TPM 内部,公共段可用于包装工作密钥。SRS 密钥在 TPM 之外的所有事务中用作 EK 密钥的代理,只有公共段在其外部使用。

这就是文档中的内容。现在,供应商如何实现它是另一回事,TPM 实现是如此复杂,我把它留给供应商来整合和自动化。但是,它确实有助于提高整体安全性,因为它是默默无闻的。

https://lwn.net/Articles/768419/

我不知道 TPM 所有者是否可以直接更改包装工作密钥的存储密钥或自动完成。可以说,创建“工作密钥”将密钥包装在 TPM 控制下的存储密钥中。