APP下载

基于Duplication Authority 的TPM2.0 密钥迁移协议∗

2019-10-28,

软件学报 2019年8期
关键词:解密密钥加密

谭 良 , 宋 敏

1(四川师范大学 计算机科学学院,四川 成都 610101)

2(中国科学院 计算技术研究所,北京 100190)

可信计算技术的基本思想是:在通用计算平台上嵌入一个防篡改的硬件可信安全芯片,利用芯片的安全特性保证系统按照预期的行为执行,从根本上提高终端的安全性[1].TPM(trusted platform module)[2]是国际广泛使用的是符合可信平台模块标准的安全芯片,具有密码学功能和受保护的存储空间,能够为可信计算平台提供密钥管理、平台数据保护、完整性存储与报告、身份标识等功能[2−4].

密钥管理是TPM 非常重要的功能,它是TPM 能够有效地提供其他各项功能的前提和基础.为了满足密钥的安全存储、分发和备份,TPM 采用层次型的存储保护体系,并提供密钥迁移(复制)接口.TPM1.1[5]规范中定义的密钥迁移接口是TPM_AuthorizeMigrationKey,TPM_CreateMigratedBlob和TPM_convertMigratedBlob等;TPM1.2[6]规范定义的密钥迁移接口是TPM_AuthorizeMigratinKey(),TPM_CMK_ApproveMA(),TPM_CMK_CreateKey(),TPM_CMK_CreateTicket(),TPM_CMK_CreateBlob()和TPM_CMK_ConvertMigration()等;TPM2.0[7]规范定义的密钥复制接口是TPM2_Duplicate()和TPM2_Import().通常,用户或上层应用可以通过以上接口设计密钥迁移协议,将源TPM 中的密钥迁移到目的TPM 中,以实现TPM 芯片间密钥的共享.为了保证整个迁移过程的安全,需要提供机密性、完整性和认证性.

然而,TPM2.0 的密钥迁移协议设计会更加复杂.一方面,由于TPM2.0 已支持对称密钥对象,使得在设计密钥迁移协议时需要考虑更多的迁移组合.因为迁移密钥既可以是对称密钥也可以是非对称密钥,而新父密钥也可以是对称密钥或非对称密钥,不同的迁移需求组合在协议设计过程中需要进行不同的设计.另一方面,TPM2.0是通过迁移密钥对象的复制属性(fixedTPM,fixedParen,encryptedDuplication)和新父密钥的newParentHandle类型来决定迁移方式和迁移过程.不同的组合,其迁移方式和迁移过程是不同的,特别是在密钥复制过程中是否进行innerwrap和outerwrap,是保证密钥迁移的机密性、完整性和认证性的关键.通过进一步研究发现,基于密钥复制接口的密钥迁移协议至少存在3 个问题:一是缺少交互双方TPM 的相互认证,会导致密钥能够在敌手和TPM 间迁移;二是当迁移密钥的属性encryptedDuplication=0 且新父密钥的句柄newParentHandle=TPM_RH_NULL时,复制接口不能实施innerwrap和outerwrap,迁移密钥将以明文传输而造成泄露;三是当新父密钥是对称密钥时,innerwrap中的对称加密密钥以及outerwrap中的密钥种子如何在源TPM 与目标TPM 之间安全交换,《TPM-Rev-2.0-Part-1-Architecture-01.38》并没有给出具体的解决办法.

为此,本文提出了基于Duplication Authority 的密钥迁移协议.该协议以Duplication Authority 为认证和控制中心,通过判定迁移密钥的复制属性、新父密钥的密钥类型和句柄类型来决定迁移流程.最后,对该协议进行了安全分析和实验验证.

本文第1 节简介TPM 密钥迁移的相关背景知识.第2 节介绍现有的TPM 密钥迁移协议并指出其存在的问题.第3 节详述本文提出的基于Duplication Authority 的密钥迁移协议.第4 节对提出的协议进行分析.第5 节是实验验证和性能对比分析.第6 节介绍可信安全芯片密钥迁移的相关研究工作.第7 节总结全文.

1 背景知识

本节从TPM 2.0 的密钥类型和结构、密钥对象管理保护体系、密钥迁移类接口这3 个方面介绍本文的背景知识.

1.1 TPM2.0的密钥类型和结构

相比于TPM1.2,TPM2.0 的密钥类型和结构发生了较大的变化.下面我们对此进行详细的介绍.

1.1.1 TPM2.0 的密钥类型

1.按照密钥功能组合分类

TPM2.0 中密钥对象的基本属性包括:

· Restricted Attribute:专用属性,表明该密钥只能对特定对象进行操作.

· Sign Attribute:签名属性,表明该密钥对象是否可以用于签名.

· Decrypt Attribute:机密属性,表明该对象是否可以用于加解密.

根据以上3 个属性,TPM2.0 将密钥对象分为8 类,见表1.

这8 类密钥与TPM1.2 中7 种类型密钥(签注密钥(endorsement key,简称EK)、存储密钥(storage key,简称SK)、身份认证密钥(attestation identity key,简称AIK)、签名密钥(signing key)、绑定密钥(binding key)、继承密钥(legacy key)和验证密钥(authentication keys))的对应关系见表2.

Table 2 Key type correspondence between TPM1.2 and TPM2.0表2 TPM1.2 与TPM2.0 的密钥类型对应关系

由此可见,TPM2.0 的密钥类型更精确,其中,对应于TPM1.2 中的TPM_KEY_SIGNING,TPM_KEY_IDENTITY这两类密钥功能略有增加.

2.按照密钥复制属性分类

TPM2.0 中,密钥对象除了基本属性外,还包括一些其他属性,如fixedTPM和fixedParent,stclear,sensitiveDataOrigin,userWithAuth,adminWithPolicy,noDA和encryptedDuplication.根据fixedTPM和fixedParent的属性组合,可以将密钥对象分为可复制密钥和不可复制密钥.如表3 所示.本文所指的可复制密钥,就是指fixedTPM=0 和fixedParent=0 的密钥.

Table 3 Key classification for duplication表3 密钥可复制分类表

1.1.2 TPM2.0 的密钥结构

TPM2.0 中,密钥对象的基本结构包括3 个域:PublicArea,SensitiveArea或PrivateArea,对TPM2.0 内部的任意密钥k,表示为k=(PublicArea,SensitiveArea);外部的任意密钥,通常表示为k=(PublicArea,PrivateArea),其中,

·PublicArea

1)type:密钥类型.

2)nameAlg:此密钥支持的密码算法.

3)objectAttributes:密钥属性,包括功能(Sign,Decrypt和Restricted)、授权(userWithAuth,adminWithPolicy和noDA)、复制(fixedTPM,fixedParent和encryptedDuplication)、生成方式(sensitiveDataOrigin)以及重置(stclear).

4)authPolicy:授权策略.

5)parameters:此类密码算法的参数.

6)unique:非对称密钥此项代表公钥;对称密钥此项代表其SensitiveArea的摘要值.

·SensitiveArea

1)sensitiveType:敏感数据类型.

2)authValue:授权值.

3)seedValue:对于对称的和非对称的存储密钥,由该值产生保护child 对象的密钥.对于非对称密钥的非存储密钥当前无用.对于其他对象,该值与sensitive一起HASH 产生unique摘要值.

4)sensitive:敏感参数值.对于非对称密钥,此值表示私钥:对于对称密钥,此值就是key;对于消息码,此值就是key;对于数据对象,此值就是敏感数据.

·PrivateArea

1)encyptedsensitivearea:此密文是由父密钥的seedValue产生的key对sensitivearea加密的值.

2) HMAC 消息码:此消息码是由父密钥的seedValue产生的key对sensitivearea进行HMAC 的值.

1.2 TPM2.0密钥对象管理存储保护体系

TPM2.0 可通过TPM2_CreatePrimary,TPM2_Create和TPM2_CreateLoaded生成种子密钥对象、普通密钥对象和派生密钥对象,所有的密钥对象形成一棵密钥树,其中,种子密钥对象一般作为根密钥保护所在层次的子密钥,如图1 所示.在此密钥树中,TPM2.0 将密钥对象分为可复制密钥对象、可跟随父密钥复制密钥对象以及不可复制密钥对象.不可复制密钥对象只能与原TPM 芯片绑定,不能被复制;而可复制密钥对象可以复制到其他TPM 中使用,而可跟随父密钥复制密钥对象的存在使得在密钥树中一次能复制一棵子树,比TPM1.2 中的密钥迁移更灵活,效率更高.

Fig.1 TPM2.0 key protect tree图1 TPM2.0 的密钥树

