闫建红
(太原师范学院 计算机科学与技术系,山西 太原 030012)
可信密码模块软件栈的数据加密策略
闫建红
(太原师范学院 计算机科学与技术系,山西 太原 030012)
介绍了关于可信计算和可信软件栈,并特别对可信计算模块的密钥设置和种类进行说明.从数据结构和加密过程两个方面对绑定和密封这两种方式的性能进行比较和分析,讨论其共同点和适用的范围,指出密封比绑定的功能更强大,安全性更高.实验表明,对数据绑定的时间要比密封需要的时间少,解除绑定的时间要比解除密封的时间少.在时间效率方面,可信计算的这两种数据保护方式只适用于较小数据量,而对大的数据量,其操作时间将会增加很多.
可信计算;可信计算模块密钥;数据绑定;数据密封;数据安全
可信计算TC(trusted computing)由可信计算组织TCG(Trusted Computing Group)制定工业标准和一系列规范[1],通过可信芯片,TPM(Trusted Platform Module)为信任根,依靠其提供的各种功能保护平台安全.可信软件栈TSS(TCG Software Stack)是TPM平台的驱动软件,在结构上分为三层,自上而下分别为TCG服务提供者TSP(TSS Service Providers),TSS核心服务TCS(TSS Core Services)和TCG设备驱动库 TDDL(TCG Device Driver Library),提供给应用层接口为 TSPI(TCG Service Provider Interface)[2].目前可信软件栈的实现有多种,本文采用IBM的Trousers项目,测试通过TSPI提供的接口进行.
TPM使用非对称密钥进行绑定或密封操作Binding是可信计算技术提供的传统的公钥加密方法.当加密的公钥对应的私钥不可移植时,被公钥加密的数据就只能在创建密钥的TPM平台上解密,通Sealing是另一种在可信平台下的数据加密方法,将数据和特定平台的状态绑定,通过平台状态寄存器PCR(Platform Configuration Register)值和数据以及加密的密钥进行绑定,加密数据.针对可信计算数据安全有学者对其进行研究,文献[2]分析了绑定和密封的功能接口.刘昌平等在特定的平台状态和可信密码模块下绑定数据,这些数据只有在该可信计算平台特定的环境下才能进行解密[3].陈小峰用形式化的方式对数据保护进行了描述[4].刘安战分别以不同位的RSA密钥对数据保护方式的Sealing(封装)和Binding(绑定)保护进行测试[5].以上的文献都没有针对绑定和密封两种方法的性能和特点进行具体的分析和比较.本文对TPM这两种特有的数据保护方法通过过程、数据结构、适用环境以及时间消耗进行分析得出其各自适应的范围,并通过实验验证.
TPM的一个主要功能是密钥的产生和使用.在TPM中,产生并存储另外的密钥(如绑定密钥、存储密钥等),不存储对称密钥的密钥称为存储密钥.在重置(或激活)TPM时,TPM的随机数产生器产生一个2 048位的RSA密钥,其位于芯片内,该不可迁移的存储密钥,称为存储根密钥SRK(Storage Root Key).是整个密钥链的根,所有不可迁移的以及未被迁移的密钥都依赖于它.TPM强制规定只有当父密钥存在,才能产生不可迁移密钥.而可迁移密钥是在TPM内部或外部产生,由存储密钥、可迁移密钥或不可迁移密钥加密.TPM 的密钥结构图如图1[6]:
图1 TPM的密钥结构图
如图1所示,TPM拥有各种密钥,这些密钥结构灵活,可解决不同的问题.左边的密钥是可迁移密钥,由平台可迁移密钥控制进行迁移,不需终端用户对所有密钥进行各自迁移.用户可以知道密钥的祖先密钥是谁,拥有者是谁,如果父密钥迁移,则所有子孙密钥都将同时迁移.
绑定在TSS层的API与数据绑定有关的功能接口函数是Tspi_Data_Bind和Tspi_Data_Unbind.绑定密钥是用来存储对称密钥,它可以存储单个或多个对称密钥.需要注意的是,绑定密钥只能用来做基本的RSA加密.不能用来加密对称密钥以外的其他内容.绑定是一个用公钥对数据进行加密的传统过程:
1)发送者用接收者的公钥进行加密.
2)数据只能被接收者的私钥解密,当私钥是TPM的不可迁移密钥创建的时,就由TPM管理.
3)数据是被公钥加密.绑定作为TPM一个特定的应用.
因此也可能在多个TPM设备之间创建可迁移的私钥,如果可以迁移,绑定就和传统的加密意义是一样的.其过程如图2,
图2 TPM绑定和解除绑定过程
其中,Unbind操作是在TPM中内部操作,而Binding操作不一定都是由TPM产生的密钥进行加密,是在TPM之外执行,可以是由软件来执行,使用其他合适的密钥.如果是TPM之外的密钥,则不能使用Tspi_Data_Unbind进行解绑定操作.Unbinding就是用TPM的绑定密钥来解密数据.对由Tspi_Data_Bind命令进行绑定的数据进行解密,必须验证解密的密钥是否正确,解密用公钥加密的数据,私钥存储在TPM内部.这个密钥必须是TPM认可的密钥.用来对随机的会话密钥进行解除绑定,而这个密钥通常是用来加密比较大的数据.
TCG规范中,Tspi_Data_Seal和Tspi_Data_Unseal是TSS层的API的密封功能接口函数.其中,Tspi_Data_Seal用来对数据进行加密,Tspi_Data_Unseal是其逆运算,对数据进行解封.不可迁移密钥的公钥用来加密数据,公钥是由给定的其它密钥按照图1的结构图产生.密封将PCR值一起密封,作为记录被密封到数据中,在解封过程中,首先验证PCR值是否一致,如果一致,说明当前平台状态和密封时平台状态是一致的.这种密封主要用于第三方的证明.如果验证者不对平台状态进行安全性的要求,则PCR不必密封进去.只有需要对平台的状态进行安全验证时,才将PCR和数据一起进行密封.
通过一个特定的TPM进行密封,并且仅仅有该TPM解密,必须满足:1)知道密封认证秘密;2)能载入密封数据的父密钥;3)PCR是正确的状态.满足这三个属性才可以解密.其过程如图3:
图3 TPM密封过程图
计算被密封数据的摘要值,并将其存储到变量Sealdata.storedigest,同时将PCR值存储到摘要变量indata.Sealinfo.digestrelease,其中由TPM授权的密钥key对indata进行密封,产生密封后的数据endata.
Tspi_Data_Unseal是其逆操作,过程相对比密封复杂,其过程如图4:
图4 TPM解封过程图
具体如下:
a.先检查密封时的数据的摘要值和数据存储摘要变量值Sealdata.storedigest是否一致,如果一致,到下一步;否则,return为数据密封错误;
b.接下来检查密封时PCR值和当前密封时PCR值是否一致,如果一致,到下一步;否则,return PCR错误;
c.检查TPM授权dataauth值和密封数据的授权数据authdata值的一致性,如果一致,到下一步;否则,return授权值的错误;
d.最后使用TPM的密钥key对数据encdata进行解密,ruturn结果.
2.3.1 绑定和密封操作过程对比分析
绑定和密封都是TPM的数据保护方法,并且都是由非对称密钥给密钥加密,都可以用来远程认证,在TSS层都有相应的功能接口被调用.但它们又有一定的区别:
绑定:a.可以使用绑定密钥加密和遗留密钥加密.绑定密钥用来在可信平台中加密小数据(比如对称密钥),只能用来做基本的RSA加密,不能用来加密除对称密钥之外的其他内容.
b.只能加密对称密钥.
c.可以是可迁移的密钥,重点强调的是被绑定密钥加密.
d.在TPM中,没有相应的TPM_Bind命令,但有TPM_Unbind命令
密封:a.只能用存储密钥RSA密钥的公钥加密,这意味着对密封密钥的长度要求更加严格.
b.PCR值作为记录和密钥一起被密封.
c.一般是不可迁移密钥,重点强调是和平台的绑定,即被TPM或是与PCR的绑定.
d.在TPM中,有相应的TPM_Seal命令,也有TPM_Unseal命令.
密封比绑定功能更强大,密封操作允许用户将独立的数据块与任意的PCR进行密封,而不需要考虑密钥本身是否和PCR绑定.
2.3.2 绑定和密封运行时间分析
TPM_BOUND_DATA是绑定的结构体,字节数有5字节.一个512位RSA密钥能加密64字节的数据,减去TPM_BOUND_DATA结构体5个字节的长度,如果用OAEP填充长度,占38个字节,因此仅仅剩下21个字节的可用长度来加密密钥;如果用PKCS#v1.5填充,占用11个字节,剩下53个字节,以此类推,用PKCS#v1.5能加密更多的数据,其对比如表1:
表1 不同长度和类型的密钥可用于加密数据的最大长度
TPM_SEALED_DATA是密封的结构体,字节数有65个字节,对比5字节的TPM_BOUND_DATA,在密封对称密钥时,空余的长度是不够的.表2列出了不同长度的RSA密钥允许密封数据的长度(以OAEP为填充数据).
表2 不同长度的密钥允许密封数据的最大长度
从表2中可以看出,可以加密目前所有的常用对称密钥.但由于TPM_SEALED_DATA结构体的长度限制,导致其他长度的密钥不能用.因此每次密封的长度要比绑定的长度小.一般情况下要用到2 048位的RSA密钥加密.用户可以使用遗留密钥或是绑定密钥对数据进行绑定(不一定是TPM产生的密钥)但只有存储密钥(由RSK产生)才能用来对数据密封,这意味着对密封密钥的长度要求更加严格.而绑定数据用RSA密钥绑定可以是512,1 024,2 048字节,RSA密钥可以是TPM之外的密钥.
从上面的分析可知,每次加密时,相对于2 048位的RSA密钥加密而言,Binding每次加密的字节长度要大于Sealing加密的长度,除此之外,密封过程还要验证PCR的值,并且绑定过程不需要在TPM内部执行.因此,从数据结构和原理上分析,绑定的时间要比密封的时间要短.下面通过实验来进行验证.
本文测试硬件采用Atmel TPM芯片,符合TCG1.2规范的TPM;OS为linux,使用fedora-1.3194;内核采用2.6.34.7;而可信软件栈 TSS使用Trousers 0.3.6.
对于数据绑定操作,所用的TPM平台可以支持512位,1 024位和2 048位的RSA密码.而对密封操作,TPM平台仅仅提供2 048位的RSA密钥支持.对Binding和Sealing操作,一般以2 048位的RSA密钥加密目前常用的对称密钥,对不同大小的数据块进行Binding和Sealing测试,数据块以0.1 KB间隔的大小递增,最大测试数据为1KB,以最后加密时间进行比较.则绑定和密封时间比较如图5所示:
图5 绑定和密封的时间比较图
图5显示,密封1KB数据块的时间大约为2.80s,而对绑定的为时间大约为1.07s.对同样大小的数据块,密封所用的时间要大于绑定的时间.并且,随着数据块的增加,密封和绑定时间都在增加,绑定增幅没有密封明显.对较大数据块进行Binding操作时,是将其数据块分成较小的数据块,并分别进行Binding操作,最后再重新组装成大的数据块保存在外存.假设加密1KB的数据块,使用2 048位的RSA密钥进行Binding,填充类型为OAEP(Optimal Asymmetric Encryption Padding),每次可Binding213个字节,大约需要5次的数据块分割,分别进行绑定,组后组装成一个大的数据块.而对于密封操作来说每次只能Sealing153个字节,需要大约7次数据块分割,分别进行Sealing,最后再组装.因此,绑定消耗的时间要小于密封消耗的时间,另外,绑定的操作不需要在TPM内部执行而在宿主机上执行,因此,绑定的时间要比密封的时间要短很多.
通过调用位于TSS层的Tspi_Data_Unbind和Tspi_Data_Unseal的功能接口,对Binding和Sealing操作的数据做逆运算,验证通过Unbinding和Unsealing解密之后的数据和Binding和Sealing加密之前的数据一致,对比其运行时间如图6:
图6 解封和解除绑定的时间比较图
从图中可以看出,对于同样大小的数据块,解封的时间要大于解除绑定的时间,随着数据块的增大,解封的时间和解除绑定的时间都基本是以线性增加.而对于只对1 KB的解除绑定和解封来说,时间一个是5.75 s,一个是7.85 s,时间相对绑定和密封来说都要长一些,对于密封和绑定如果只是对1 KB大小的数据进行操作,这个时间还是可以接受.但如果是对更大的数据进行操作,时间会线性增加.同样这个时间对于解除绑定和解封也会线性增加.因此,对更大的数据密封或者绑定将需要很长的时间,因此可信计算在数据保护方面,从时间效率上考虑,加密较大的数据将要花费大量的时间,比较适用于加密小的数据,如可以加密密钥等数据.
绑定适合于传统的远程认证中,接收方和发送者之间对密钥进行加密,只不过这个密钥是由TPM来绑定,但也可以根据情况进行迁移密钥的迁移.而密封是与TPM当前的平台配置信息相关,如果和平台配置信息一致,则用TPM的不可迁移密钥进行解密.整个过程与特定平台的特定状态相关联.由于密封操作的数据结构比绑定结构空间需要大,且操作过程需要PCR的状态验证,所以比绑定需要的时间更长.但这两种数据保护方式由于都用到RSA算法,适合加密密钥等数据.如果是更大的数据,需要其他方式来解决.在应用程序使用过程中,将常规密码和公钥密码结合在一起使用,比如:利用DES来加密信息,而采用RSA来传递会话密钥.将数据用对称密钥通过宿主机的CPU加密,再用TSS的Tspi_Data_Seal或Tspi_Data_Bind通过TPM对对称密钥进行绑定和密封,就可以克服TPM运行绑定和密封时运行时间长的特点,在远程认证过程中,建立会话密钥,再由TPM对会话密钥进行绑定和密封.将TPM的严密的数据保护功能应用到应用程序中.
目前,TPM芯片已广泛应用到PC中,通过TPM的功能设计和比较安全的构架,增强了平台的安全性.Sealing和Binding是可信平台下的两种数据保护方式.本文通过从数据结构和过程两个方面对这两种方式的性能进行比较和分析,分析其共同点和适用的范围.通过测试,得出对数据的绑定的时间要比密封的需要的时间少,解除绑定的时间要比解除密封的时间少.从时间的效率方面考虑,可信计算的数据保护适用于对较小的数据量操作,对较大的数据,其操作时间是线性增长的,因此,需要通过其他方式进行解决,如将加密过程移到宿主机来执行或者是由远程服务器加密之后再传递会话密钥.如果应用不必考虑可信平台的配置信息时,用绑定操作比密封操作更能节省时间,但安全性能不如密封操作.
[1] Trusted Computing Group.TCG Specification architecture overview specification revision 1.2[EB/OL].http://www.trustedcomputinggroup.org,2012-05-01
[2] Trusted Computing Group.TCG software stack specification version 1.2[EB/OL].http://www.trustedcomputinggroup.org,2012-05-01
[3] 刘昌平,范明钰,王光卫.可信计算环境数据封装方法[J].计算机应用研究,2009,26(10):3 891-3 893
[4] 陈小峰.可信平台模块的形式化分析和测试[J].计算机学报,2009,32(4):646-652
[5] 刘安战,韩玉民.可信平台模块数据保护能力测试与分析[J].计算机应用,2010,30(5):1 243-1 245
[6] (美)查利纳(Challener,D.).可信计算[M].赵 波,译.北京:机械工业出版社,2009
Data Encryption Strategy Based on Trusted Computing Software Stack
Yan Jianhong
(Department of Computer Science,Taiyuan Normal University,Taiyuan 030012,China)
The concept of trusted computing and the TCG Software Stack(TSS)was introduced.In particular,configurations and kinds of the Trusted Platform Module(TPM)was expounded.Performance between of binding and sealing was compared and analyzed from the data structure and encryption process.And similarities and applicable scope of them were discussed.It is concluded that sealing is more powerful than binding and its safety is also higher than binding.The test results show that data-binding need less time than data-sealing and data-unbinding need less time than data-unsealing.The two kinds of data protection method of trusted computing are only suitable for smaller data from the aspect of time efficiency.The time of encrypting and decrypting mass data increases greatly.
trusted computing;trusted platform module key;data binding;data sealing;data security
张丽萍】
1672-2027(2012)03-0057-06
O223;C934
A
2012-06-27
山西省高等学校科技项目(20101115).
闫建红(1972-),女,山西盂县人,博士研究生,太原师范学院计算机系副教授,主要从事网络安全、可信计算研究.