当前位置:文档之家› TPM命令

TPM命令

TPM命令
TPM命令

3. 启动和状态管理

3.1. TPM-Init

TPM-Init是一种初始化TPM的物理方法。在可信计算平台内部,当一则平台消息被发送到TPM时,无TPM-Init序数。在PC机中这个命令通过LPC总线连接到TPM,告知TPM 平台正在运行启动程序。

TPM-Init使TPM处于等待TPM-Startup命令的状态。

3.2. TPM-Startup

TPM-Init之后执行TPM-Startup命令,该命令是TPM初始化所需的物理声明。在可信计算平台中经常有许多请求需要重启,在TPM上对这些请求的响应需要进行不同的操作。重启声明不包含足够的信息去通知TPM需要哪种类型的重启。平台初始化代码将已知的额外信息传送至TPM。TPM-Startup命令提供发送信息机制。

TPM有三种不同的启动方式:

(1)“清除”启动:所有变量被设为默认值或者稳定状态。

(2)“保存”启动:TPM在原来TPM-SaveState的基础上恢复一些信息和各种取值,这种恢复的前提是TPM-Init运行成功。如果“保存”启动失败,则必须先关闭

TPM。CRTM不能使TPM处于此种状态,即不可信的上层软件层发布“清除”

操作,然后扩充PCR的状态,以防CRTM冒充。

(3)“无效”启动:TPM自动关闭,在TPM处于完全运行状态之前要求再次执行TPM-Init命令。

3.3. TPM-SaveState

这个命令用于提示TPM保存某个状态信息。如果与之相关的隐藏存储是非易失的,则表示TPM-SaveState命令无效。

如果与之相关的隐藏存储是易失的,而且TPM本身不能及时发现外部掉电从而转移数据到非易失存储器的话,在TPM进入低电平或无电状态之前,应执行TPM-SaveState命令。

4测试管理

4. 1 TPM-SelfTestFull

TPM-SelfTestFull命令测试TPM的所有性能。

与TPM-ContinueSelfTest不同,TPM-ContinueSelfTest也许在任意时刻立即返回,然后再继续测试,而TPM-SelfTestFul总是不断地执行测试,然后返回成功或失败。

4.2 TPM-ContinueSelfTest

TPM-ContinueSelfTest命令告知TPM,它应该完成所有TPM自身功能的自我检测。

TPM或许立即返回成功,然后执行自我检测;或者运行自我检测,然会返回成功或失败。

4.3 TPM-GetTestResult

TPM-GetTestResult命令提供生产商关于自我检测结果的信息。当TPM处于自我检测失败模式时,执行此命令,这是因为允许TPM生产商获得诊断信息。

5.Opt-in管理

5.1 TPM-SetOwnerInstall

当激活但是没有拥有者时,TPM-SetOwnerInstall命令设置永久标志位来标记允许或不允许插入所有者。

5.2 TPM-OwnerSetDisable

TPM所有者设置永久的不可执行标志位。

5.3 TPM-PhysicalEnable

使用物理存在作为授权将永久的不可执行标志位设为FALSE。

5.4 TPM-PhysicalDisable

使用物理存在作为授权将永久的不可执行标志位设为TRUE。

5.5 TPM-PhysicalSetDeactivated

使用物理存在作为授权来激活TPM。当TPM未被激活时,不能执行此命令。

5.6 TPM-SetTempDeactivated

在下一个平台启动之前,TPM-SetTempDeactivated命令允许可信计算平台的操作者使TPM处于无效状态。

这个命令要求操作人证明。操作者通过物理存在声明或者提供操作者AuthData值来进行证明。

5.7 TPM-SetOperatorAuth

TPM-SetOperatorAuth命令用来设置操作者AuthData值。

假设AuthData值在本地被发送至可信计算平台,则操作者的认证无需保密。如果TPM 和键盘之间的路径存在关联,除非键盘使用加密算法和一个安全的通道,否则攻击者可以读取这个值。

6.所有权管理

6.1 TPM-TakeOwnership

这个命令把TPM所有权值插入到TPM中。

6.2 TPM-OwnerClear

TPM-OwnerClear命令在所有者证明的基础上进行清除操作。直到所有者执行TPM-DisableOwnerClear命令之前,这个命令均有效。在所有者执行TPM-DisableOwnerClear 命令的任意时刻,此命令的下一步操作均返回TPM-Clear_DISABLED。

当调用TPM-OwnerClear 命令时,TPM中的所有状态应该被清除。

6.3 TPM-ForceClear

要求物理存取TPM-ForceClear命令才能执行清除操作。TPM-DisableForceClear命令使TPM-ForceClear在启动周期中无效。在执行TPM-DisableForceClear命令的任意时刻,此命令的下一步操作均返回TPM-Clear_DISABLED。

6.4 TPM-DisableOwnerClear

如果拥有者希望使这个清除命令失效,要求物理存取才能执行清除,所有者可以执行TPM-DisableOwnerClear命令。

执行TPM-ForceClea之后,拥有者清除命令再次有效;新TPM拥有者再次必须再次将其置为无效。

6.5 TPM-DisableForceClear

要求下一个启动周期TPM-ForceClear命令才能执行清除操作。TPM-DisableForceClear 命令使TPM-ForceClear在启动周期中无效。

6.6 TPM-PhysicalPresence

在平台中,一些TPM操作要求指出用户是物理存在的。用户的存在或者提供另一个平台拥有者声明,或者提供一个机制来确保该命令不是执行了一个远程软件程序。

TPM-PhysicalPresence命令允许平台中的程序声明物理存在的插入。当软件执行该命令

时,必须采取保护措施。PhysicalPresence HWEnable和PhysicalPresenceCMDEnable为SW 或HW声明物理存在的能力。直到设置PhysicalPresenceLifetimeLock时,这些标志位才能够重新设置。平台生产商应设置这些标志位去声明TPM绑定的平台的性能。

该命令提供两种功能设置。一种是永久地使HW或者SW为物理存在;另一种是允许SW为物理存在。

6.7TSC_ResetEstablishmentBit

PC TIS规定在执行HASH_START的基础上,将tpmEstablished设置为TRUE,这个设置意味着在平台上创建了一个可信的操作系统。平台将利用tpmEstablished值决定是否有必要维持安全的操作周期。

tpmEstablished比特提供了一个非易失的、安全的,而且在平台上事先运行HASH_START操作的报告。当平台使用tpmEstablished比特时,它会重新设置tpmEstablished 值。

例如,如果已经运行了HASH_START,平台可以用tpmEstablished来调用专门的进程。一旦这个进程执行完,平台将希望重新设置tpmEstablished,防止再次调用该进程。

在TPM规范中,TPM_PERMANENT_FLAGS->tpmEstablished比特使用正逻辑;TPM_ACCESS寄存器使用负逻辑,因而用0来表示TRUE。

7.性能命令

7.1 TPM-GetCapablilty

此命令返回TPM的当前信息。当capArea显示TPM_CAP_MFR时,失败模式下返回的局限性将限制返回生产商信息。