在 TPM2.0 密钥树中,存储父密钥采用对称加密方法保护孩子密钥,加密密钥由父密钥的密钥种子seedValue产生,加密算法由父密钥的nameAlg指定.这一点与TPM1.2 中用非对称密钥的私钥对孩子的私钥进行加密保护不同,因此在TPM2.0 的密钥树中,无论是对称密钥还是非对称密钥,只要是存储密钥,都可以作为父节点.如图2 所示.

Fig.2 Key hierarchy protection model of TPM2.0图2 TPM2.0 的密钥层次保护模型

1.3 TPM2.0密钥对象复制接口

TPM2.0 完整的密钥复制流程是将源TPM 的密钥对象复制到目标TPM,因此,密钥复制应该包括两个接口:

其一是复制数据的生成;其二是复制数据的加载.

· 接口1:复制数据生成接口:

其中,objectHandle为复制密钥的句柄;newParentHandle是新父密钥句柄;encryptionKeyIn是innerwrap加密密钥,该密钥或由caller 传入,或是由TPM 产生;symmetricAlg是对称加密算法.该函数执行后返回3 个值:其一是encryptionKeyOut,encryptionKeyOut返回的是由TPM 产生的内部加密密钥,如果TPM 没产生内部加密密钥,该值返回null;其二是duplicate,duplicate是复制数据,封装了被复制密钥的Sensitive Area;最后是outSymSeed,outSymSeed是outerwrap的密钥种子,由它可以产生外部对称加密的密钥.

该接口的执行过程如下.

(1) 检查迁移密钥的属性fixedTPM和fixedParent:如果设置不是(0,0),就结束复制过程.

(2) 检查迁移密钥的属性encryptedDuplication:

取各组大鼠右侧踝关节组织适量,经4%多聚甲醛溶液中固定2 d、EDTA脱钙液中脱钙10 d后,用大量水清洗,经乙醇(体积分数分别为80%、95%、100%)梯度脱水、石蜡包埋、切片(厚度5 μm)后,行HE染色,以中性树胶封片,置于光学显微镜下观察大鼠踝关节组织病变情况。

➢ 如果设置为1,则判断newParentHandle是否为TPM_RH_NULL:如果为TPM_RH_NULL,则结束复制过程;否则,转到步骤(3);

➢ 如果设置为0,则转到步骤(4).

(3) 执行innerwrap,用encrptionKeyIn对复制密钥的sensitiveArea进行加密,生成encSensitive.

(4) 执行outerwrap,用密钥种子seed生成加密密钥和HMAC 密钥,对encSensitive进行加密和HAMC 运算,得到dupSensitive和outerHMAC.

· 接口2:复制数据导入接口:

其中,newparentHandle是新父密钥句柄;encryptionKey是源TPM 内的innerwrap密钥,其值由TPM2_Duplicate的返回值encryptionKeyOut提供;duplicate是复制数据,此值由TPM2_Duplicate的返回值duplicate提供;inSymSeed是源TPM 内的outerwrap密钥种子,此值由TPM2_Duplicate的返回值outSymSeed提供.

该接口的执行过程如下:

(1) 检查复制密钥的属性fixedTPM和fixedParent:如果设置不是(0,0),就结束导入过程.

(2) 检查新父密钥是否为存储密钥:如不是,结束导入过程.

(3) 检查innerwrap的加密密钥encryptionKey是否正确:如果不正确,结束导入过程.

(4) 检查outerwrap的密钥种子inSymSeed是否正确:如果不正确,结束导入过程.

(5) 由inSymSeed和newparentHandle恢复出源TPM 的outerwrap的HAMC 密钥,通过outerHAMC验证dupsensitive及其name的真实性和完整性;然后再恢复出outerwrap的对称密钥,对dupsensitive解密得到encsensitive.

(6) 用encryptionKey对encsensitive进行解密,得到被复制密钥的sensitive;并对sensitive及其name进行完整性校验.

通过对TPM2_Duplication接口和TPM2_Import接口的分析可知:采用TPM2.0 的密钥复制接口来设计密钥迁移协议,需要将新父密钥从目标TPM 传递到源TPM,源TPM 调用TPM2_Duplication接口得到被迁移密钥的复制数据,目标TPM 调用TPM2_Import将复制数据载入.基本的流程如下.

(1) 目标TPM 将新父密钥传递给源TPM.

(2) 源 TPM 调用TPM2_Duplication接口,根据迁移密钥的复制属性(fixedTPM,fixedParen,encryptedDuplication)和新父密钥的newParentHandle类型实施innerwrap和outerwrap,得复制数据.

(3) 将复制数据传递给目标TPM,目标TPM 调用TPM2_Import将被迁移密钥加载到新父密钥下.

1.4 innerwrap和outerwrap过程

由第1.3 节可以看出,在利用TPM2_Duplication接口和TPM2_Import接口进行密钥迁移时,复制过程的安全性不仅依赖innnerwrap,而且依赖outerwrap.下面我们对innnerwrap和outerwrap进行分析.

1.4.1innerwrap过程

通过对《TPM-Rev-2.0-Part-1-Architecture-01.38》和《TPM-Rev-2.0-Part-3-Commands-01.38-code》分析发现,密钥复制过程中是否进行innerwrap是由迁移密钥的属性encryptedDuplication和新父密钥的密钥句柄类型决定,只有当encryptedDuplication=1 且newParentHandle!=TPM_RH_NULL时,innerwrap才能发生.innerwrap过程中需要的对称加密密钥由caller 决定,caller 可以选择输入,也可以选择由TPM 自行产生.

innerwrap可以在复制过程中为迁移密钥提供完整性和机密性,包括两个步骤:首先是用复制密钥的Hash算法计算复制密钥sensitive和name的哈希值innerIntegrity,保证复制密钥的完整性;然后,用某对称加密算法的CBF 模式对innerIntegrity||sensitive进行加密,得到encSensitive,其中,需要的对称加密算法和密钥由caller 将其作为参数传入TPM2_Duplication.

从以上过程可以看出,源TPM 要完成innerwrap,需要确保加密密钥安全地传递到目的TPM.因此,如何将此加密密钥安全地传递到目的TPM,是需要考虑的重要问题.需要考虑如下3 种情况.

(1) 如果新父密钥是非对称密钥,无论迁移密钥是对称密钥还是非对称密钥,innerwrap中需要的对称加密密钥可以由源TPM 产生或由caller 输入,且可以采用《TPM-Rev-2.0-Part-1-Architecture-01.38》中B.10.3 或C.6.3 中规定的算法进行保护交换.

(2) 如果新父密钥是对称密钥,而复制密钥是非对称密钥,则innerwrap中需要的对称加密密钥可以由目的TPM 产生,且可以采用《TPM-Rev-2.0-Part-1-Architec-ture-01.38》中B.10.3 或C.6.3 中规定的算法进行保护交换.

(3) 如果新父密钥是对称密钥,而迁移密钥也是对称密钥,则innerwrap中需要的密钥无论是由源TPM 产生或目的TPM 产生或caller 输入,《TPM-Rev-2.0-Part-1-Architecture-01.38》中还未给出此密钥的保护交换办法.

1.4.2 outerwrap 过程

通过对《TPM-Rev-2.0-Part-1-Architecture-01.38》和《TPM-Rev-2.0-Part-3-Commands-01.38-code》的分析发现,密钥复制过程中是否进行outerwrap是由新父密钥的密钥句柄类型决定,当newParentHandle!=TPM_RH_NULL时,outerwrap就会发生;当newParentHandle=TPM_RH_NULL时,outerwrap不会发生.究其原因是:outerwrap过程主要由新父密钥控制,如果新父密钥的句柄为TPM_RH_NULL,则新父密钥不能为outerwrap提供需要的算法及参数.

outerwrap可以在复制过程中为迁移密钥提供机密性、完整性以及对新父密钥的认证性,包括两个步骤.

· 一是对encSensitive进行加密,具体过程为:首先,获得一个密钥种子seed;然后,将此密钥种子、新父密钥的npNameAlg和迁移密钥的Name作为KDFa()的参数,产生对称加密密钥;最后,采用新父密钥的对称加密算法对encSensitive进行加密,得到dupSensitive.

· 二是对dupSensitive和Name进行HAMC 运算,产生消息码outerHMAC.具体过程为:首先,用Seed和新父密钥的npNameAlg作为KDFa()的参数,产生HAMC 密钥;然后,采用新父密钥的HMAC 算法进行运算,获得消息码outerHMAC.

从以上过程可以看出,源TPM 要完成outerwrap不仅需要获得新父密钥的相关参数,而且需要确保密钥种子seed能在源TPM 和目的TPM 之间安全地交换.需要考虑的3 种情况与innerwrap要考虑的3 种情况一致.

2 问题分析

本节先基于TPM2.0 的密钥复制接口设计最初的密钥迁移协议,然后详细分析其存在的问题[8].

