最近,我一直在研究TPM2.0技术,并且在我们假设应用程序重新运行之后,我正试图找出如何保存keyhendle。我想我需要使用TPM2_ContextSave,因为这个函数封装并加密了所有的blobs和诸如此类的东西,这样只有创建上下文的TPM才能读取它。因此,这应该是将“键”存储在文件中的正确方法。
如果您以后需要使用此密钥进行解密或签名(PC重新启动,应用程序重新运行),TPM2_ContextLoad应该给您上下文(如果您正在加载密钥句柄)。这和我从可信计算集团文档得到的一样多。
TSS.MSR是一个带有.NET变体的API。我的问题是Tpm2ContextSaveRequest和Tpm2ContextLoadRequest。
Tpm2ContextSaveRequest有一个TpmHandle构造函数。因此,这个结构应该可以写入文件,然后再读取。
然而,Tpm2ContextLoadRequest只有Context毒蛇。
Context还有一些其他的构造函数,它们需要一些其他的TpmHandle和ulong,就在这一点上,我对正在发生的事情感到困惑。
如何通过应用程序重新运行来保持我的句柄?
发布于 2022-04-19 13:37:34
我已经找到了答案,所以如果有一个可怜的灵魂偶然发现了这个问题,那就是:
您不应该使用Tpm2ContextLoadRequest和保存等价物。如果您想使用上下文作为媒介,请使用Tpm2方法ContextSave和ContextLoad,但我还没有找到如何存储这些对象。
接下来要注意的是使用EvictControl可以生成的持久密钥。然后,您要做的是导出您的句柄ID (uint memberVar)。重新运行应用程序并分配这个ID应该为签名、解密等提供一个有效的参考。
关于更多细节,我已经实现了解决方案这里。
https://stackoverflow.com/questions/71901494
复制相似问题