寻找 TPM 2.0 SPI 命令字节代码

Looking for TPM 2.0 SPI command byte codes

出于教育目的,我想演示与 Infineon OPTIGA TPM SLM 9670 TPM 2.0 on the SPI bus level. I have an FTDI C232HM-DDHSL-0 USB cable and FTDI's MPSSE-SPI library 的通信允许我使用 TPM 执行 SPI 读写操作。

但是我找不到任何关于我实际必须发送到 TPM 以执行命令的字节的文档。 Section 6.4.6 of the TPM Profile (PTP) Specification tells me that there are address bytes and data bytes. But what about the actual commands? E.g. what do I have to send to execute _TPM_Init and so on? The Trusted Platform Module Library似乎只是在更高层次上讲这些功能。

在线TPM-JS emulator显示它正在使用的字节数。但我不明白如何将其应用到我的场景中。

还有一个 wolfTPM project 显然是在自己实现按位 TPM 通信。但我宁愿使用他们正在使用的文档,也不愿深入研究他们的源代码。

如有任何提示,我们将不胜感激!

SPI 之上的最低层是 TIS 层(TPM 接口规范)。基本上,您可以读取和写入一些寄存器。这些寄存器地址始终以 D4 开头,后跟两个字节。

其中一个寄存器是数据 FIFO 寄存器(地址 ...)。基本上,您将 TPM 命令写入该寄存器。然后告诉 TPM 执行该命令(通过写入另一个寄存器),然后等待(即轮询寄存器以获取标志)直到 TPM 完成。然后可以从数据 FIFO 寄存器中读取响应。

如果有时间,我会编辑此消息并添加示例流量。

TPM 命令和响应在可信平台模块库规范中指定,Part 3: Commands. They typically contain complex structures which are specified in Part 2: Structures

请注意,TPM-JS 模拟器中仅显示 TPM 命令和响应,而不显示 TIS 协议字节。

老实说,规格不是beginner-friendly。我建议查看 TPM 命令和响应的源代码。我的 go-to 资源是 TSS (TPM Software Stack).

请注意,您可以使用 TSS 或 tpm-tools 并使用 wireshark 捕获 TPM 命令和响应(通过使用使用套接字的 TPM 模拟器或使用 --tcti "pcap:device:/dev/tpm0)选项将流量转储到 pcap 文件中)。不幸的是,wireshark 无法将所有 TPM 命令分解到最后一个字节(目前)。

Here,你有一个命令的例子。这个以 80 02 开头,即密码会话(这意味着您有一个授权区域)。有些命令不需要它,可以在没有任何会话的情况下发送(它们以 80 01 开头)。