7.2 TPM-SetCapablilty

在TPM中该命令用于置值。如果setValue与capArea和subCap值设置的不一致,那么认为setValue是一个不良参数。

7.3 TPM-GetCapabliltyOwner

该命令为TPM-GetCapabliltySigned提供信息。

TPM拥有者使用TPM-GetCapabliltyOwner命令,通过一个简单的操作就可以得到所有的非易失标志和易失标志。此命令属强制性命令。

标志位概括了许多TPM的操作信息。一些标志位表示的消息属于TPM拥有者的个人信息。因此,简单来说,必须重新获取设置的标志位来证明TPM所有权。用户可以通过其他方式推断出非拥有者个人信息的标志位。

正规的TPM认证机制可以充分地检验响应的完整性,无需其他的完整性校验。

8.审计

8.3 TPM-GetAuditDigest

返回当前的审计分类。外部的审计日志负责跟踪审计类别的组成参数。

对于一个单独的TPM而言,该值是唯一的。然而这个值会根据TPM拥有者设置的速率而变动。该值描述了跟踪唯一性的少部分来源。

8.4 TPM-GetAuditDigestSigned

审计日志签名返回全部的分类值和当前的审计命令列表。审计命令列表把当前的分类值和正在被审计的命令列表绑定起来。

当TPM在执行审计操作,同时在一个签名传送会话中运用TPM-GetAuditDigestSigned

命令进行签名时,该命令会改变当前序数的活动设置。为真时,此命令也产生一个次要的影响,即重新设置审计日志分类,这时要求TPM拥有者进行认证。该命令包含某种方法可以反映TPM拥有者的请求。由于规定TPM的身份密钥是用于签名和重置的唯一密钥,因此在执行该命令时,TPM拥有者的认证是固定的(仅仅TPM拥有者能生成和控制自己的TPM 身份密钥)。因此,执行审计操作时,不能轻易去改变序数。

8.5 TPM-SetOrdinalAuditStatus

用一个给定的序数来设置审计标志位。同时要求PM拥有者进行认证。

9.管理功能——管理

9.1 TPM-FieldUpGrade

一旦TPM开始运行时,就需要一个用于更新保护性能的机制。当给定TPM各种执行的性质,将有多种方法来更新其保护性能。当执行TPM-FieldUpGrade命令时,它会提供一个生产商规定好的更新方法。

在给出的要求范围内,生产商决定如何执行该命令。此命令或许仅仅是一个命令,或者是一系列的命令。

IDL规定:为命令创建一个顺序,可是剩下的参数是生产商事先规定的。当运行TPM-RevokeTrust命令时,决定如何执行TPM-FieldUpGrade命令不是由TPM规定的,而是由其他TCG规定的。

9.2 TPM-SetRedirection

变向命令把一个密钥放在一个变向接收器里。当它连接GPIO信道时,在建立连接的同时重置认证限制。

9.3 TPM-ResetLockValue

重新设置TPM字典攻击缓解值。允许TPM拥有者删去许多继承授权失败。字典攻击缓解是制造者特定的,这种攻击很可能发生。TPM或许把一个缓解时间外的授权失败视为一中正常情况的失败。

如果这个命令本身存在授权失败,由于周期之外锁定的剩余,该命令也会被锁定。这将防止利用该命令依附拥有者授权产生字典攻击。

这个命令允许TPM拥有者通过改变试验和命令,并且依附其他授权值运行一个字典攻击。

10存储功能

10.1TPM_Seal

SEAL(封装)操作允许软件明确平台必须所处的未来“可信”配置状态,这样秘密才不会泄漏。该操作被执行的时候与相关平台配置(PCR-值)关联。SEAL操作通过tpmProof 值来对个人TPM的blob进行绑定(BIND)

如果UNSEAL操作成功,平台配置校验有效,SEAL操作执行时转向请求者,并传送保密数据。这种校验可能不引起注意。如果经过SEALed的秘密用作向第三方的鉴别平台,请求者通常不关心平台所处的状态。秘密封装完成,校验则可以忽略。另外如果经过sealed 的秘密用于平台鉴别第三方,当秘密封装的时候,请求者需要考虑平台的状态。这就与校验相关。

例如,如果SEAL用存储一个将要实行的配置的密钥(可能是要证明平台是一个处于特殊配置的特殊平台),唯一的必要条件就是只有平台在该种配置下才可以使用该密钥。当密

钥被SEALed的时候对平台配置没有影响。相应的实际例子就是seal用作存储一个网络鉴别密钥!

另一方面,假如操作系统包含一个允许登陆平台的用户加密数据库。系统使用一个SEALED的块为用户数据库存储加密密钥。可是,SEAL的特性是任何SW的堆栈可以为任何其他软件堆栈封装(SEAL)数据块。因此操作系统可能受到攻击,被另外的操作系统替换已封装数据块中的加密密钥和用户数据库本身,让不可信的部分介入操作系统级服务。因此,如果操作系统考虑到这样的攻击,则需要检测以判别以往配置是否可信。

TPM_Seal 需要一个加密的参数(“秘密”secret)。与其他命令一样,需要加密多个参数,用作异或加密的字符串,由连接nonce(在OSAP会话中创建)和会话共享密钥的方式产生,然后对结果进行哈希。

10.2TPM_Unseal

TPM_Unseal操作展现TPM_Seal命令处理过的数据,但是加密过程必须在同一平台的当前配置(由特定的PCR内容定义)下才可以解密。内部来说,TPM_Unseal接受由TPM_Seal 操作产生的数据块。TPM_Unseal解密其内在结构,检验结果数据的完整性以及TPM_seal 操作过程中指定的PCR值。另外请求者必须提供适当的授权数据,即封装(seal)数据时候用到的密钥和数据块。

如果完整性、平台配置和授权检验成功,解封装的数据就会返回给请求者,否则产生错误。

10.3 TPM_UnBind

TPM_UnBind对Tspi_Data_Bind命令处理过的数据块进行解密并输出给用户。请求者需要批准该命令使用解密所需的密钥。

TPM_UnBind操作以数据块形式进行,数据块之间没有联系。

10.4 TPM_CreateWrapKey

TPM_CreateWrapKey命令为不对称密钥产生并创建安全存储包(bundle)

通过一套特殊的PCR注册步骤,最新产生的密钥可以与某个PCR值锁定。

10.5 TPM_LoadKey2

在TPM使用一个密钥进行(wrap bind seal)加解密、捆绑、封装、签名或者其他功能前,需要把key送到TPM中去。TPM_LoadKey2命令就是把key装载到TPM里面以待使用。TPM指派key的句柄。TPM就是通过句柄来定位需要装载的key的。假定的情况是句柄可以根据密钥管理的操作更改。上层的软件负责保持句柄与外部软件所使用的标签间的映射。这个命令负责对key的使用添加强制的约束。例如,当想要装载一个存储的可以时,需要检验该存储的key的限制(2048大小等)。

装载命令需要保持这样一个记录:此前使用的key是否通过父级的PCR与一个PCR绑定起来。

