以下定义适用于命令和响应:
以下字段,按照命令字节流中出现的顺序进行描述:
响应字节流的主要字段定义:
无需授权的命令(TPM2_Startup)由三部分组成:
第五章剩下都是些具体的命令细节,在此不赘述
从上而下,TSS包含如下几层:特征API(Featurn API,FAPI)、增强系统API(Enhanced System API,ESAPI)、系统API(System API,SAPI)、TPM命令传输接口(TPM Command Transmission Interface,TCTI)、TPM访问代理(TPM Access Broker,TAB),资源管理器(Resource Manager,RM)和设备驱动(Device Driver)
技术人员应基于FAPI编写程序,等同于JAVA,C#等。接下来ESAPI,需要大量TPM知识,它提供一些会话管理和密码支持。SAPI层能让你访问TPM的所有功能,但需要高级专业知识。TCTI层用于传输TPM命令和接收响应。TAB层控制多进程同步访问TPM。RM类似于PC上虚拟内存管理的方式,负责TPM对象和会话在TPM内部存储空间的换入换出。
创建TSS特征API(FAPI)的明确目的是,方便程序员使用TPM 2.0 功能。实现这一层的一种方法是使用配置文件,创建默认的配置选项,当创建和使用密钥时,不需要明确地选择算法、密钥长度、加密模式和签名机制。
FAPI为默认类型的实体定义了基本名称
SAPI规范的设计目的如下:
SAPI包含四组函数:命令上下文分配函数、命令准备函数、命令执行函数、 命令完成函数:
TPM命令传输接口(TCTI)上下文结构体告知SAPI函数,如何与TPM通信。每个进程、每个TPM都有一个TCTI上下文结构体,由初始代码创建。
在TPM栈的任意一层,只要是发送和接收已排好顺序的字节流,都会用到TCTI。目前这体现在两个地方,SAPI和TAB以及RM和驱动之间。
TAB用来控制和同步对一个单一共享TPM的多进程访问。
RM的作用相当于操作系统中的虚拟内存管理器。因为TPM片内存储空间有限,对象、会话、序列需要在TPM和外部存储器之间交换,以让TPM命令能够执行。
一个TPM命令最多可以使用三个实体句柄和三个会话句柄。所有的这些存储在TPM内存中,供TPM执行命令所用。RM的工作是拦截命令字节流,确定什么资源需要被加载到TPM中,交换出能够加载所需资源的足够空间,再加载所需资源。
设备驱动接收一个命令字节缓冲区和缓冲区大小,执行必要的操作,将那些字节发送给TPM。当被栈中的高层请求时,驱动程序会等待,直到TPM准备好响应数据,然后读取响应数据,将其返回给栈上层。
TPM实体是TPM中一个可以通过句柄直接索引到的项目。本章将介绍:永久性实体(hierarchy、字典攻击锁定机制、PCR);非易失性索引(NV索引);对象(密钥和数据);易失性实体(各种会话);
永久性实体的句柄由TPM规范定义,不能被创建和删除。在TPM 1.2中,PCR和所有者是唯一的永久性实体;存储根密钥(SRK)也有一个固定句柄,但却不是永久性实体。在TPM 1。2中则有很多:三个持久性hierarchy、临时性hierarchy、字典攻击锁定复位、PCR、保留句柄、明文口令授权会话和平台hierarchy NV功能。
TPM中有一定数量的非易失性空间,用户可以将它们配置为存储空间,在配置时,需要给定一个用户选择的索引和一些属性集。
NV索引有一个关联的授权值和授权策略,授权值可以随索引所有者的意愿而改变,但是策略在创建NVRAM时被设置好后,就不能再被改变。
NV索引在创建时,就与一个hierarchy相关联,当hierarchy被清除时,与之相关联的NV索引也会被删除
TPM对象要么是数据,要么是密钥,它有一个公开部分,也可能有一个四有部分。正如NV索引一样,所有的对象都隶属于四种hierarchy中的一种:平台、存储、背书、或者空。
在系统断电重启后不会继续存在,尽管非持久性实体可以被保存,但在每次加电启动后,TPM加密机制会阻止加载保存的上下文,以强制丢失,这种实体类型有多种类别:
与非持久性实体相反的是,持久性实体在每次重启后都会持续存在。
一个持久性实体是一个对象,一个hierarchy所有者已要求在重启时留存在TPM里。它与永久性实体的不同在于,它可以被删除,TPM只有有限的持久性内存。
通常,主存储密钥(SRK)、主受限签名密钥(AIK),可能还有背书密钥(EK),是TPM中仅有的持久性实体。
被哈希计算和HMAC计算的命令参数流,暗含了句柄所对应的每个实体的名称,即使命令参数可能不包含名称。在它经过HMAC计算被授权后,攻击者可能修改句柄,但不能修改相应的值。
名称是实体唯一的标识符。永久性实体(hierarchy和PCR)拥有永远都不会改变的句柄,所以他们的名称就是他们的句柄。其他实体(NV索引和加载的实体)拥有一个经计算得到的名称,该名称本质上是实体公开数据的哈希值。攻击者可以删除此索引并重新定义它,但是,除非公开数据区(索引值,属性值以及策略)是相同的,否则名称便会改变,授权不会通过。公开数据区随着实体类型的不同而变化。