该初始迁移协议包括6 个参与实体:源TPM、源TPM 的所有者、目标TPM、目标TPM 的所有者、源TPM所在的主机、目标TPM 所在的主机,其中,前4 个实体是可信的,而源和目标TPM 所在的主机被认为是不可信的.为了叙述方便,我们定义如下符号及函数,见表4.

Table 4 Symbols and functions表4 符号及函数

2.1 基于密钥复制接口的密钥迁移协议

基于第1 节介绍的背景知识,并根据《TPM-Rev-2.0-Part-1-Architecture-01.38》和《TPM-Rev-2.0-Part-3-Commands-01.38-code》规范的要求,我们设计出基于复制接口的密钥迁移协议,其流程如下.

1.HD→HS:newParent.publicAera,newparentHandle,symmetrical.

2.OS:

(1) 获得objectHandle,newparentHandle.

(2) 决定encryptionKeyin的产生方式,可以输入,也可以由TPM 内部产生.

(3) 调用接口TPM2_Duplication(objectHandle,newParentHandle,encrptionKeyIn,symmetricAlg).

3.TS:执行复制过程:

(1) 检查迁移密钥的属性fixedTPM和fixedParent:如果设置不是(0,0),就结束复制过程,转到步骤10.

(2) 检查迁移密钥的属性encryptedDuplication:

➢ 如果设置为1,则判断newParentHandle是否为TPM_RH_NULL:如果为TPM_RH_NULL,则结束复制过程,转到步骤10;否则转到步骤3 中的(3);

➢ 如果设置为0:newParentHandle不为TPM_RH_NULL,则转到步骤3.(5);否则,转向步骤3.(7).

(3) 执行innerwrap,由 caller 输入或 TPM 产生encrptionKeyIn,并用encrptionKeyIn对迁移密钥的sensitiveArea进行加密,生成encSensitive.

(4) 对encrptionKeyIn进行保护,分为两种情况:

➢ 如果新父密钥是非对称密钥,如RSA 或ECC 密钥,则用新父密钥的公钥加密encrptionKeyIn,即

➢ 如果新父密钥是对称密钥,则直接sysmetrickey=encrptionKeyIn.

(5) 执行outerwrap,由TPM 产生密钥种子seed,用密钥种子seed生成加密密钥和HMAC 密钥,对encSensitive进行加密和HAMC 运算,得到dupSensitive和outerHMAC.

(6) 对Seed进行保护,分两种情况:

➢ 如果新父密钥是非对称密钥,如RSA 或ECC 密钥,则用新父密钥的公钥加密Seed,即CSeed=RSA_OAEP(newParentHandle,Seed)或ECC_ECDH(newParentHandle,Seed),并将sysmetricSeed=Cseed;

➢ 如果新父密钥是对称密钥,则直接sysmetricSeed=Seed.结束复制过程,转到步骤4.

(7) 对复制密钥既不进行innerwrap,也不进行outerwrap,将dupSensitive=sensitiveArea,sysmetrickey=NULL,sysmetricSeed=NULL.

4.TS→OS:dupSensitive,outerHMAC,sysmetrickey,sysmetricSeed.

5.OS→HS:dupSensitive,outerHMAC,sysmetrickey,sysmetricSeed.

6.HS→HD:dupSensitive,outerHMAC,sysmetrickey,sysmetricSeed.

7.HD→OD:dupSensitive,outerHMAC,sysmetrickey,sysmetricSeed.

8.OD→TD:dupSensitive,outerHMAC,sysmetrickey,sysmetricSeed.

9.TD:执行导入过程:

(1) 检查迁移密钥的属性fixedTPM和fixedParent:如果设置不是(0,0),就结束导入过程,转到步骤10.

(2) 检查新父密钥是否为存储密钥:如不是,结束导入过程,转到步骤10.

(3) 根据sysmetricSeed参数是否为NULL来判断是否进行了outerwrap.

➢ 如果为NULL,则转到下一步;

➢ 否则,直接得到seed或用私钥解密sysmetricSeed得到seed,按照symmetricAlg算法生成HMAC密钥HMACkey,并对dupSensitive||name进行HAMC 运算,将得到的值与outerHMAC比较:如果不相等,终止导入过程,转到步骤10;如果相等,则用seed生成对称加密密钥symkey并解密dupSensitive,得到encSensitive.

(4) 根据sysmetrickey参数是否为NULL来判断是否进行了innerwrap.

➢ 如果为NULL,则转到步骤10;

➢ 否则,直接得到encrptionKeyIn或用新父密钥的私钥解密sysmetrickey得到encrptionKeyIn,用symmetricAlg算法对encSensitive进行解密,得到Sensitive和name,用Hash 算法对Sensitive||name进行完整性验证:验证通过,则表明迁移成功,转到步骤10;验证不通过,则表明迁移不成功,转到步骤10;

10. 结束迁移过程.

2.2 存在问题

从第2.1 节可以看出,基于TPM2.0 密钥复制接口设计的密钥迁移协议存在如下安全问题.

· 问题1:该协议缺少源TPM 和目标TPM 间的身份认证,导致密钥能够在敌手和TPM 间迁移.存在着如下两种情况:(1) 源TPM 不能认证newParent是否是目标TPM 的密钥,导致敌手可以用其控制的密钥迁移源TPM 的密钥,并获得密钥明文;(2) 目标TPM 不能认证迁移数据是否来自源TPM,使敌手可以将其控制的密钥迁移到目标TPM 中.

· 问题2:当复制密钥的属性encryptedDuplication=0 且新父密钥的句柄newParentHandle=TPM_RH_NULL时,复制接口不能实施innerwrap和outerwrap,迁移密钥将以明文传输而造成泄露.

· 问题3:当新父密钥是对称密钥时,innerwrap中的对称加密密钥以及outerwrap中的密钥种子如何在源TPM 与目标TPM 之间安全交换,《TPM-Rev-2.0-Part-1-Architecture-01.38》并没有给出具体的解决办法.

另外,第2.1 节的密钥迁移协议中复制流程比较复杂,其中有几个关键的因素决定复制流程:首先,密钥能否复制是由复制密钥的属性(fixedTPM,fixedParent)决定;其次,复制过程中是否实施innerwrap由复制密钥的encryptedDuplication属性决定;第三,复制过程中是否实施outerwrap由新父密钥的句柄类型决定;第四,innerwrap中对称密钥和outerwrap中密钥种子的保护交换还依赖新父密钥的密钥类型.不同的属性值决定了不同的复制流程,在所有的流程中,部分流程的输出结果是存在安全隐患的.由于所有的判断均在TPM 内部进行,在执行完成之前,外界无法知道TPM2_Duplication()的输出结果.为了保证复制过程的安全,需要提前掌握复制流程.因此,外界需要一个控制中心,提前获知迁移密钥属性(fixedTPM,fixedParent,encryptedDuplication)、新父密钥类型和新父密钥句柄类型,从而提前掌握复制流程,并对复制过程的输出结果采取合理的保护措施.

3 基于Duplication Authority 的密钥迁移协议

根据第2 节的分析,我们提出基于Duplication Authority 的密钥迁移协议,该协议以Duplication Authority 为控制和认证中心,负责对源TPM 和目标TPM 进行认证并控制复制流程.该协议包括3 个阶段:初始化阶段、认证和属性获取阶段以及控制和执行阶段.鉴于篇幅和突出重点,在该协议描述过程中,我们仅考虑TPM 与Duplication Authority 以及源TPM 与目标TPM 之间的直接信息交互.

3.1 初始化阶段

初始化阶段的主要任务是源和目的TPM 到Duplication Authority 注册并对TPM 进行认证,流程如图3 所示.我们用DA 代表Duplication Authority,(Kpub_DA,Kpri_DA)是Duplication Authority 的一对非对称密钥,CertDA表示该公钥的证书.注册过程是TPM 将自己的身份标识(IDTPM)注册到DA 的数据库中,E(⋅)为加密函数,Sign(⋅)为签名函数,Verify(⋅)为验证函数,RA为注册标志位,CertEK为TPM 的背书证书,Ntpm为TPM 产生的随机数,NDA0为DA产生的随机数.具体的交互过程如下.

1.TPM→DA:E(ks,[CertEK||IDTPM||Signpri_EK(IDTPM)||Ntpm]),E(CertDA,ks).

2.DA→TPM:E(ks,RA||Ntpm||NDA0).

3.TPM→DA:E(ks,NDA0).

Fig.3 Initialization phase图3 初始化阶段

下面我们对上述每一步进行详细解释,具体如下.

· 步骤 1:TPM 向 DA 发送注册信息,发送的具体内容:E(ks,[CertEK||IDTPM||Signpri_EK(IDTPM)||Ntpm])||E(CertDA,ks).DA 接收到TPM 发来的注册信息后,首先用Kpri_DA解密得ks,并用ks解密得CertEK||IDTPM||Signpri_EK(IDTPM)||Ntpm;然后,Verify(CertEK)和Verify(Signpri_EK(IDTPM)),验证通过置RA=1,否则置RA=0.