父级PCR(parentPCRStatus)标签在平台状态转换或者完成当前状态时发起一个可能的检验。例如子级key关联到状态3,父级key关联状态2,曾父级(父级的父级)key关联状态1。这个例子中使用的子级key表明了平台时从状态1转向状态2最终当前状态为状态3。TPM_Startup使参数stType等于TPM_ST_CLEAR的情况表明此平台被重启,所以平台没有上一级状态。因此如果TPM_Startup运行造成是标志stType==TPM_ST_CLEAR,那么parentPCRStatus==TRUE标识的key就不能装载(清空?)。

如果TPM_KEY结构被解析、使用“pubDataDigest”的完整性检测通过并且key是不可移动的,那么key一定是由TPM创建的。所以有足够的理由相信key本身对于TPM不构成安全威胁。目前还没有发现假冒可移动key所造成的攻击,但有检验所装载的可移动key 是否真实的需求,这是因为对任意数据可以作为key被执行感到的不安与日俱增。理想的一致性检测应该加入到加解密循环中,但是这样的开销会非常大。对于RSA的key,一致性检测的加入相当于根据RSA素数拆分RSA产品,并对其进行检验。

10.6 TPM_GetPubKey

Key的所有者希望从装载的key中得到公钥。此信息涉及到秘密,所以该命令必须得到key所有者的授权。

10.7 TPM_Sealx

TPM_Sealx命令类似于SEAL命令,其附加要求是有效期参数。该命令也是对信息块进行封装,解封装也需要编码。

Sealx要求使用1.2数据结构。就像没有检测情况下SEAL要求的1.1数据结构用法一样。

11移植

从一个TPM上移植key到另外一个TPM对于TPM的用户模式是一个重要的方面。移植的相关命令允许这种操作的发生。

有两类可移植的key,1.1版本可移植key和1.2版本可证明的移植key。

11.1 TPM_CreateMigrationBlob

TPM_CreateMigrationBlob命令实现移动可移植key到新平台或者其父级层操作过程的第一步。执行此命令需要了解所要移植key的移植授权区(migrationAuth field)。

可移植模式被用作从一个TPM移植key到另一个TPM以作升级或者备份。这样TPM需要创建别的TPM能够处理的数据块。装载入备份的公钥,TPM会为可移植的key创建新的数据块。

在执行TPM_CreateMigrationBlob之前,TPM的所有者需要通过TPM_AuthorizeMigrationKey命令来选择和授权要移植的公钥。

IReWrap模式用来直接移动key到新的父级层(不管是不是在同一个平台内)。TPM简单地使用一个新的父级标签对key作再加密,输出标准的已加密元素供随后的TPM_LoadKey命令使用。

TPM_CreateMigrationBlob不能够移动不可移植的key。不需要外在的测试。只有TPM 知道tpmProof标识。因此请求者不能提交一个等同于tpmProof的授权数据(AuthData)并移动一个不可移动的key。

11.2 TPM_ConvertMigrationBlob

该命令接受一个可移植数据块并创建一个标准的包装(wrapped)数据块。可移植数据块必须通过标准的TPM_LoadKey功能装载倒TPM里面。

只要命令移动了私钥就需要记录。移动相应的公钥TPM无法指定,因为这不是敏感的安全数据。移动关联的公钥需要平台特定规范的指定。在目标TPM通过TPM_LoadKey命令使用移动的key之前,必须重建一个TPM_KEY结构。

11.3 TPM_AuthorizeMigrationKey

该命令创建一个授权数据块,允许TPM所有者指定那种移动更方便他们使用,并允许用户移动与TPM所有者无进一步关联的信息。

TPM所有者负责确定要移植的key是否适合移植。TPM的检测仅限于要移植的key的加密强度。

11.4 TPM_MigrateKey

该命令的功能是移植的授权。

命令比较简单。只是解析输入的数据包(来自TPM_CreateMigrationBlob或者TMP_CMK_CreateBlob)然后用输入的公钥对其进行再加密。该命令的输出是发送TPM_CreateMigrationBlob或者TPM_CMK_ConvertMigration给目标TPM。

该命令并没有承担加密数据块的更多内容。因其不含有异或字符串,实际上不能对要移动的key决定过多。

这个命令的存在在于准许TPM成为移植的授权者。如果使用这种方式,是希望系统的物理安全包含TPM和授权移动key的数据值受到强力的约束。

为防止这个命令使用其他的key作为父级key,命令只有在上级密钥句柄(maKeyHandle)keyUsage是TPM_KEY_MIGRATE的时候才能够工作。

11.5 TPM_CMK_SetRestrictions

该命令用作所有者指定key的使用方法,该key是认证过的可移植key,并通过了授权(实际所有者的授权或者其他的授权)。

处于不受干扰的原因,命令本身不能作为一个代表,因为被鉴别的可移植key可能包含所有者与外部实体间的约定关系。

因为限制在DSAP会话中有效,所以限制改变的时候无需中止DSAP会话。

11.6 TPM_CMK_ApproveMA

该命令创建一个授权的凭证,允许TPM所有者指定那一种移植授权是他们所认可的,也允许用户创建与TPM所有者无关连的被鉴别可移植key。

TPM所有者负责指明一个特定的移植授权是否对控制移植适用。

11.7 TPM_CMK_CreateKey

该命令发起并创建一个不对称密钥的安全存储句柄,该密钥的移植控制通过移植授权来实现。

该命令类似与TPM_CMK_WrapKey,但是(1)合成的key必须是可移植的,并只可以通过TPM_CMK_CreatBlob移植。(2)命令是所有者通过凭证标识授权的。

TPM_CMK_CreateKey命令创建一个其他的标准可移植key,以下情况除外(1)移植授权是一个移植授权的HMAC,并且新key的公钥由tpmProof签名(而不是tpmProof本身);(2)migrationAuthority比特位被置为TRUE;(3)payload的类型为TPM_PT_MIGRATE_RESTRICTED.

移植的选择和授权通过传入的公钥指定。(实际上可以处理多个公钥,所以多个移植授权可以被指定)。

11.8 TPM_CMK_CreateTicket

该命令用公钥检验摘要的签名。

TPM_CMK_CreateTicket返回一个凭证,可以证明同样的TPM用特定的公钥验签成功。

11.9 TPM_CMK_CreatBlob

该命令非常类似于TPM_CreateMigrationBlob命令,不同在于:(1)使用一个额外的凭证(restrictedKeyAuth)代替移植授权会话;(2)使用移植选项TPM_MS_RESTRICT_MIGRATE 或者TPM_MS_RESTRICT_APPROVE_DOUBLE;(3)产生一个预包装的key数据块,其移植授权不受tpmProof约束。

如果目标(父级)公钥是MA,移植是默许的。如果MA不是目标(父级)公钥,则进一步的检测是必须的,而且只能选择一个移植的目标:(1)sigTicket必须证明restrictTicket是MA签名的。(2)restrictTicket必须担保目标公钥是经过核准批准移植目标(父级)公钥的。(显然这种复杂的方法也用于一个MA向MA批准移植。)上述两种情况,MA必须在默认的允许移动key的MAs列表中,

