TCG为与TPM通信的中间件的开发人员提供了两种不同的命令/接口规范。一方面有中描述的TPM命令参考
http://www.trustedcomputinggroup.org/files/static_page_files/72C33D71-1A4B-B294-D02C7DF86630BE7C/TPM%20Main-部件%203%20Commands_v12_rev116_01032011.pdf
另一方面,中描述的TSS
http://www.trustedcomputinggroup.org/files/resource_files/6479CD77-1D09-3519-AD89EAD1BC8C97F0/TSS_1_2_Errata_A-final.pdf.
后者处理不同层(TDDL、TCS、TSP)的不同接口规范,而前者描述了应该建立在设备驱动程序上的功能。
例如,将TSS TDDL接口与TPM命令参考:中指定的命令进行比较
TSS TDDLI:
-
Tddli_Open()
-
Tddli_Close()
-
Tddli_Cancel()
-
Tddli_GetCapability()
-
Tddli_SetCapability()
-
Tddli_GetStatus()
-
Tddli_TransmitData()
TPM命令参考:
-
TPM_Init()
-
TPM_TakeOwnership()
-
TPM_GetCapability()
-
TPM_MigrateKey()
-
。。。
例如,Trousers实现了完整的TSS,而其他库(如libtpm)仅实现TPM命令参考的一些功能。
这两个接口规范之间的关系是什么?
TPM命令和TPM结构文档仅指定TPM必须执行的操作。
- 哪些命令在TPM上实现
- 输入看起来如何
- 如何验证向TPM发出的命令
- TPM如何应对此类输入
- 反应如何
另一方面,TSS为应用程序开发人员提供了一个API,以方便地开发支持信任的应用程序。TSS的某些部分甚至不向TPM发出命令,比如密钥存储部分或用户管理。
在您链接的TSS文档中,您有一个堆栈的结构化视图,如第30页的图1-1所示。TPM命令引用指定TSS设备驱动程序库和TPM之间的细线的外观。另一方面,TSS规范规定了Tddli接口、TCS接口SP接口。
如果您喜欢类似,让我们将其与HTTP进行比较:前者与HTTP规范类似,而TSS更像是HTTP客户端库的API文档。应用程序开发人员通常不打开套接字,而是开始通过连线发送GET / HTTP/1.0 ...
。她使用了一个图书馆,并专注于更高层次的抽象。同样,您通常不会一点一点地组装TPM命令,而是使用TSS。