· 步骤2:TPM 接收到DA 的返回密文E(ks,RA||Ntpm||NDA0),用ks解密,读取RA的值,验证Ntpm,如果验证通过,返回E(ks,NDA0).

· 步骤3:DA 解密得到NDA0,验证NDA0,如果通过,表明TPM 已经知道注册成功,则将CertEK||IDTPM存入注册数据库.

3.2 认证和属性获取阶段

认证和属性获取阶段包括两个主要任务:其一是源TPM 与目标TPM 交互双方基于Duplication Authority进行认证;其二是为控制后期复制过程,DuplicationAuthority 通过和目标TPM 与源TPM 的交互,获得复制密钥和新父密钥的属性.为了叙述方便,我们假设具体的应用场景是:TS和TD均是在DA 中注册的TPM,当前要将TS中objectHandle所指向的密钥对象迁移到TD中newParentHandle所指向的新父密钥对象下.我们用标志位S表示对称密钥、非对称密钥或非密钥对象,S=0 表示对称密钥,S=1 表示非对称密钥,S=−1 为非密钥对象;用AlgParameter表示密钥对象支持的算法及相关参数,流程如图4 所示.具体的交互过程如下.

Fig.4 Authentication and attribute acquisition process图4 认证和属性获取阶段

下面,我们对上述每一步进行详细解释.具体如下.

· 步骤1:TD向DA 发送迁移请求秘密信息.DA 用私钥解密E(CertDA,ks1)得ks1,并用ks1解密TD发送的具体内容,得到目标TPM 的ID、新父密钥的句柄newParentHandle、新父密钥标志位S、新父密钥的算法及相关参数AlgParameter、源TPM 的ID 以及现时等.DA 验证TD的和Ts的,确认是否均为合法的TPM,如果不合法则终止.

· 步骤3:TS用CertDA验证复制请求后,确认此信息来自DA,并向DA 发送共享密钥ks2和现时

· 步骤4:DA 解密获得ks2,用ks2加密目的TPM 的ID、复制密钥的句柄objectHandle、新父密钥的算法以及现时NDT,NDA1和NST并发送给TS.

· 步骤5:TS解密后,获知有TD要迁移objectHandle所指向的密钥对象到其newParentHandle所指向的新父密钥对象下.由于目标TPM 的ID 来自DA,因此TS认为TD是合法可信的TPM,于是在确认自己支持新父密钥的算法及参数后,向DA 发送了objectHandle所指向的密钥对象的复制属性fixedTPM,fixedParent,encryptedDuplication以及密钥类型和现时

· 步骤6:DA 向TD发回现时,表明迁移准备就绪.至此,不仅DA 获得了在复制过程中需要的复制密钥和新父密钥的相关属性,而且TS和TD得到相互认证.

3.3 控制和执行阶段

控制和执行阶段包括两个主要任务:其一是DA 根据复制密钥和新父密钥的相关属性控制和选择具体的复制流程;其二是迁移过程的具体执行.

上一阶段结束后,DA 已经获得了复制密钥和新父密钥的相关属性,包括fixedTPM,fixedParent,encryptedDuplication,newParentHandle,objecthandle→S,newParentHandle→S等,这些属性的取值一共有96 种组合,但大部分组合是无效组合,DA 可以根据这些属性组合对执行过程进行控制.我们经过分析,有效组合一共有12 种.为了方便叙述,我们用EndEcho表示复制过程终止.限于篇幅,各种情况的密钥迁移流程图略.具体的12 种情况如下.

情况1:当fixedTPM!=0 或fixedParent!=0 时,具体流程如下.

下面,我们对上述每一步进行详细解释.具体如下.

· 步骤1:DA 向TD发送EndEcho,结束密钥迁移过程.

· 步骤2:DA 向TS发送EndEcho,结束密钥迁移过程.

本属性组合表明:只有当迁移密钥的fixedTPM和fixedParent属性都置0 时,复制及迁移过程才可继续进行.

情况2:当fixedTPM=0,fixedParent=0,encryptedDuplication=1,newParentHandle=TPM_RH_NULL时,具体流程如下.

下面,我们对上述每一步进行详细解释.具体如下.

· 步骤1:DA 向TD发送EndEcho,结束密钥迁移过程.

· 步骤2:DA 向TS发送EndEcho,结束密钥迁移过程.

本属性组合表明:在密钥复制过程中,如果只进行innerwrap是不行的,复制及迁移过程会终止.

情况 3:当fixedTPM=0,fixedParent=0,encryptedDuplication=1,newParentHandle!=TPM_RH_NULL,object thandle→S=1,newParentHandle→S=1 时,具体流程如下.

(1)DA→TS:Sign(Kpri_DA,[||newParentHandle||newParentHandle→S||newParentHandle→AlgParameter||,E(ks2,[||newParentHandle||newParentHandle→S||newParentHandle→

(2)TS→TD:dupSensitive,outerHMAC,CencryptionKeyout,CSeed,encRng.

(3)TD→TS:encRng.(4)TS→DA:encRng.

下面,我们对上述每一步进行详细解释.具体如下.

· 步骤1:TS接收到DA 的消息,解密得到目标TPM 的ID、新父密钥的句柄newParentHandle、新父密钥标志位S的值、新父密钥的算法及相关参数AlgParameter以及现时.然后用CertDA验证签名,再验证现时.所有的验证通过,TS将进行如下计算.

1) 产生innerwrap需要的对称加密密钥encryptionKeyIn(可由TS的OS输入).

2) 计算innerIntegrity=Hobject.nameAlg(object.sensitive||object.name).

3) 计算encSensitive=CFBobject.symAlg(encryptionKeyIn,0,innerIntegrity||object.sensitive).

4) 根据AlgParameter,计算CencryptionKeyIn=RSA_OAEP(newParentHandle→PubliceArea,encrypttionKeyIn)或CencryptionKeyIn=ECC_ECDH(newParent Handle→PubliceArea,encryptionKeyIn).

5) 产生outerwrap需要的密钥种子seed.

6) 计算symKey=KDFa(AlgParameter,seed,“STORAGE”,Name,NULL,bits).

7) 计算dupSensitive=CFBAlgParameter(symKey,0,encSensitive).

8) 计算encRng=CFBAlgParameter(symKey,0,

9) 计算HMACkey=KDFa(AlgParameter,seed,“INTEGRITY”,NULL,NULL,bits).

10) 计算outerHMAC=HMACnpNameAlg(HMACkey,dupSensitive||objecthandle→Name).

以上过程实际上是调用TPM2_Duplicate(objectHandle,newParentHandle,encryptionKeyIn,symmetricAlg)进行密钥复制,对复制密钥实施innerwrap和outerwrap.

· 步骤2:TD收到TS传来的dupSensitive,outerHMAC,CencryptionKeyout,CSeed和encRng,进行如下计算.

1) 用新父密钥的私钥解密CSeed,得到Seed.

2) 用同样的算法生成HMACkey和symKey.

3) 用symKey解密encRng,验证随机数;然后,用HMACkey验证outerHMAC.如果验证都通过,用symKey对dupSensitive进行解密,得到encSensitive.

4) 用新父密钥的私钥解密CencryptionKeyout得到encryptionKeyout,用encryption-Keyout解密encSensitive得到innerIntegrity和Sensitive,用同样的H算法验证object.sensitive||object.name的完整性.如果验证通过,则复制成功.

以上过程实际上是调用TPM2_Import(newparentHandle,CencryptionKeyout,dupSenstive,CSeed)进行复制密钥导入.

· 步骤3:TD给TS返回encRng,TS解密验证随机数.如果相同,表明迁移成功.

· 步骤4:TS给DA 返回encRng,DA 解密验证随机数.如果相同,表明迁移成功,结束迁移过程.

情况 4:当fixedTPM=0,fixedParent=0,encryptedDuplication=1,newParentHandle!=TPM_RH_NULL,object handle→S=1,newParentHandle→S=0 时,其具体流程与情况3 唯一的不同是新父密钥为对称密钥,innerwrap所需的encryptionKeyin和outerwrap所需的Seed只能在TD中产生,才能利用《TPM-Rev-2.0-Part-1-Architecture-01.38》中规定的RSA_OAEP或ECC_ECDH算法对encryptionKeyin和Seed进行保护交换.我们用标志位Migrate_object.publicArea_to_TD表示DA 要求TS将复制密钥的publicArea传递给TD.具体流程如下.