11.10 TPM_CMK_ConvertMigration

TPM_CMK_ConvertMigration完成被鉴定的移植数据块的移植过程。

该命令接受一个被鉴定的移植数据块并创建一个标准的预包装数据块其payload类型为TPM_PT_MIGRATE_EXTERNAL。被移植的数据块必须通过常规的

TPM_LoadKey功能装载到TPM里面。

注意命令只移动私钥。移动相应的公钥TPM并没有指定,因为他们是不敏感的安全数据。移动相应的公钥需要以平台特定的规范指定。在移动的key能被目标TPM 以TPM_LoadKey命令使用之前,创建一个TPM_KEY结构。

TPM_CMK_ConvertMigration检验目标key的默认可移植授权MA列表,以证明从目标key移动到目的地(父级)key是经过核准的,并检验目标key里的设置(标志等)是CMK。

12保持功能(可选)

(描述略)

12.1 TPM_CreateMaintenanceArchive

该命令创建保持档案。它只可以由所有者执行,可以随着

TPM_KillMaintenanceFeature命令关闭

12.2 TPM_LoadMaintenanceArchive

该命令装载一个由厂商修改以装载到其他TPM的保持档案。

如果保持档案的创建使用所有者的授权进行异或加密,解密的时候必须也使用到当前所有者的授权。所有者的授权不变。

如果保持档案的创建使用随机数据来异或加密,出售者的详细说明应该包含该随机数据。所有者的授权可能改变。

12.3 TPM_KillMaintencanceFeature

该命令是一个持久的动作,用以防止任何人创建保持档案。一旦执行则持续到新TPM 所有者的设定。

这个动作是为不使用保持特性的用户设计的。在所有者的判断上,可以以这样一种方式消除保持特性:唯一恢复平台可保持性的操作将是移除根证书(root key)。这种特性在所有贯彻保持特性的TPM中都强制存在。

12.4 TPM_LoadManuMaintPub

该命令装载厂商的公钥以保持过程中使用。命令安装manuMaintPub到TPM内部的永久数据存储区。保持特性可以复制受保护存储中的非可移动数据。所以在保持特性的公钥被安装到TPM之前,移动平台则存在着安全漏洞。

该命令希望在安装一个TPM所有者或者任意key到TPM受保护存储区之前就能被使用。所以不用授权。

12.5 TPM_ReadManuMaintPub

该命令用来检测TPM里的厂商保持公钥是否为期望值。这在制造过程中会有用。命令返回一个安装key的摘要,而不是key本身。这阻碍了保持key的发现,这些key可能对厂商的秘密有用。

该命令希望在安装一个TPM所有者或者任意key到TPM受保护存储区之前就能被使用。所以不用授权。

13 密码功能

13.1TPM_SHA1Start

其能力是开启一个计算SHA-1摘要的过程。

SHA-1处理过程的公开对平台来说处于一个方便的模式,不用需要太多的存储器来完成SHA-1本身。因此,SHA1的使用受到TPM的限制。

TPM不允许在执行SHA1会话其间有任何其他类型的处理。所以一个TPM上只能激活一个SHA1会话。

该命令结束之后,TPM_SHA1Complete或者TPM_SHA1CompleteExtend命令之前,接收到任何其他命令如TPM_SHA1Update等,将导致SHA1会话的失效。

13.2TPM_SHA1Update

其能力是输入完成的数据块到未完成的SHA1摘要中。处理结尾,摘要保持未决(pending)状态。

13.3 TPM_SHA1Complete

能力为终结一个未决的SHA-1计算。

13.4 TPM_SHA1CompleteExtend

能力是终结一个未决的SHA-1计算并通过SHA-1哈希处理提交结果给平台配置寄存器(PCR)。

该命令原本完成一个哈希序列并在较少存储的环境下提供给PCR。

13.5 TPM_Sign

签名命令对数据签名并返回最终数字签名值。

13.6 TPM_GetRandom

该命令返回随机数字发生器中的下一个bytesRequested比特给请求者。

它推荐TPM实行RNG方式,以便允许它返回RNG比特,这样bytesRequested 频率多于可用比特数量的情况就会发生得少。

13.7 TPM_StirRandom

该命令增加平均信息量到RNG状态。

13.8 TPM_CertifyKey

该操作允许一个key去证明另外一个key的公开部分。

一个TPM身份key可能用于证明非可以移植key,但是不允许证明可移植的key或者已经被证明过的可移植key。这样它允许TPM作出声明:“key属于TPM保护区域,不可能被透露。”为使这声明更加精确,挑战者必须相信发放身份key实体所用策略和TPM厂商的保持策略。

签名和继承key可能被用于证明可移植key和非可移植key。证书的有效性取决于证书容器对证书key的信任。

要验证的证书必须在调用TPM_CertifyKey之前被装载。

在输出是否使用TPM_CERTIFY_INFO 或者TPM_CERTIFY_INFO2取决于被鉴别的key受限于那个PCR和什么位置。没有位置限制并使用不大于PCR#15的PCR的key鉴定时将导致本命令返回并签名一个TPM_CERTIFY_INFO结构,该结构于V1.1TPM兼容。

当该命令运行来证明其他的key(使用PCR#16或者更高PCR的key或者有任何位置限制的key),它会返回并签名一个TPM_CERTIFY_INFO2结构。

TPM_CertifyKey不支持一下情况:所证明的key需要使用授权但是已经被鉴别过的key (key-to-be-certified)却不需要。这时就需要用到TPM_CertifyKey2。

如果命令标签(参数队列中)指定只能有一个授权会话,TPM惯例会忽略监听到的第一个会话(这个key将永远得不到数据使用授权)并且输入会话数据将用于列表中的第二个授权会话。在TPM_CertifyKey中第一个会话是证明的key,第二个会话是已经被鉴别的key。在TPM_CertifyKey2中,第一个会话是已经被鉴别的key,第二个会话才是要证明的key。

13.9 TPM_CertifyKey2

该命令是基于TPM_CertifyKey的,但包含可以证明可证明移植key(CMK)的能力,这就需要额外的参数输入。

TPM_CertifyKey2命令总是产生TPM_CERTIFY_INFO2结构。

TPM_CertifyKey2不支持以下情况:所证明的key需要使用授权但是已经被鉴别过的key (key-to-be-certified)却不需要。这时就需要用到TPM_CertifyKey2。

如果命令标签(参数队列中)指定只能有一个授权会话,TPM惯例会忽略监听到的第一个会话(这个key将永远得不到数据使用授权)并且输入会话数据将用于列表中的第二个授权会话。在TPM_CertifyKey中第一个会话是证明的key,第二个会话是已经被鉴别的key。在TPM_CertifyKey2中,第一个会话是已经被鉴别的key,第二个会话才是要证明的key。

14背书密钥处理

(说明暂略)

14.1TPM_CreateEndorsementKeyPair

该命令创建TPM背书密钥。如果背书key已经存在则返回错误码。

14.2 TPM_CreateRevocableEK

该命令创建TPM背书密钥。如果背书key已经存在则返回错误码。TPM销售者应该有一个单独的装置产生EK(背书密钥),然后注入TPM中。

输入参数指定EK是否可以被重置,使EK重置的授权数据能否由TPM产生。输出参数是重置EK时所必须用到的授权数据。(如果可以重置的话)

TPM_RevokeTrust命令必须用来重置一个EK(如果可以重置的话)。

所有者授权不适用于批准重置一个EK:物理检测(Physical Presence)者可以移除一个真实的所有者,安装新的所有者并撤回EK。真实的所有者能被重新设置,但是平台将丢失最初的证明这样就不会被挑战者所信任。所以如果一个口令就能够撤销一个EK,那它必须是一个分给真是所有者的单独口令。

在V1.2版本一个OEM(原始设备制造商)在创建EK时由额外的选择。

a)OEM可以制造它所有的TPM时设置标识enableRevokeEK==TRUE.

