第5章 规范指南
5.2 一些定义
以下定义适用于命令和响应:
- 授权:授予访问TPM中某些实体的权利
- 密码授权:这是一次性明文授权
- HMAC授权:HMAC密钥是使用共享密钥派生的,这是授权的基础
- 策略或者增强授权:使用必须满足的策略断言来授权。策略断言是命令被授权之前就发送到TPM的命令
- 会话:会话用于授权,并且每个命令操作(加密,解密,审计等)都在一个会话里。在基于HMAC和策略的会话里,会话被创建并被多条其它命令使用。密码授权是不携带任何状态的一个特殊会话。
- 句柄:一个用于标识占用TPM内存的TPM资源标识符
- 字节流:在命令中实际发给TPM的字节,在响应中指实际从TPM接收的字节
- 规范化数据
- 反串行化数据:C语言结构体格式数据
- 串行化数据:规范化的数据(即发送或从TPM接收的格式)
以下字段,按照命令字节流中出现的顺序进行描述:
- 命令头:所有命令的公共部分
- 句柄区域:包哦含第三部分的命令中所指的0~3个句柄
- 授权区域:包含命令会话数据。多个会话可以与单个命令关联,所以这个区域可以包含0-3个绘画的参数。它包含了授权信息、每个命令会话信息和一些需要在应用程序和TPM之间进行通信的会话状态信息。
- 参数区域:包含第三部分所述的特定命令的参数
响应字节流的主要字段定义:
- 响应头:所有响应的公共部分
- 句柄区域
- 参数区域
- 授权区域:包含响应会话数据。多个会话可以与单个命令关联,因此该区域可包含0-3个会话的参数。
5.3 第三部分 命令
无需授权的命令(TPM2_Startup)由三部分组成:
- 一般描述:以文本形势描述命令,详细说明输入的约束条件
- 命令和响应:命令的输入数据和响应的输出数据
- 详细操作:包含代码和代码返回错误的条件表
第五章剩下都是些具体的命令细节,在此不赘述
第7章 TPM软件栈(TSS)
7.1 TSS概述
从上而下,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内部存储空间的换入换出。
7.2 FAPI
创建TSS特征API(FAPI)的明确目的是,方便程序员使用TPM 2.0 功能。实现这一层的一种方法是使用配置文件,创建默认的配置选项,当创建和使用密钥时,不需要明确地选择算法、密钥长度、加密模式和签名机制。
FAPI为默认类型的实体定义了基本名称
- 密钥
- NV
- 标准策略及认证
用FAPI命令创建和使用的实体都用策略来授权,所有FAPI函数都假设密钥只通过策略进行认证。
7.3 SAPI
SAPI规范的设计目的如下:
- 提供访问TPM所有功能的能力
- 跨平台可用,从高嵌入、存储受限的环境到多处理服务器。
- 在提供能够访问TPM所有功能的条件下,让程序员轻松
- 同时支持同步和异步调用TPM
- SAPI实现并不需要分配任何内存,在大部分实现中,调用者负责分配SAPI的所有内存。
SAPI包含四组函数:命令上下文分配函数、命令准备函数、命令执行函数、 命令完成函数:
- 命令上下文分配函数:用来分配SAPI命令上下文数据结构体,它是一个不透明的结构体
- 命令准备函数
- 命令执行函数:命令可以同步或异步传送
- 命令完成函数:这组函数是命令后处理所需要的,如果会话被设置为加密会话,那么本组函数还包括响应HMAC计算和响应参数解密。
7.4 TCTI
TPM命令传输接口(TCTI)上下文结构体告知SAPI函数,如何与TPM通信。每个进程、每个TPM都有一个TCTI上下文结构体,由初始代码创建。
在TPM栈的任意一层,只要是发送和接收已排好顺序的字节流,都会用到TCTI。目前这体现在两个地方,SAPI和TAB以及RM和驱动之间。
7.5 TAB
TAB用来控制和同步对一个单一共享TPM的多进程访问。
- 当一个进程向TPM发送命令和从tpm接收响应时,不允许其它进程发送命令和接收响应。
- TAB需要阻止进程访问不属于它的TPM会话、对象和序列,使用哪个TCTI连接来加载对象、开启会话或启动序列,就确定了所有权关系。
7.6 RM
RM的作用相当于操作系统中的虚拟内存管理器。因为TPM片内存储空间有限,对象、会话、序列需要在TPM和外部存储器之间交换,以让TPM命令能够执行。
一个TPM命令最多可以使用三个实体句柄和三个会话句柄。所有的这些存储在TPM内存中,供TPM执行命令所用。RM的工作是拦截命令字节流,确定什么资源需要被加载到TPM中,交换出能够加载所需资源的足够空间,再加载所需资源。
7.7 设备驱动
设备驱动接收一个命令字节缓冲区和缓冲区大小,执行必要的操作,将那些字节发送给TPM。当被栈中的高层请求时,驱动程序会等待,直到TPM准备好响应数据,然后读取响应数据,将其返回给栈上层。
第8章 实体
TPM实体是TPM中一个可以通过句柄直接索引到的项目。本章将介绍:永久性实体(hierarchy、字典攻击锁定机制、PCR);非易失性索引(NV索引);对象(密钥和数据);易失性实体(各种会话);
8.1 永久性实体
永久性实体的句柄由TPM规范定义,不能被创建和删除。在TPM 1.2中,PCR和所有者是唯一的永久性实体;存储根密钥(SRK)也有一个固定句柄,但却不是永久性实体。在TPM 1。2中则有很多:三个持久性hierarchy、临时性hierarchy、字典攻击锁定复位、PCR、保留句柄、明文口令授权会话和平台hierarchy NV功能。
- 持久性hierarchy
平台、存储和背书。这些hierarchy都需要通过授权才允许使用,所以每一个都有一个授权值和策略,两者都可以被hierarchy管理员修改 - 临时性hierarchy
空hierarchy,它也被一个永久句柄索引,它在每次TPM加电重启后都会被自动清除 - 重置词典攻击锁定
它没有密钥或对象hierarchy。如果它被触发,该机制被用来重置字典攻击锁定机制或者清楚。它通常代表TPM存储的hierarchy的IT管理员。 - PCR
PC客户端平台至少有24个PCR。TPM强制规定至少有一个bank(使用相同哈希算法的PCR集合),在启动时可编程为支持SHA-1或者SHA-256。 - 保留句柄
如果特定的平台规范确定了要使用保留句柄,TPM中就会有一些针对特定制造商的保留句柄。 - 口令授权会话
调用者利用此句柄完成明文口令(与HMAC值相对应)授权 - 平台NV启用
8.2 NV索引
TPM中有一定数量的非易失性空间,用户可以将它们配置为存储空间,在配置时,需要给定一个用户选择的索引和一些属性集。
NV索引有一个关联的授权值和授权策略,授权值可以随索引所有者的意愿而改变,但是策略在创建NVRAM时被设置好后,就不能再被改变。
NV索引在创建时,就与一个hierarchy相关联,当hierarchy被清除时,与之相关联的NV索引也会被删除
8.3 对象
TPM对象要么是数据,要么是密钥,它有一个公开部分,也可能有一个四有部分。正如NV索引一样,所有的对象都隶属于四种hierarchy中的一种:平台、存储、背书、或者空。
8.4 非持久性实体
在系统断电重启后不会继续存在,尽管非持久性实体可以被保存,但在每次加电启动后,TPM加密机制会阻止加载保存的上下文,以强制丢失,这种实体类型有多种类别:
- 授权会话:包括HMAC和策略会话
- 哈希和HMAC事件队列实体持有中间结果
与非持久性实体相反的是,持久性实体在每次重启后都会持续存在。
8.5 持久性实体
一个持久性实体是一个对象,一个hierarchy所有者已要求在重启时留存在TPM里。它与永久性实体的不同在于,它可以被删除,TPM只有有限的持久性内存。
通常,主存储密钥(SRK)、主受限签名密钥(AIK),可能还有背书密钥(EK),是TPM中仅有的持久性实体。
8.6 实体名称
被哈希计算和HMAC计算的命令参数流,暗含了句柄所对应的每个实体的名称,即使命令参数可能不包含名称。在它经过HMAC计算被授权后,攻击者可能修改句柄,但不能修改相应的值。
名称是实体唯一的标识符。永久性实体(hierarchy和PCR)拥有永远都不会改变的句柄,所以他们的名称就是他们的句柄。其他实体(NV索引和加载的实体)拥有一个经计算得到的名称,该名称本质上是实体公开数据的哈希值。攻击者可以删除此索引并重新定义它,但是,除非公开数据区(索引值,属性值以及策略)是相同的,否则名称便会改变,授权不会通过。公开数据区随着实体类型的不同而变化。