(1)DA→TS:Sign(Kpri_DA,[||newParentHandle||newParentHandle→S||newParentHandle→AlgParameter||Migrate_object.publicArea_to_TD||||NDA||]),E(ks2,[||newParentHandle||newParentHandle→S||newParentHandle→AlgParameter||Migrate_object.publicArea_to_TD||||NDA1||

(2)TS→DA:E(ks2,[object.publicArea||||NDA1||]).

(3)DA→TD:E(ks1,[object.publicArea||||NDA1||]).

(4)TD→TS:CencryptionKeyout,Cseed.

(5)TS→TD:dupSensitive,outerHMAC,encRng.

(6)TD→TS:encRng.

(7)TS→DA:encRng.

下面,我们对上述每一步进行详细解释.具体如下.

· 步骤1:与情况3 基本相同的步骤一基本相同,不同的是在步骤一中,DA 发送给TS消息增加了标志位Migrate_object.publicArea_to_TD.

· 步骤2、步骤3:TS将复制密钥的公钥部分通过DA 传给TD.

· 步骤4:由TD产生encryptionKeyin和Seed,用复制密钥的公钥加密得到CencryptionKeyin和CSeed并传递给TS.

· 步骤 5:与情况 3 的步骤 2 基本一致,TS调用TPM2_Duplicate(objectHandle,newParentHandle,encryptionKeyIn,symmetricAlg)进行密钥复制,对复制密钥实施innerwrap和outerwrap.由于encryptionKeyin和Seed已经在TD,因此发送给TD的数据就只有dupSensitive,outerHMAC和encRng.

· 步骤6:与情况3 的步骤3 一致.

· 步骤7:与情况3 的步骤4 一致.

情况 5:当fixedTPM=0,fixedParent=0,encryptedDuplication=1,newParentHandle!=TPM_RH_NULL,object handle→S=0,newParentHandle→S=1 时,其具体流程与情况3 一致,略.

情况 6:当fixedTPM=0,fixedParent=0,encryptedDuplication=1,newParentHandle!=TPM_RH_NULL,objecthandle→S=0,newParentHandle→S=0 时,其具体流程与前面所有的情况均不相同.本情况的复制密钥和新父密钥都是对称密钥,encryptionKeyin和Seed无论在TS或TD产生,都无法用《TPM-Rev-2.0-Part-1-Architecture-01.38》中规定的RSA_OAEP或ECC_ECDH算法进行保护交换.为了防止encryptionKeyin和Seed泄露,我们设计在DA的控制下用 DH 算法在TS和TD之间交换共享密钥作为encryptionKeyin和Seed.因此,我们用标志位Pro_DH_encryptionKeyin_and_Seed表明此需求,且TS和TD双方已选择一共同的素数q以及q的一个原根a.具体流程如下.

(1)DA→TS:Sign(Kpri_DA,[||newParentHandle||newParentHandle→S||newParentHandle→AlgParameter||Pro_DH_encryptionKeyin_and_Seed||||NDA1||]),E(ks2,[||newParentHandle||newParentHandle→S||newParentHandle→AlgParameter||Pro_DH_encryptionKeyin_and_Seed||||NDA1||]).

(2)TS→DA:E(Ks2,[IDS||Ys||||NDA1||]).

(3)DA→TD:E(Ks1,[IDS||Ys||||NDA1||||Sign(pri_DA,[IDS||Ys||||NDA1||])]).

(4)TD→DA:E(Ks1,[IDD||YD||||NDA1||]).

(5)DA→TS:E(KS2,[IDD||YD||||NDA1||||Sign(pri_DA,[IDD||YD||||NDA1||])]).

(6)TS→TD:dupSensitive,outerHMAC,encRng.

(7)TD→TS:encRng.

(8)TS→DA:encRng.

下面,我们对上述每一步进行详细解释.具体如下.

· 步骤 1:与情况 3 的步骤一基本相同,不同的是 DA 发送给TS消息增加了标志位Pro_DH_encryptionKeyin_and_Seed.

以下步骤2~步骤5 就是防中间人攻击的DH 算法.

· 步骤2:TS计算modq,其中,Xs是TS的任选素数,Xs

· 步骤3:DA 对IDS||Ys进行签名Sign(pri_DA,[IDS||YS]),并一起发送给TD.

· 步骤4:TD验证DA 对TS的签名Verify(pub_DA,Sign(pri_DA,[IDS||YS])),然后任选素数XD,且XD

· 步骤5:DA 对IDD||YD进行Sign(pri_DA,[IDD||YD]),并一起发送给TS,TS接收到YD后,计算:

· 步骤 6:与情况 3 的步骤 2 基本一致,TS调用TPM2_Duplicate(objectHandle,newParentHandle,encryptionKeyIn,symmetricAlg)进行密钥复制,对复制密钥实施innerwrap和outerwrap,K0既作为innerwrap的encryptionKeyin,又作为outerwrap的Seed.由于K0在TS和TD双方都存在,因此发送给TD的数据就只有dupSensitive,outerHMAC和encRng.

· 步骤7:与情况3 的步骤3 一致.

· 步骤8:与情况3 的步骤4 一致.

情况 7:当fixedTPM=0,fixedParent=0,encryptedDuplication=0,newParentHandle!=TPM_RH_NULL,object handle→S=1,newParentHandle→S=1 时,与情况3 的流程基本一致,只是在步骤1 中不进行innerwrap,即没有情况3 步骤1 中的步骤2)~步骤4),在步骤2 中也就不进行innerwrap密钥encryptionKeyin的保护交换.具体流程如下.

(1)DA→TS:Sign(Kpri_DA,[||newParentHandle||newParentHandle→S||newParentHandle→AlgParameter||||NDA1||]),E(ks2,[||newParentHandle||newParentHandle→S||newParentHandle→AlgParameter||||NDA1||]).

(2)TS→TD:dupSensitive,outerHMAC,CSeed,encRng.

(3)TD→TS:encRng.

(4)TS→DA:encRng.

情况 8:当fixedTPM=0,fixedParent=0,encryptedDuplication=0,newParentHandle!=TPM_RH_NULL,object handle→S=1,newParentHandle→S=0 时,与情况4 基本一致.只是在步骤4 中只传输CSeed,这是因为本情况不进行innerwrap,也就不进行innerwrap密钥encryptionKeyin的保护交换.具体流程如下.

(1)DA→TS:Sign(Kpri_DA,[||newParentHandle||newParentHandle→S||newParentHandle→AlgParameter||Migrate_object.publicArea_to_TD||||NDA1||]),E(ks2,[||newParentHandle||newParentHandle→S||newParentHandle→AlgParameter||Migrate_object.publicArea_to_TD||||NDA1||]).

(2)TS→DA:E(ks2,[object.publicArea||||NDA1||]).

(3)DA→TD:E(ks1,[object.publicArea||||NDA1||]).

(4)TD→TS:Cseed.

(5)TS→TD:dupSensitive,outerHMAC,encRng.

(6)TD→TS:encRng.

(7)TS→DA:encRng.

情况 9:当fixedTPM=0,fixedParent=0,encryptedDuplication=0,newParentHandle!=TPM_RH_NULL,object handle→S=0,newParentHandle→S=1 时,与情况7 一致,略.

情况 10:当fixedTPM=0,fixedParent=0,encryptedDuplication=0,newParentHandle!=TPM_RH_NULL,object handle→S=0,newParentHandle→S=0 时,与情况6 基本相同,都面对的是复制密钥和新父密钥是对称密钥的情况.不同的是,本情况不需进行innerwrap.因此在步骤1 中,原请求TS产生innerwarp密钥和outerwrap密钥种子的标志Pro_DH_encryptionKeyin_and_Seed变为了只产生outerwrap密钥种子的标志Pro_DH_Seed,相应地,用DH算法使得TS和TD共享会话密钥K0只作为Seed进行outerwarp.具体流程如下.