如果OEM对这些TPM保留了EK重置的口令,就可以把其分发给消费者。客户可以使用该口令去修改口令,清除EK创建新的EK和新的口令。

如果EK重置口令是一个随机值,OEM可以丢弃这些值并不分发给客户。通过猜测口令的本地DOS(拒绝服务?)攻击来重置EK的可能非常小(零统计)。但消除DOS攻击的几率也是零,因为物理检测宣称要使用TPM_RevokeTrust命令。

B)OEM可以置其TPM标识:enableRevokeEK==FALSE。那么EK将不能撤销,这样本地DOS 对EK的攻击可能就消除了。

14.3TPM_RevokeTrust

该命令清除EK并设置TPM回到最初默认状态。在产生EK的过程中产生授权数据值。EK 产生器负责保护和发布撤销信任授权数据(RevokeTrust AuthData.)。

14.4 TPM_ReadPubek

返回背书密钥的公开部分。这个值可以控制接入的放置,是一个单独敏感的数值。

readPubek标识通过TPM_TakeOwnership命令设置为FALSE,由TPM_OwnerClear命令设置为TRUE,这样就可以反应TPM所有者是否在线。

14.5 TPM_OwnerReadInternalPub

一个TPM所有者授权的命令,返回EK或者SRK的公开部分。

Key处理(keyHandle)参数包括在引入的会话授权防止变更的值中,导致读一个不同的key。不像大部分能被更高层软件映射的key处理,这个key处理只有两个固定的值。

15 身份创建与激活

15.1 TPM_MakeIdentity

产生一个新的证明身份密钥(AIK)

15.2 TPM_ActivateIdentity

该命令的目的有两部分。首先是确认TPM_SYM_CA_ATTESTATION中的信任状是本TPM的。其次是获得用以加密TPM_IDENTITY_CREDENTIAL的会话密钥。

相对1.1版的TPM_ActivateIdentity有一项功能上的扩展。发送来自CA的数据块可以是1.1版格式也可以是1.2版格式。TPM从数据块的大小或者版本信息确定到底是那一种类型。TPM_ActivateIdentity在释放会话key之前检验对称会话密钥是否与TPM身份一致。

只有TPM的所有者有权利激活一个TPM身份。所有者必须授权给TPM_ActivateIdentity 命令。所有者通过TPM_OIAP或者TPM_OSAP授权协议对该命令授权。

如果在释放会话密钥前任何PCR值需要检验的话,身份激活包(ActivateIdentity package)的创建者需要指明。

16 完整性采集和报告

该部分介绍直接访问PCR的命令

16.1 TPM_Extend

增加一个对PCR的新度量。

16.2 TPM_PCRRead

该操作提供对一个指定PCR的不加密报告。

16.3 TPM_Quote

该操作提供对PCR值的加密报告。操作需要装入key。TPM_Quote用一个key去签名一个表明所选PCR当前值的声明和外部供给数据(可能是挑战者提供的一个nonce)使用“外部数据”的术语是因为TPM_Quote的一个重要使用是提供对任意数据的数字签名,这种签名包含了平台的PCR值在签名时间戳中。因此“外部数据”并不是出于反对重放的目的,虽然在完整性挑战被用作此目的。

16.4 TPM_PCR_Reset

因为PCR的pcrReset特性被置为TRUE,该命令重置PCR回到默认值,这模仿了TPM_Init 的动作。PCR可能被限制于可以执行重置操作的位置。

发送一个空的pcrSelection将导致错误这是因为命令运行必须完成一些操作。而如果PCRSelection为空则没有PCR要被重置,命令什么操作都做不了。

因为PCR可以重置,可信操作系统(TOS)可以改变TPM_PCR_Reset的行为。以下伪代码演示如何改变行为。

At TPM_Startup

If TPM_PCR_ATTRIBUTES->pcrReset is FALSE

Set PCR to 0x00 (00)

Else

Set PCR to 0xFF…FF

At TPM_PCR_Reset

If TPM_PCR_ATTRIBUTES->pcrReset is TRUE

If TOSPresent

Set PCR to 0x00 (00)

Else

Set PCR to 0xFF…FF

Else

Return error

以上伪代码仅作为例子,对于特定平台的细节,读者可以回顾平台详细规范。上述伪代码的目的在于显示PCRrest和TOSPresent比特控制值在PCR重置时的使用。

16.5 TPM_Quote2

该操作提供对PCR值的加密报告。操作需要装入key。TPM_Quote2用一个key去签名一个表明所选PCR当前值的声明和外部供给数据(可能是挑战者提供的一个nonce)

使用“外部数据”的术语是因为TPM_Quote2的一个重要使用是提供对任意数据的数字签名,这种签名包含了平台的PCR值在签名时间戳中。因此“外部数据”并不是出于反对重放的目的,虽然在完整性挑战被用作此目的。

TPM_Quote2不同于TPM_Quote的地方在于TPM_Quote2使用TPM_PCR_INFO_SHORT 保存PCR寄存器相关的信息。TPM_PCR_INFO_SHORT包含位置信息以提供寄存器一个更复杂的平台配置相关信息。

17 改变授权数据

17.1 TPM_ChangeAuth

该命令允许一个实体的所有者为该实体改变授权数据(AuthData)

TPM_ChangeAuth需要对一个参数(“NewAuth”)加密。因为和其他命令一样需要加密不止一个参数,所用的参数产生于authLastNonceEven(在OSAP会话中被创建,)nonceOdd以及会话共享秘密。

该命令的参数列表常包括两个授权会话,而各自key的授权数据使用(authDataUsage)状态则无关紧要。

17.2 TPM_ChangeAuthOwner

该命令允许一个实体的用户为TPM所有者或者SRK改变授权数据。

该命令的执行需要当前TPM所有者的授权。

18.授权会话

18.1 TPM_OIAP

当TPM接收已经被OIAP协议授权的TPM_OIAP 命令时,这部分描述了与TPM授权相关的知识。许多命令都使用IAP授权。

18.2 TPM_OSAP

TPM_OSAP命令创建了授权会话操作和共享密钥,同时生成了nonceEven和nonceEvenOSAP。

