如何在 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 中加载和使用持久对称密钥?的主要内容,如果未能解决你的问题,请参考以下文章