如何在 TPM 中加载和使用持久对称密钥?

Posted

技术标签:

【中文标题】如何在 TPM 中加载和使用持久对称密钥?【英文标题】:How to load and use a persistent symmetric key in the TPM? 【发布时间】:2020-04-16 12:30:28 【问题描述】:

我只是想在 TPM 的 NV 存储中永久存储一个 32 字节长的对称密钥,并在重启后使用它(不将其从 TPM 中取出)来加密小型数据。

我尝试了两种不同的方式:

1)

使用 TPM 的随机字节生成器创建密钥 在 NV 中定义空间并将密钥写入其中 问题:我知道如何阅读它,但如何加载它以便在 TPM 中使用它?

2)

使用 TPM2_Create 命令创建 AES 密钥 使用 TPM2_EvictControl 命令使其持久化 通过相同的电源循环,我有了它的手柄,我可以加载它并使用它 问题:和之前类似,下次开机后如何加载使用?

我扫描了TCG's Specs,我什至阅读了这个free practical guide to TPM2.0,并没有找到任何关于我的问题的线索。

我错过了什么?

【问题讨论】:

【参考方案1】:

TPM2_EncryptDecrypt 旨在与对称密钥一起使用。将您使用TPM2_EvictControl 获得的密钥句柄作为@keyHandle 参数传递,并适当设置decrypt 参数。将mode 设置为TPM_ALG_NUL,以便使用默认模式。

请记住,使用 TPM 加密大量数据(对称密钥通常用于)是不切实际的。

【讨论】:

当我在同一次运行中执行此操作时,它可以工作,在下一次电源循环时,我只需要 NV 存储地址和额外的(如果添加)(用户身份验证、策略等)我正确吗?跨度> 不,如果您的驱逐控制成功,您只需通过其句柄使用密钥。如果您将一个策略附加到密钥,则需要满足一项策略,并在需要时提供身份验证。 好的,比如我只有auth:用TPM_HANDLEpersistentHandle = TPM_HANDLE::PersistentHandle(addr)创建句柄,然后用persistentHandle.SetAuth(password)设置auth,然后使用句柄? PS。我使用微软 tss。 什么是addr?不应该涉及任何地址...使句柄像这里一样持久:github.com/microsoft/TSS.MSR/blob/… 我的意思是句柄偏移,我的错。感谢您的帮助

以上是关于如何在 TPM 中加载和使用持久对称密钥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TPM 1.2 中存储密钥

Reactjs - 如何在 reactjs 材料表中加载和映射数据

如何在 r 中加载和合并多个 .csv 文件?

如何在 Spring Boot 中加载和遍历属性文件

我如何在RESTlet中加载和编辑客户资料?

如何在 Spark Scala 作业中加载和写入属性文件?