18.3 TPM_DSAP

TPM_DSAP命令使用一个委托AuthData值来创建授权会话操作。该AuthData值被传送到TPM_DSAP命令作为一个加密团点或者从内部的委托表传送过来。对于用户密钥或者拥有者,该命令用于启动授权会话。

与TPM_OSAP一样,TPM_DSAP命令生成一个共享密钥,nonceEven和nonceEvenOSAP。

18.3 TPM_SetOwnerPointer

当执行一个与OIAP或者OSAP会话相关的拥有者个人信息时,这个命令将设置一个TPM经常使用的证明书个人信息。

对于遗赠代码(其本身不知持委托),该命令仅仅用于提供拥有者委托功能。通常情况下,TPM_STCLEAR_DATA->ownerReference指向TPM_KH_OWNER,表示OIAP和OSAP 会话应该使用拥有者授权。TPM_SetOwnerPointer命令允许ownerReference在委托表中指向一个指数,这表明OIAP和OSAP会话应该使用委托授权。

在实际应用中,TSS(TSS支持委托)将创建和加载拥有者委托,并且设置拥有者指向

那个委托关系。之后,遗赠TSS应用程序将通过委托拥有者授权来使用OIAP和OSAP会话。

如果TPM_SetOwnerPointer命令没有被授权,那么DoS攻击可以获取到ownerReference。应用程序通过为ownerReference重新设置一个合适的值,可以重新获得一个失败的拥有者授权。

19.委托命令

19.1 TPM _Delegate_Manage

TPM _Delegate_Manage命令是管理继承表的基本程序,对于一个选定的继承,此命令包括允许/不允许委托。正常地,在任何其他委托命令继承之前,必须至少执行一次TPM _Delegate_Manage命令(用于为一个特定的继承创建继承表)。

TPM拥有者授权于TPM _Delegate_Manage,这是因为一个特权拥有者才可以替换表。如果没有拥有者,那么TPM _Delegate_Manage请求无特权操作。这并不意味着剥夺了拥有者的权利,为平台生产商或者第一次启动简化了继承表的加载过程。在没有拥有者的情况下,TPM对于NV写操作的正规限制会减少TPM非易失存储空间由于不正确的使用而导致的耗尽。加载之后,继承表被锁定,以防被篡改。仅仅拥有者、他的委托或者删除拥有者(即使没有拥有者)可以解除继承表的锁定。

利用opCode操作码用户化TPM _Delegate_Manage命令:

(1)TPM _FAMIL Y_ENABLE允许/不允许使用继承和所有属于那个继承的委托表。(2)在存在拥有者或从TPM中删除拥有者之前,TPM _FAMIL Y_ADMIN常用于进一步管理继承表。(注意:物理存在命令TPM _ForceClear可以进一步实施管理,即使没有拥有者也可以调用TPM _ForceClear。)

(3)TPM _FAMIL Y_CREATE命令创建一个新的继承关系。因为父级ID可以隐藏,所以这种情况下会话是无效的。

(4)TPM _FAMIL Y_INV ALIDA TE使现有的继承关系无效。

19.2 TPM _Delegate_CreateKeyDelegation

这个命令首先创建一个TPM_DSAP可使用的团点,然后授予特权来使用这个密钥。

不阻止正当的密钥使用,反对密钥许可设置。如果密钥使用不正确,那么该命令执行成功的话,但是委托命令将不成功。

对于TPM _LoadOwnerDelegation而言,这些团点(blob)不能作为输入数据,因为TPM 内部委托表仅存储拥有者委托。

(TPM _Delegate_CreateOwnerDelegation必须被用于委托拥有者特权。)

19.3 TPM_Delegate_CreateOwnerDelegation

通过创建一个团点(blob),TPM_Delegate_CreateOwnerDelegation命令委托拥有者的特权来使用一批命令序数。对于TPM_DSAP或者TPM _LoadOwnerDelegation来说,这些团点被当作输入数据

TPM_Delegate_CreateOwnerDelegation在创建新委托之前,需要释放现有的委托(通过增加确认次数)。这确保了在拥有者特权的继承关系下,新的委托是唯一可用于操作的委托。新的委托作为一个安全监控器(一个本地的个别实体,或者一个远程的个别实体,或者一个本地主机实体)用于初始化一个继承关系或者执行外部的委托设置确认。通常情况下,用于一个被委托的安全监控器的序数包括TPM_Delegate_CreateOwnerDelegation命令,为了允许监控器创建下一步的委托关系,同时允许TPM_Delegate_UpdateVerification激活先前空闲的委托。

如果增加了确认的次数,新的委托关系还没有委托任何特权,或者使用了一个授权值(用完后会被丢弃的值),那么这个继承委托就会处于空闲状态,同时通过利用当前的拥有者授权来管理委托关系。

(TPM _Delegate_CreateKeyDelegation必须被用于委托特权才能使用密钥。)

19.4TPM_Delegate_LoadOwnerDelegation

这个命令把一个委托表的列团点加载到一个非易失委托表列里。当制造或第一次启动(没有拥有者)时,或者存在在拥有者之后,调用TPM_Delegate_LoadOwnerDelegation命令。如果存在拥有者,TPM_Delegate_LoadOwnerDelegation要求拥有者授权,同时对敏感性数据进行加密。

在没有拥有者的情况下,TPM对于NV写操作的正规限制会减少TPM非易失存储空间由于不正确的使用而导致的耗尽。使用TPM _Delegate_Manage命令加载后,锁定继承表来防篡改。

TPM的外部管理系统用来管理TPM中委托表的列存储,还可以写入任何先前的存储数据。

这个命令不能把密钥委托团点(blob)加载到TPM中。

19.5 TPM_Delegate_ReadTable

这个命令用于从TPM中读取继承关系的公开信息和存储在TPM里的委托表。在执行外部的继承表确认时才用到这个数据。

对于此命令的执行没有任何限制条件;无论PCR是什么状态,无论是否知道任何特定的AuthData值和是否使能端和管理比特位被设置了一种方式或者其他方式,任何人都可以读取这个信息。

19.6 TPM_Delegate_UpdateVerification

TPM_UpdateVerification在一个实体中(一个团点blob或者一个委托列)设置确认次数为目前的继承值,以至于TPM能够继续接收实体所描述的委托关系。

19.7 TPM_Delegate_VerifyDelegation

TPM_ VerifyDelegation说明了一个委托团点blob,并且依赖于当前这个团点是否有效,返回成功或失败。这个委托团点没有被加载到TPM中。

20.非易失存储

20.1 TPM-NV_DefineSpace

为必要的显示指数创建空间。这个定义包括用于读写的存取需求。新创建的空间定义的范围不包括用于管理该空间的区域。设置TPM _PERMANENT_FLAGS->nvLocked为TRUE。

20.2 TPM_NV_WriteValue

TPM_NV_WriteValue命令写一个值到定义好的区域。写操作是经TPM拥有者授权的或者未授权的,由其他属性来保护。当部存在TPM拥有者时执行写操作。

