TPM命令

更新时间:2023-10-04 22:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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.7 TSC_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.1 TPM_SHA1Start

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

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

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

该命令结束之后, TPM_SHA1Complete或者TPM_SHA1CompleteExtend命

令之前,接收到任何其他命令如TPM_SHA1Update等,将导致SHA1会话的失效。

13.2 TPM_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.1 TPM_CreateEndorsementKeyPair

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

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

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

21.会话管理

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

所有三个会话必须在执行TPM_Startup(ST_ANY)时进行初始化,TPM_Startup使所有已保存的会话无效。TPM_Startup(ST_STATE)可以重建这三个会话,同时也可以加载已经被保存了的会话。这个操作被视为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

1.2版本不赞成使用该命令是因为它返回新密钥句柄的HMAC。这种封装使得TSS或者其他管理实体把TPM处理转换成一个虚拟处理的环境中使用起来比较困难。

软件使用1.2版本TPM的该命令会在返回句柄的时候产生冲突,因为1.2版本TPM在句柄的低位3个字节使用了随机值。所有新软件应该使用LoadKey2去允许管理软对key句柄的操作。

在TPM使用一个key加解密、加解封装、加解绑定、签名或者执行其他动作之前,key需要送到TPM。该命令的功能是把KEY装载到TPM以供使用。

TPM来指派KEY句柄。TPM就是通过使用句柄来给一个装载进来的key定位的。假定句柄可以因为key的管理操作改变。上层的软件要负责保持句柄和其他外部软件使用到的标签之间的映射。

该命令负责执行对KEY使用的限制。如当想要装载一个存储的key时,需要检验该存储的key的限制(2048大小等)。

Load命令要保持一个是否有在当前key层次以前的key使用ParentPCRStatus跳到一个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产品,并对其进行检验。

28.删除命令

28.1 TPM_GetCapabilitySigned

像TPM_GetCapabilityOwner一样,此命令允许不正确值的签名。 TPM_GetCapabilitySigned几乎与TPM_GetCapability命令相同。不同之处在于其输入包括一个随机数,响应包括一个数字签名来证明响应源。

如果呼叫者本身要求身份证明,那么使用仅仅TPM和呼叫者才有的AuthData值作为签名密钥。如果呼叫者要求可信第三方的证明,那么签名密钥必须是可信第三方确认的签名值。这里可以使用TPM身份密钥。 28.2 TPM_GetOrdinalAuditStatus

为了给定的序数,得到审计标志状态值。 28.3 TPM_CertifySelfTest

TPM_CertifySelfTest命令使TPM运行一个完全自检测操作。如果通过检测,则返回一个认证值。

如果呼叫者本身要求身份证明,那么使用仅仅TPM和呼叫者才有的AuthData值作为签

名密钥。如果呼叫者要求可信第三方的证明,那么签名密钥必须是可信第三方确认的签名值。这里可以使用TPM身份密钥。

本文来源:https://www.bwwdw.com/article/m18d.html

Top