(1)DA→TS:Sign(Kpri_DA,[IDTD||newParentHandle||newParentHandle→S||newParentHandle→AlgParameter||||newParentHandle||newParentHandle→S||newParentHandl e→AlgParameter||Pro_DH_Seed||

(2)TS→DA:E(Ks2,[IDS||Ys||||NDA1||]).

(3)DA→TD:E(Ks1,[IDS||Ys||NDT||NDA1||||Sign(pri_DA,[IDS||Ys||

(4)TD→DA:E(Ks1,[IDD||YD||

(5)DA→TS:E(KS2,[IDD||YD||||Sign(pri_DA,[IDD||YD||

(6)TS→TD:dupSensitive,outerHMAC,encRng.

(7)TD→TS:encRng.

情况 11:当fixedTPM=0,fixedParent=0,encryptedDuplication=0,newParentHandle=TPM_RH_NULL,object handle→S=1,newParentHandle→S=−1 时.本情况面对的是复制密钥是非对称密钥而新父密钥是非层次结构的非密钥对象,如密钥种子、空授权对象等.显然,这种情况密钥在复制过程中既不进行innerwrap,也不进行outerwrap,复制密钥将以明文在TD和TS之间传输,存在泄露的可能.为了防止泄露,在DA 的控制下,TD和TS通过DH 算法而共享会话密钥,用该密钥对复制密钥加密.具体流程如下.

(1)DA→TS:Sign(Kpri_DA,[||newParentHandle||newParentHandle→S||newParentHandle→AlgParameter||Pro_DH_KEY||]),E(ks2,[||newParentHandle||newParentHandle→S||newParentHandl e→AlgParameter||Pro_DH_KEY||

(2)TS→DA:E(Ks2,[IDS||Ys||

(3)DA→TD:E(Ks1,[IDS||Ys||||Sign(pri_DA,[IDS||Ys||

(4)TD→DA:E(Ks1,[IDD||YD||

(5)DA→TS:E(KS2,[IDD||YD||||Sign(pri_DA,[IDD||YD||

(6)TS→TD:E(K0,object.sensitiveArea),E(K0,[

(7)TD→TS:E(K0,E(K0,[

下面,我们对上述每一步进行详细解释.具体如下.

· 步骤1:DA 向TS发出Pro_DH_KEY标志,要求TD和TS交换共享密钥.

· 步骤2~步骤5:用防止中间人攻击的DH 算法使得TS和TD共享密钥K0.

· 步骤6:TS用K0加密复制密钥和现时,然后传递给TD.

· 步骤7:TD验证现时并回复TS,表明复制成功.

情况 12:当fixedTPM=0,fixedParent=0,encryptedDuplication=0,newParentHandle=TPM_RH_NULL,object handle→S=0,newParentHandle→S=−1 时,本情况与情况11 一致,略.

从以上分析可以看出,由于情况2 与情况1 一致、情况5 与情况3 一致、情况9 与情况7 一致、情况12与情况11 也一致,因此,原本12 种迁移流程实际为8 种.

4 协议分析

4.1 特点分析

(1) 一致性

在《TPM-Rev-2.0-Part-1-Architecture-01.38》中规定了密钥复制的过程的基本要求,即如何根据复制密钥的复制属性(fixedTPM,fixedParent,encryptedDuplication)以及新父密钥的密钥句柄类型对复制密钥进行innerwrap和outerwrap,也建议采用Duplication Authority 对复制过程进行控制、认证等,但并没有给出具体的方案.本文提出的基于Duplication Authority 的TPM2.0 密钥迁移协议方案不仅给出了具体的方案,而且和《TPM-Rev-2.0-Part-1-Architecture-01.38》中的要求完全一致.具有一致性.

(2) 完备性

本文考虑了(fixedTPM,fixedParent,encryptedDuplication,newParentHandle,objecthandle→S,newParent Handle→S)各种合法的组合,并设计了这些组合的密钥迁移方案.在这些方案中,我们不仅考虑了Duplication Authority 的认证和控制方法,而且还考虑了innerwarp密钥和outerwrap密钥种子的保护交换方法,特别是当被复制密钥和新父密钥都是对称密钥时innerwarp密钥和outerwrap密钥种子的保护交换方法.另外,我们还考虑了密钥复制过程中既不innerwarp又不outerwrap时密钥迁移的安全问题,以及DA 根据objecthandle→S和newParentHandle→S的类型控制由源TPM 方或目的TPM 方产生innerwarp的加密密钥和outerwrap所需要的密钥种子.因此,本文的TPM2.0 密钥迁移协议方案是完备的.

4.2 安全分析

本文提出的基于Duplication Authority 的TPM2.0 密钥迁移协议方案具有认证性、机密性、抗中间人攻击和抗重放攻击,因而具有较高的安全性.下面我们对本文提出的方法进行安全性分析,具有以下4 个特点.

(1) 具有认证性

一方面,所有合法的TPM 均需用其EK 和名字ID 在Duplication Authority 注册,这就确保了密钥一定是在两个具有合法身份的TPM 之间进行迁移,注册过程保证了源TPM 与目标TPM 之间的认证性;另一方面,当被复制密钥和新父密钥都是对称密钥时,innerwarp密钥和outerwrap密钥种子的保护交换方法是具有认证功能、防止中间人攻击的DH 算法.当新父密钥是非层次结构的非密钥对象,如密钥种子、空授权对象等,我们也采用的是具有认证功能、防止中间人攻击的DH 算法交换保护复制密钥的共享密钥.最后,outerwrap的消息认证码outerHAMC也具有认证功能.因此,该协议通过各层次保证信息交互的各方均具有合法的身份,故具有认证性.

(2) 具有机密性

在初始化阶段,各TPM 与DA 之间的信息交互都是用对称密钥ks加密,因此,如果信息被截取,攻击者会由于没有对称秘密密钥ks而无法获得信息的具体内容,因此确保了各TPM 与DA 之间的机密性;在认证和属性获取阶段,DA,TS和TD之间的信息交换也用对称密钥ks1和ks2加密,因此,如果信息被截取,攻击者会由于没有对称秘密密钥ks1和ks2而无法获得信息的具体内容,因此确保了DA,TS和TD之间的机密性;而在控制和执行阶段,DA,TS和TD之间的信息交换也用对称密钥ks1和ks2加密,因此,如果信息被截取,攻击者会由于没有对称秘密密钥ks1和ks2而无法获得信息的具体内容,因此确保了DA,TS和TD之间的机密性.由此可见,无论是在初始化阶段、认证和属性控制阶段还是控制和执行阶段,都保证了交互信息的密文传送,因而具有机密性.

(3) 具有抗中间人攻击

中间人攻击是一种通过修改或者伪装发送消息而达到攻击目的的手段.首先,在初始化阶段,各TPM 与DA之间的信息交互采用的是DA 证书对会话密钥进行加密,只有拥有证书的私钥才能解密会话密钥,即只有DA 才能解密会话密钥,因此,即使敌手获得了该消息,由于它无法解密该消息,因此无法伪装和修改该消息进行中间人攻击;在认证和属性获取阶段,DA 和TS,TD之间的信息交换采用的是DA 的证书对会话密钥进行加密,只有拥有证书的私钥才能解密会话密钥,即只有DA 才能解密会话密钥,因此,即使敌手获得了该消息,由于它无法解密该消息,因此无法伪装和修改该消息进行中间人攻击;在控制与执行阶段,DA 和TS,TD之间的信息交换仍采用的是DA 证书对会话密钥进行加密,只有拥有证书的私钥才能解密会话密钥,即只有DA 才能解密会话密钥,因此,即使敌手获得了该消息,由于它无法解密该消息,因此无法伪装和修改该消息进行中间人攻击;而TS和TD之间的密钥交换,我们采用的是抗中间人攻击的DH 算法,即采用DA 的证书对交互的信息进行签名,证书具有身份认证功能,中间人无法伪造.因此,具有抗中间人攻击.

(4) 具有抗重放攻击

首先,在初始化阶段,各TPM 与DA 之间的信息交互采用了现时Ntpm和NDA,所以各TPM 与DA 可以通过Ntpm和NDA0来确保不是重放消息;在认证和属性获取阶段,DA 和TS,TD之间的信息交换采用了现时,NDA1和DA 和TS,TD可以通过来确保不是重放消息;在控制与执行阶段,DA 和TS,TD之间的信息交换仍然采用了同一现时,DA 和TS,TD之间以及TS和TD均可以通过来确保不是重放消息.因此,具有抗重放攻击.

值得注意的是,本协议中的DA 具有重要作用.在初始化阶段,源和目的TPM 的身份信息均注册到DA;在认证和属性获取阶段,DA 会获得复制密钥和新父密钥的相关属性;在控制和执行阶段,DA 需要根据复制密钥和新父密钥的相关属性控制复制流程.因此,DA 是整个协议的控制中心,不仅需要保护好所有注册TPM 的身份信息,而且还要保证自身不受攻击.一旦DA 遭受攻击,攻击者不仅可以窃取注册到DA 中的TPM 身份信息,而且还能控制复制流程;攻击者不仅可以获得复制密钥,而且可以将自己控制的密钥复制到目标TPM 中.这不仅严重威胁到用户的隐私,而且还会造成TPM 密钥的泄露和加密数据的失窃.因此,本文的DA 必须是一个可信第三方,对其安全要求必须和PKI 中的CA 一样.

4.3 对比分析

实际上,TPM1.2 规范在《TPM-main-1.2-Rev94-part-3》中有关于Migration 部分,并已定义了与密钥迁移相关的接口,包括TPM_CMK_ApproveMA(),TPM_CMK_CreateKey(),TPM_CMK_CreateTicket(),TPM_CMK_CreateBlob()和TPM_CMK_ConvertMigration()等.通过这些接口设计密钥迁移协议时,也需要TPM 的所有者指定一个可信的第三方(migration authority,简称MA)参与,在这一点上与本文的Duplication Authority 有些相似.为了清楚说明它们之间的异同,我们用TPM1.2 密钥迁移接口简要设计一个密钥迁移流程框架,忽略细节部分.

为了表述方便,首先假定一个场景:密钥Kmigration需要从源平台Psrc迁移到平台Pdes,在Psrc 端保护Kmigration的父密钥是Kparent,而Pdes端选定的将要保护Kmigration的父密钥是Kstorage.因此,Kparent和Kstorage必须都是存储密钥.在此假定的场景下,首先需要TPM 的所有者用接口TPM_CMK_ApproveMA()授权一个可信的第三方(migration authority,简称MA),并由MA 通过接口TPM_CMK_CreateTicket()来指定迁移目标Pdes并对迁移目标Pdes进行认证.具体的协议流程如图5 所示.

在图5 中,第1 步是Psrc调用TPM_CMK_ApproveMA()授权一个可信的第三方MA;第2 步和第3 步是MA调用TPM_CMK_CreateTicket()来指定迁移目标Pdes,并对迁移目标Pdes进行认证;第4 步和第5 步是Psrc调用TPM_CMK_CreateKey()产生待迁移的密钥Kmigration;第6 步是Psrc调用TPM_CMK_CreateBlob()生成迁移数据encData;第7 步是Psrc将encData传递给Pdes;第8 步是Pdes调用TPM_CMK_ConvertMigration()对迁移数据进行转换.至此,Pdes就可以用Kstorage为父密钥加载Kmigration.

显然,图5 与本文第3 节提出的协议是有区别的.下面,我们在安全性、复杂性、可信第三方的作用等方面对这两个协议进行比较.具体如下.

(1) 在安全性方面,无论是利用TPM1.2 的迁移接口设计的迁移协议还是本文利用TPM2.0 密钥复制接口设计的迁移协议,均能具有认证性、机密性、抗中间人攻击和抗重放攻击等特点.因此,只要通过精心设计,这两个协议均能达到同等的安全.

(2) 在复杂性方面,显然,本文的协议要比利用TPM1.2 的迁移接口设计的迁移协议复杂得多.这是因为TPM2.0 与密钥相关的功能均扩大了,密钥类型不仅支持非对称密钥,而且还支持对称密钥;密码算法不仅支持RSA,而且还支持ECC.在设计密钥迁移协议时,除了需要考虑迁移密钥和目标密钥的复制属性以外,还需要考虑迁移密钥、目标密钥是对称密钥还是非对称密钥的情况,因此,涉及的迁移情况多、控制迁移流程复杂.

(3) 在可信第三方方面,无论是TPM1.2 中的密钥迁移还是本文设计的密钥复制,均需要可信第三方.利用TPM1.2 的迁移接口设计的迁移协议需要可信第三方MA,本文协议中涉及到可信第三方是DA.但DA 远比MA 复杂:MA 只需指定迁移目标并对迁移目标进行认证;而DA 不仅需要管理各TPM 的身份信息,而且还要根据迁移密钥、目标密钥的复制属性确定和控制迁移流程.

5 实验验证与性能对比分析

本节将对第3 节提出的密钥迁移协议进行验证,并与TPM1.2 的密钥迁移协议进行性能对比分析.

5.1 实验验证

要将迁移密钥迁移到新父密钥下,首先,源TPM 和目标TPM 应在DA 中注册;然后,目标TPM 向DA 发起迁移请求,DA 对源TPM 和目标TPM 进行认证,并分别获得新父密钥的类型和句柄类型以及迁移密钥的复制属性(fixedTPM,fixedParent,encryptedDuplication);最后,DA 根据收集到的所有属性,判断此流程属于12 种流程中的哪一种流程,并控制复制流程,即可完成迁移.

5.1.1 实验环境

目前,市面上已出现TPM2.0 芯片,经过深入的咨询我们发现,在国内使用TPM2.0 芯片受到一定的限制.因此,这里我们使用微软的TPM2.0 模拟器以及TSS.net 进行实验.本实验共使用2 台计算机,其中一台既做target TPM 又充当DA,剩下一台充当source TPM.这里我们用OpenSSL 的CA 机关模拟DA,作为注册和控制中心.具体环境配置见表5,其中,target TPM 与DA 所在主机的配置完全一致.

Table 5 Experimental environment related configuration表5 实验环境相关配置

以情况3 为例,具体实验流程原型如图6 所示,其中,S,DA,D分别表示源TPM、复制权威和目的TPM.主要分为初始化、认证和属性获取以及控制迁移这3 个阶段.

Fig.6 Experimental whole process prototype图6 实验流程原型

5.1.2 实验结果

实验主要基于openssl 和Microsoft 的TPM2.0 simulator 实现.

1.初始化阶段的执行过程.

初始化过程主要完成源TPM 和目的TPM 向DA 注册自己的信息.由于目的TPM 的初始化与源TPM 初始化过程完全相同,这里以目的TPM 的初始化为例.目的TPM 与DA 间的初始化阶段流程如图7、图8 所示.

Fig.7 Targe TPM initialization process图7 目的TPM 初始化阶段流程

Fig.8 DA initialization process图8 DA 初始化阶段流程

2.认证和属性获取阶段.

认证和属性获取过程主要完成源TPM 和目的TPM 间的认证以及向DA 发送新父密钥和复制密钥的相关属性等.源TPM、目的TPM、DA 的认证和属性获取阶段流程如图9~图11 所示.

Fig.9 Source TPM authentication and attribute acquisition process图9 源TPM 认证和属性获取阶段流程

Fig.10 Targe TPM authentication and attribute acquisition process图10 目的TPM 认证和属性获取阶段流程

3.控制和执行阶段.

该阶段共有12 种情况,由于情况1 和情况2 的实现过程基本相似,情况3 和情况4、情况5、情况7、情况8 的实现过程基本相似,情况6 和情况9 的实现过程基本相似,情况11 和情况12 的实现过程基本相似,为了减少篇幅,我们仅列出情况3 和情况6 的实验结果.这里,我们基于微软TPM2.0 模拟器提供的复制接口和导入接口来实现.

情况3:WhenfixedTPM=0,fixedParent=0,encryptedDuplication=1,newParentHandle!=TPM_RH_NULL,object handle→S=1,newParentHandle→S=1.执行过程如图12~图14 所示.

Fig.12 Case 3:Source TPM execution process图12 情况3:源TPM 执行流程

Fig.13 Case 3:Targe TPM execution process图13 情况3:目的TPM 执行流程

Fig.14 Case 3:DA execution process图14 情况3:DA 执行流程

情况6:fixedTPM=0,fixedParent=0,encryptedDuplication=1,newParentHandle!=TPM_RH_NULL,objecthandle→S=0,newParentHandle→S=0.执行过程如图15~图17 所示.

Fig.15 Case 6:Source TPM execution process图15 情况6:源TPM 执行流程

Fig.16 Case 6:Targe TPM execution process图16 情况6:目的TPM 执行流程

Fig.17 Case 6:DA execution process图17 情况6:DA 执行流程

5.2 性能分析

5.2.1 本协议的性能分析

1.初始化阶段的执行时间见表6.

Table 6 Initialization execution time表6 初始化阶段执行时间

2.认证和属性获取阶段的执行时间见表7.

Table 7 Authentication and attribute acquisition phase execution time表7 认证和属性获取阶段执行时间

3.控制和执行阶段的执行时间.

由于情况1 和情况2 的实验过程相同,情况3 和情况5 的实验过程相同,情况7 和情况9 的实验过程相同,情况11 和情况12 的实验过程相同,我们将实验过程相同的情况的执行时间视为一致.各情况的执行时间如下表8 所示,其时间性能如图18 所示.

Table 8 Initialization execution time (s)表8 初始化阶段执行时间 (s)

Fig.18 Execution time for each situation in the control and execution phases图18 控制和执行阶段各情况执行时间

从图18 可以看出,情况4 的执行时间最长.这是因为情况4 既执行了innerwrap又执行了outerwrap,同时,由于innerwrap和outerwrap的加密密钥和密钥种子在目的TPM 方产生,在保护传输过程中增加了TS与DA,TS与TD之间的交互.情况3/5 与情况4 唯一的不同就是innerwrap和outerwrap的加密密钥和密钥种子在源TPM方产生,因此执行时间也就稍少于情况4.而情况6 中的加密密钥和密钥种子是同一个,所以执行时间应少于情况3/5.情况7~情况10 由于未进行outerwrap因此执行时间应少于情况6.由于情况11/12 既不进行innerwrap也不进行outerwrap因此执行时间少于情况10.而情况1/2 基本不能进行密钥复制迁移操作,因此时间是最短的.

5.2.2 与TPM1.2 密钥迁移的性能对比分析

本节主要将本协议的性能与TPM1.2 密钥迁移性能进行对比分析.由于TPM1.2 不支持对称密钥,且本文协议的情况较多,为此,我们仅在如下场景下进行对比分析.

具体场景:非对称密钥Kmigration需要从源平台Psrc迁移到平台Pdes,在Psrc端保护Kmigration的父密钥是Kparent,而Pdes端选定的将要保护Kmigration的父密钥是非对称密钥是Kstorage.

对于TPM1.2,要求Kmigration是可认证迁移密钥CMK(certifiable-migration key).本实验需要两台机器,这两台机器的硬件配置与表5 相同,不同的是软件环境,这两台机器的OS 是Ubuntu 16.04,TPM 模拟器为TPM_emulator_0.7.4 模拟器,TSS.net 的版本为TSS.MSR-master.Source TPM 与MA 在同一台机器,授权口令以默认的方式在内部产生.这里,我们选用耗时最长的TPM_MS_RESTRICT_APPROVE_DOUBLE迁移模式.对于TPM2.0,此场景对应着第3.3 节中的情况3,具体的时间开销见表9.

Table 9 TPM1.2 execution time (s)表9 TPM1.2 执行时间 (s)

可以看出,本文协议的时间开销要比TPM1.2 的大一些.我们认为,主要原因包括两个方面.

(1) 在情况3 中,源TPM 既执行了innerwrap,又执行了outerwrap,其复杂性比TPM1.2 大.

(2) DA 通过与源TPM 与目的TPM 交互,获得迁移密钥与新父密钥的属性并控制协议流程,其时间开销

要比MA 仅仅是对目标密钥(新父密钥)进行认证的时间开销大.性能对比如图19 所示.

Fig.19 Performance comparison图19 性能对比

6 相关工作

在TPM 密钥迁移方面,到现在为止取得了较多研究成果.TCG 组织一直是这一工作积极的主导者和推动者,TCG 最初在 TPM1.1 规范的密钥迁移模块中提供了TPM_AuthorizeMigratinKey(),TPM_Create MigrationBlob()和TPM_ConvertMigrationBlob()等3 个API 接口用于迁移密钥.TPM1.1 的密钥迁移模块优点是简单,但弱点是迁移源和目标之间缺少认证,敌手很容易冒充目标TPM 而获得迁移密钥的敏感信息.TPM1.2 对迁移模块作了重大改进,引进了认证迁移概念.在认证迁移下,用户可以指定可信第三方迁移权威(migration authority,简称MA),并保证如果没有MA 的允许,不可以把密钥迁移到特定的平台.TPM1.2 关于认证迁移密钥(certifiable-migration key,简称 CMK)的 API 包括TPM_AuthorizeMigratinKey(),TPM_CMK_ApproveMA(),TPM_CMK_CreateKey(),TPM_CMK_CreateTicket(),TPM_CMK_CreateBlob()和TPM_CMK_ConvertMigration()等.TPM1.2 的密钥迁移模块优点是安全,缺点是复杂,每次迁移均需要可信第三方MA 参与,效率低.TPM2.0 取消了TPM1.2 的密钥迁移接口,并使用新的迁移接口,即TPM2_Duplicate()和TPM2_Import().由于TPM2.0 改变了密钥属性的表示方式,一个密钥对象是否可以被复制,由fixedTPM和fixedParent两个属性组合来决定,当(fixedTPM=0,fixedParent=0)时,该密钥对象可以被复制实现迁移;当(fixedTPM=0,fixedParent=1),该密钥对象可以跟随父密钥一起被复制实现迁移.TPM2.0 使用TPM2_Duplicate()进行密钥复制时,需要对被复制密钥进行innerwrap或outerwrap或既进行innerwrap又进行outerwrap,来保证被复制密钥的机密性、完整性以及认证性.TPM2.0 的密钥迁移模块优点是简单、高效、灵活而且基本安全,可不需要可信第三方参与;但缺点是容易出现配置错误,导致不安全.

在TPM1.1 和TPM1.2 密钥迁移机制的分析方面,文献[9]用一阶逻辑语言建立TPM API 的形式化模型,并对TPMAPI 进行了全面的逻辑推理分析,其中,对密钥迁移API 的分析指出,TPM1.1 的弱点在于迁移目标由源TPM 的owner 指定,目标TPM 并不参与迁移,目标TPM 在接收可迁移密钥时,可迁移密钥有可能已经泄漏,因此具有较大的安全隐患.文献[10]应用π演算对TPM 进行形式化建模,并使用自动定理证明工具ProVerif 验证其安全属性.作者分析了TPM CMK(certifiable migratable key)的TPM_MS_RESTRICT_MIGRATE迁移模式,分析结果表明:若作为第三方的迁移权威(migration authority,简称MA)用软件处理迁移数据,则敌手能获得被迁移密钥的私钥.作者建议TPM 规范强制要求MA 使用TPM 代替软件处理迁移数据.文献[11]对TPM 可迁移密钥的安全性进行了分析,指出,TPM 提供密钥迁移机制的同时,降低了可迁移密钥的安全保护强度,敌手能够利用TPM 的密钥迁移类接口和密钥加载接口破坏TPM 可迁移密钥的安全性.

在TPM2.0 密钥迁移机制的分析方面,文献[12]建立了TPM2.0 保护存储API 的抽象模型,并利用类型系统证明了TPM2.0 保护存储的安全性.证明结果表明,TPM2.0 保护存储中的密钥复制类接口是安全的.文献[13]对TPM2.0 密钥管理API 的安全性进行了形式化分析,证明了密钥存储和使用类接口能够保证TPM 不可迁移密钥的安全性,并发现了针对密钥复制类接口的两种攻击.作者提出了该类接口的改进方案,并证明了利用改进的接口实施密钥复制能够保证被复制密钥的安全性.文献[14]分析了TPM2.0 密钥复制相关流程,对于其中存在的密钥隐私泄露问题进行了改进.在用户不安全复制传输情形下,从TPM 管理者的角度出发,提出了一套基于TPM自身的加密传输协议.通过利用TPM 自身产生安全密钥,对未受保护的用户敏感数据进行加密,并通过签名的方式保障传输的可靠性.

另外,对于我国TCM 芯片,文献[15]指出,由该芯片的密钥迁移模块实现的密钥迁移协议存在两个问题.

· 对称密钥不能作为被迁移密钥的新父密钥,违背了TCM 的初始设计思想;

· 缺少交互双方TCM 的相互认证,导致源TCM 的被迁移密钥可以被外部敌手获得,并且敌手可以将其控制的密钥迁移到目标TCM 中.

针对上述问题,作者提出两个新的密钥迁移协议.

· 协议1 遵循TCM 目前的接口规范,以目标TCM 的PEK(platform encryption key)作为迁移保护密钥,能够认证目标TCM,并允许对称密钥作为新父密钥.

· 协议2 简单改动了TCM 接口,源TCM 和目标TCM 进行SM2 密钥协商,得到的会话密钥作为迁移保护密钥,解决了上述两个问题,并且获得了前向安全属性.

最后,使用形式化分析方法对上述协议进行安全性分析,结果显示,协议满足正确性和预期的安全属性.

7 结束语

本文分析了《TPM-Rev-2.0-Part-1-Architecture-01.38》国际标准,并总结出使用该标准中的密钥复制接口来实施密钥迁移存在的3 个问题.

· 其一是缺少交互双方TPM 的相互认证,会导致密钥能够在敌手和TPM 间迁移;

· 其二是当迁移密钥的属性encryptedDuplication=0 且新父密钥的句柄newParentHandle=TPM_RH_NULL时,复制接口不能实施innerwrap和outerwrap,迁移密钥将以明文传输而造成泄露;

· 其三是当新父密钥是对称密钥时,innerwrap中的对称加密密钥以及outerwrap中的密钥种子如何在源TPM 与目标TPM 之间安全交换,《TPM-Rev-2.0-Part-1-Architecture-01.38》并没有给出具体的解决办法.

针对这些问题,提出了基于Duplication Authority 的密钥迁移协议.该协议以Duplication Authority 为认证和控制中心,将密钥迁移过程分为初始化阶段、认证和属性获取阶段以及控制和执行阶段.Duplication Authority通过判定密钥的复制属性和类型、新父密钥的密钥类型和句柄类型来决定迁移流程.我们考虑了各种合规的属性组合,共设计了12 种迁移流程.最后,对该协议进行了安全分析和模拟实验验证,结果显示,该协议不仅完全满足《TPM-Rev-2.0-Part-1-Architecture-01.38》规范,而且满足完整性、机密性和认证性.

猜你喜欢

解密密钥加密
幻中邂逅之金色密钥
幻中邂逅之金色密钥
炫词解密
解密“一包三改”
密码系统中密钥的状态与保护*
保护数据按需创建多种加密磁盘
电力安全防护加密装置
炫词解密
炫词解密
Android密钥库简析