20.3 TPM_NV_WriteValueAuth

TPM_NV_WriteValueAuth命令写入到事先定义好的区域里,此区域要求被授权可进行写操作。当被授权而不是拥有者授权时才调用此命令;否则,调用TPM_NV_WriteValue命令。

20.4 TPM_NV_ReadV alue

从NV存储中读取一个值。这个命令使用可选的拥有者授权。Action 1 指出如果NV未被锁定,那么未经任何授权继续读取NV区域。无须选定TPM拥有者,这个命令允许平台

制造者设置NV区域,读取该区域,然后将其锁定。

20.5 TPM_NV_ReadV alueAuth

该命令要求被设置blob点的值为可读取的。

21.会话管理

三个被定位在TPM_STANY_DA TA里的TPM_RT_CONTEXT会话资源,一起作用来控制会话保存和加载:contextNonceSession, contextCount和contextList[]。

所有三个会话必须在执行TPM_Startup(ST_ANY)时进行初始化,TPM_Startup使所有已保存的会话无效。TPM_Startup(ST_STA TE)可以重建这三个会话,同时也可以加载已经被保存了的会话。这个操作被视为TPM_RT_CONTEXT的启动结果。

TPM_SaveContext命令创建了一个ContextBlob,其中包含一个加密的contextNonceSession会话。TPM_LoadContex用来核对当前值。所以初始化contextNonceSession,会使所有已保存的内容无效。当前的值很大,被保护并且正在制造一个不可行的重放。

ContextBlob也包含一个公开的,但是被保护的ContextCount。对于每个保存了的ContextBlob,都会增加一个计数。在contextList[]会话中,TPM也会保存ContextCount值。执行TPM_LoadConte时,TPM设ContextBlob值有效,不执行contextList[]会话。因为contextList[]会话有限,他会限制有效的已保存的会话数量。又因为ContextCount不能被隐藏,所以限制了整个已保存的会话数量。

加载了一个ContextBlob之后,其ContextCount实体会被从contextList[]会话中删除。这为后来的实体释放出了内容列表的空间,随后置ContextBlob为无效,所以一个被保存的ContextBlob仅仅只可以被加载一次。

TPM_FlushSpecific命令也定义了一个ContextCount实体,该实体也从contextList[]会话中删除。同时该命令可以使一个单独的ContextBlob无效。这不同于TPM_FlushSpecific,它定义了一个使一个已加载的会话无效的会话句柄。

21.1 TPM_KeyControlOwner

这个命令主要控制一些密钥的属性,这些密钥被存储在TPM密钥缓冲器里。

如果OwnerEvict这个比特位被设置为真,那么在整个TPM_Starup命令的执行过程中这个密钥都存储在TPM里。对于TPM拥有者来说,收回密钥的唯一的方法是再次执行TPM_KeyControlOwner命令,把拥有者控制位设置为false,然后执行TPM_FlushSpecific 命令。

密钥句柄无效,而且不涉及已授权的实体。

21.2 TPM_SaveContext

在TPM外部,TPM_SaveContext命令用于保存一个已加载的资源。该命令执行成功后,TPM自动释放会话内存,但是会为密钥保留存储空间。

因为可以在任意时刻加载上下文团点(blob),不依赖于TPM_SaveContext命令来而限制存储一个实体,如密钥。如果使用实体受到限制,则意味着使用了如授权信息或者PCR’s。

通常,TPM_SaveContext命令可以保存传输会话,但是它不可以保存唯一的传输会话,因为任意的序数(不是TPM_ExecuteTransport)会终止唯一的传输会话。当中断命令从传输日志中被隐藏时,这个操作会阻止唯一的传输会话被保存和再次加载。

21.3 TPM_LoadContext

TPM_LoadContext命令把一个之前已被保存的内容加载到TPM里。这个命令返回一个句柄。

22.导出

在TPM内部有大量资源需要导出。当TPM使用的数量或资源超出了可以承载的空间就需要导出。对于很难再次加载的资源来说,外部的实体在导出之前,首先应该保存一个内容。

22.1TPM_FlushSpecific

执行TPM_FlushSpecific命令会从TPM里生成一个特殊的句柄。

23.时间标记

在任意时刻都可以获取TPM时间标记。时间标记与真实时间是通过一个TPM外部的协议联系起来的。细节部分可以参考设计文档。

时钟类型变量的设置属于一次性操作,允许TPM被配置成被安装的平台类型。

对于TPM来说,TPM和平台制造商会通过平台的动力循环来增加定时器标记。

23.1 TPM_GetTicks

这个命令返回TPM的当前标记数。

23.2 TPM_TickStampBlob

该命令把时间戳应用到已被传递的团点blob上。关于仅仅在TPM上存在的团点blob,在时间显示上,TPM无法对其表示。

24.传输会话

24.1 TPM_EstablishTransport

这个命令用于建立传输会话。依赖于会话特定的属性,可以建立共享密钥、加密密钥和会话日志。调用TPM_ExecuteTransport命令将该会话。

对于传输会话内部来说,唯一的限制条件是没有会话嵌套。这将允许执行删除内部状态和使TPM不可操作。

24.2 TPM_ExecuteTransport

发送一个封装好的TPM命令到TPM(TPM没有封装该命令),然后再执行TPM_ExecuteTransport命令。

TPM_ExecuteTransport命令把同样转动的当前范例作为其他被授权的TPM命令。在执行TPM_EstablishTransport命令时启用这个平均当前值,在执行每个TPM_ExecuteTransport 时改变这个值。

对于传输会话内部来说,唯一的限制条件是没有会话嵌套。这将允许执行删除内部状态和使TPM不可操作。

通常,因为日志不能记录密钥句柄,对应的共钥分类可以被记录。当密钥句柄被记录(例如,TPM_OwnerReadInternlPub),共钥也会被日志记录下来。

24.3 TPM_ReleaseTransportSigned

该命令完成传输会话。对于这个会话如果打开了日志,然后在会话期间,这个命令会返回一个所有操作的hash值以及个hash值的数字签名。

如果关闭了日志,那么这个命令执行无效,并且会导致出错。

TPM_ReleaseTransportSigned命令用到两个授权会话和密钥(用于日志和会话授权的签名)。会话授权检验了对日志进行签名的请求者是会话的拥有者。如果不提出这个限制,那

么攻击者可以关闭日志,并且使用他们自己的密钥来签名。

会话日志的hash值包括与TPM_ReleaseTransportSigned命令的输入状态相关的信息,不包含输出状态信息。

25.单一计数器

25.1 TPM_CreateCounter

这个命令创建一个计数器,但是不会删除该计数器。计数器创建的同时,会被分配一个AuthData值,并且会设置好计数器的初始启用值。该初始值是当前内部基数值加一。设置新的计数器为内部基数可以避免系统攻击者试图使用旧的计数器值。

25.2 TPM_IncrementCounter

这个被授权的命令用来给被显示的计数器加一。一旦一个计数器已经被加,那么在执行TPM_Startup(ST_CLEAR)之前,所有随后的增加必须是为了同样的句柄。

