我想在windows中执行TPM密封操作。我熟悉c++编程,但不知道我会使用什么库。
我目前被以下两个问题困住了:
我可以使用例如WMI和powershell脚本执行此操作吗?这http://msdn.microsoft.com/en-us/library/windows/desktop/aa446799(v=vs.85).aspx表明我可以使用TBS来提交命令,但我不知道如何在例如WMI中设置参数。
我可以使用tbs.h/tbs。lib从Windows 7 SDK执行TPM_Seal操作?
是否有像http://trousers.sourceforge.net/这样的TSS API,我可以从一些c++代码调用它?
我这样做的方法不是什么大问题,但是我在windows上使用TPM 1.2,我所有的客户端都是windows。
更新2023-05:此答案涵盖TPM 1.2,可能已经过时
可以使用TPM Base services向TPM发送命令。所以你需要自己组装命令。
TPM命令、结构和流程在3个文档中定义:
- 第1部分-设计原则
- 第2部分- TPM的结构
- 第3部分-命令
首先,您需要弄清楚要发送哪个命令。然后,您必须查找第3部分中的命令引用,并按照第2部分的描述组装所需的结构。
例如,TPM_seal
命令在第3部分第72页的10.1节中定义。第1331行显示了该命令应该是什么样子。发出命令后,可以根据第1332行计算返回的结构。(所有数字适用于修订版116)
这真的很棘手。但是,您可以查看其他实现。如果您只需要几个命令,这并不难,特别是当您可以确保某些特殊情况不会发生时。
我建议你开始看IBM的软件TPM。这个项目还提供了libtpm和一些实用程序。这是我所知道的较轻的实现之一。
您还可以尝试Windows的TrouSerS是否足够稳定以满足您的需求。这样你就有了一个高级TSS API。
如果Java是一个选项,看看jTSS。
我能够在使用JTSS时做到这一点而没有太多问题。有一个例子@ https://security.stackexchange.com/questions/60841/encrypting-a-symmetric-key-or-small-file-using-tpm-and-windows-tbs