当没有计数器时,对于校验命令参数的确认而言,次序防止了攻击者创建一个拒绝服务攻击。

25.3 TPM_ReadCounter

读取计数器为呼叫者依次提供当前计数。

25.4 TPM_ReleaseCounter

该命令用于释放计数器,所以不对被显示的计数器进行读数或者增加操作。

25.5 TPM_ReleaseCounterOwner

这个命令用于释放计数器,所以不对被显示的计数器进行读数或者增加操作。

26.DAA命令

26.1 TPM_DAA_Join

TPM_DAA_Join命令用于为一个特定的DAA发布授权,在TPM里创建DAA参数。

26.1 TPM_DAA_Sign

TPM被保护的能力;TPM拥有者必须为用户必须提供授权。

27. Deprecated commands 不赞成命令

这部分的命令是原1.1版本的命令但是修改为执行其它的功能。1.2版本这些命令旧功能依然可用,但是推荐使用其新功能。

这些命令的运行不需要使用新数据格式。

27.1 Key commands

密钥命令提供一种处理密钥的新方式,用作标准上下文命令。所以TPM_EvictKey命令由TPM_FlushSpecific命令来处理,TPM_Terminate_Handle命令由TPM_FlushSpecific命令来处理。.

27.1.1 TPM_EvictKey

命令必须检验密钥的ownerEvict标志的状态,如果标志值为TRUE则返回TPM_KEY_CONTROL_OWNER

27.1.2 TPM_Terminate_Handle

它允许TPM管理者在一个会话处理中清除信息。

TPM会保持授权会话,即使附加的key没有装载或者授权会话本身没有被装载。一个命令的运行需要有这样的会话。外部软件,在命令执行之前,负责装载实体和授权会话信息。

27.2 Context management

1.1版的上下文命令是为特定资源的类型编写的。1.2命令适用所有资源类型。所以Save xxx 命令被TPM_SaveContext命令所替代,LoadXXX命令由TPM_LoadContext命令代替。

27.2.1 TPM_SaveKeyContext

该命令在TPM外部保存一个装载的key。创建key上下文之后TPM自动释放key所使用的内部存储器。Key上下文blob格式对于TPM是特定的。

27.2.2 TPM_LoadKeyContext

该命令装载一个密钥上下文blob到TPM,通过TPM_SaveKeyContext的调用可以重新得到。命令成功完成处理过程返回值可用于key的访问。

27.2.3 TPM_SaveAuthContext

该命令在TPM外部保存一个装载的授权会话。创建一个授权上下文BLOB之后,TPM自动释放会话所使用的内部存储器。授权上下文blob格式对于TPM是特定的。

27.2.4 TPM_LoadAuthContext

该命令装载一个授权上下文BLOB到TPM,并通过TPM_SaveAuthContext的调用可以重新得到。命令成功完成处理过程返回值可用于授权会话的访问。

27.3 DIR commands

DIR命令被NV 存储命令代替。

1.1版本的DIR[0]现在是TPM_PERMANENT_DATA -> authDIR[0],并且对于TPM一直可用。使用DirIndex0参数下的DIR命令现在是使用nvIndex TPM_NV_INDEX_DIR.的NV命令。

如果TPM销售者支持额外的DIR寄存器,TPM销售者会返回错误或者提供特定的映射标识这些DIR寄存器和NV存储位置的对应关系。

27.3.1 TPM_DirWriteAuth

该操作提供数据完整寄存器(DIRs)的写权限。DIRs对于TPM防护位置不再是可用的存储寄存器。批准此动作需要有所有者的鉴定。

访问权限也可以通过nvIndex参数值为TPM_NV_INDEX_DIR的NV命令获得。当nvLocked 为FALSE的时候不需要有所有者的授权。

1.2版本需要只需要一个DIR。如果指定的DIR不存在,TPM_DirWriteAuth操作将返回TPM_BADINDEX。

27.3.2 TPM_DirRead

该操作提供DIRs的读权限。因为在启动初期没有加密可用的授权数据是可用的,所以执行

该动作不需要授权。TSS执行可能会选择提供其他方式对此动作授权。1.2版本需要只需要一个DIR。如果指定的DIR不存在,TPM_DirRead操作将返回TPM_BADINDEX。

27.4 Change Auth

改变授权命令可以在创建一个传输机密的会话中被复制并发出changeAuth命令。

27.4.1 TPM_ChangeAuthAsymStart

该命令为一个实体开始改变授权数据的处理过程。它创建一个OIAP会话并保持下来供其相对的命令TPM_ChangeAuthAsymFinish使用。

该命令创建一个临时的不对称公钥“tempkey”来保证要发送到TPM的新授权数据的机密性。该命令保证tempkey由一个真实TPM产生,这是通过产生一个由TPM身份证书签名的certifyInfo结构来实现的。TPM身份证书的所有者需要协作这个命令,因为该命令需要授权去使用该身份证书。

Tempkey和certifyInfo将被送给要更改授权的实体所有者。所有者使用certifyInfo和一个TPM_IDENTITY_CREDENTIAL来检验Tempkey是由真实的TPM产生的。具体过程是使用一个CA的公钥校验TPM_IDENTITY_CREDENTIAL,然后校验TPM_IDENTITY_CREDENTIAL内身份证书的公钥签名的certifyInfo结构,再通过比较certifyInfo内的摘要值来检验Tempkey。所有者用Tempkey加密需要的新授权数据并发送该加密数据到TPM_ChangeAuthAsymFinish命令,要知道只有特定身份的TPM才能解析该新授权数据。

27.4.2 TPM_ChangeAuthAsymFinish

TPM_ChangeAuth命令允许一个实体的所有者为该实体改变授权数据。

该命令需要所有者父级实体的协作,因为授权数据有可能会使用到父级实体。命令需要知道现有授权数据和所产生的新授权数据的信息。NewAuthLink参数提供了这些信息。用“tempKey”加密的新授权数据“encNewAuth”可以通过TPM_ChangeAuthAsymStart.得到。父级保留着控制子级改变授权数据的能力,防止子级知道新的授权数据。

ChangeProof参数能够证明新授权数据是否被适当地插入到实体当中。来自TPM的Nonce 提供了一个信息熵源,授权数据值可能是一个低的平均信息量值(一个密码的哈希等)。

27.5 TPM_Reset

该命令释放所有现有授权会话关联的资源。这对一个TSS驱动丢失了TPM状态的情况非常有用。

27.6 TPM_OwnerReadPubek

返回背书密钥的公共部分。需要TPM所有者的授权。

27.7 TPM_DisablePubekRead

TPM所有者可能有希望防止任何实体读取PUBEK的情况。这个命令设置non-volatile标识,这样TPM_ReadPubek命令就会返回TPM_DISABLED_CMD。

这个命令基本上是不赞成使用的,现在可以通过TPM_TakeOwnership命令来设置标志值为FALSE,之所以保留这个命令了,是为了向后的兼容性。

27.8 TPM_LoadKey

相关主题
文本预览
相关文档 最新文档