可信计算平台是在计算和通信系统中广泛使用基于硬件安全模块支持下的可信计算平台,以提高系统整体的安全性。那么可信计算平台下的文件是如何加密的呢?我们接下来看看。
一、可信计算平台的文件加密框架
在用户空间文件系统开发模型FUSE(File system in Userspace)、TPM及其软件栈TSS(TCG Softvare Stack)的基础之上,以FTP服务器作为存储部件,开发出基于可信计算平台的加密文件系统,系统中所有文件经过客户机上的TPM进行加解密处理,存储部件不参与任何加解密过程,从而保证系统的安全性。
系统的总体架构如图1所示,整个加密文件系统主要由6部分组成:FUSE内核模块、FUSE用户模块、TPM、TPM驱动程序、TSS和文件服务器。其中FUSE内核模块和FUSE用户模块是整个系统的核心,FUSE内核模块将虚拟文件系统VFS提交的读写请求传递给应用层的FUSE用户模块,由FUSE用户模块来执行具体的文件读写。FUSE用户模块除了执行具体的文件读写外,还需要根据加密文件系统的逻辑结构提供对所有加密文件的加密和解密处理。
1、TPM和TSS
TPM是一个含有密码运算器件和存储部件的小型嵌入式系统。在用户初始化TPM时,产生SRK密钥,保存在TPM内部,并通过该密钥来加密保护所有将来产生的密钥以及需要保护的外部数据。敏感的私钥从来不会在硬件之外以明文的形式呈现。通过使用TPM进行加密操作,可以将所加密的数据绑定到该TPM所在的平台上。通过对在BDS里对TPM的状态进行配置,可以使得TPM拒绝加密任何信息。
TSS是可信平台模块的支撑软件,它在TPM之上又扩充了TPM的功能,由TSS Device DriverLbIary TSS Core Service和TSS Service PIDvider三层组成。它主要提供了TPM管理、上下文管理、密钥管理、数据加解密、数据HASH、策略和属性管理等功能。
2、FUSE
FUSE是一个用户空间文件系统开发模型。通过提供一个抽象的接口,使用户可以复用已开发的应用层代码来开发自己的文件系统。FUSE主要由三个模块组成:FUSE内核模块、FUSE开发库和FUSE用户模块,其工作原理如图2所示。
1)应用程序通过系统调用中的读写函数进行I/O调用。
2)虚拟文件系统VFS根据文件系统的类型将应用程序的读写请求转交给FUSE内核模块去执行。
3)FUSE内核模块同用户层开发的USE用户模块通过/dev/fiise虚拟设备和信号机制进行通信,具体的文件读写和文件系统逻辑处理任务由FUSE用户模块来完成。
由于在TPM硬件上开发出来的TSS软件栈都处在用户层,而本系统又要使用ⅡM的功能进行数据的加密保护,从而选择借助用户空间文件系统模型进行开发。
二、基于HMAC的数据检验
基于密码学的数据完整性检验通常有两种方式:一种是通过HMAC实现,另一种是通过公钥签名实现。两种方式都是公认的具有较高安全性的完整性检验方式。与前一种方式相比,采用后一种方式算法较为简单,但公钥签名同时在更大程度上增加了系统读写的时间消耗。综合考虑系统的性能和用户量,系统中采用基于HMAC的方式,其算法描述如下:
(1)在文件创建时,由文件owner随机产生一个HMAC密钥,记为khmacw表示密钥用于文件HMAC值的计算和验证,w表示密钥由具有写权限的用户共享。
(2)当需要授权给用户A时,如果是写权限,则创建者将khmacw共享给A;如果是读权限,则创建者根据khmacw计算出khmacri并共享给A。ri用来表示第i个具有读权限的用户。
(3)khmacri由磁khmacw通过one - way HASH函数计算得出:khmacri。=h(khmacw,i)。
(4)修改文件时,修改者使用khmacw为所有具有写权限的用户计算文件HMAC检验码;使用khmacw为所有具有读权限的用户分别计算文件HMAC检验码。
(5)读取文件时,读取者需找到自己的HMAC检验码。如果用户具有写权限,那么使用khmacw验证文件完整性;如果用户仅具有读权限,那么使用khmacri验证文件完整性。
综上所述,修改文件时,用户必须计算系统中每个用户的文件HMAC检验码;读取文件时,用户获取自己的文件检验码,并验证文件的完整性。所有具有写权限的用户的HMAC密钥相同;任何一个仅具有读权限的用户的HMAC密钥都不同。具有写权限的用户都有khmacw,所以能计算每个具有读权限的用户的HMAC密钥。由于one - way HASH具有单向性,因此所有仅具有读权限的用户很难由khmacri计算出khmacw,从而保证了系统的安全性。将每个文件所对应密钥的集合称作该文件的密码元数据。具有写权限的用户利用khmacw冒充创建者对文件的密码元数据进行修改是算法的一个主要缺陷,在下一节中将运用多层密钥保护结构,将密码元数据作为密钥树中的一个节点进行保护,从而来保证密码元数据的机密性和完整性。
三、多层密钥保护结构与文件加密操作
在可信计算中,TPM通过硬件来保护根密钥的安全性,然后采用密钥树的方式从根开始层层加密,从而提供对整个树中节点的安全保护。因此将整个文件系统树型结构中的各节点引入密钥树,运用TPM密钥树保护思想能够对整个文件系统提供安全保护。其结构如图3所示。
其基本思想是:
1)每个TPM中有且仅有一个存储根密钥SRK。SRK作为存储保护的根密钥,与硬件绑定在一起。用户通过TPM产生一个用户主密钥UMK,UMK通过SRK直接进行加密保护或者通过TPM产生的其他密钥进行加密保护;
2)每个用户的UMK都由两对非对称密钥组成:一个用来加密,将其称作用户加密密钥UEK,另一个用来签名和验证,将其称作用户签名密钥USKa通过UEK的公钥来加密保护文件主密钥IMK,从而使得只有合法的用户才可以得到IMK的明文。USK用来保护加密后的IMK的完整性;
3)每个IMK都由三类对称密钥组成:第一类密钥用来对文件进行加密保护,将其称作文件加密密钥FEK;第二类密钥用来计算文件HMAC校验值,由具有写权限的用户拥有,将其称作文件写密钥rwK第三类密钥用来对文件的HMAC进行校验。由具有读权限的用户拥有,将其称作文件读密钥FRKo上一章中的khmacw和khmacri分别对应FWK和FRK。
1、创建文件
在系统中创建一个文件需要经过以下步骤:
(1)在创建文件前,随机产生三个密钥FEK,FWK和FRK(对于具有写权限的用户FRK=FVVK)。
(2)同用户交互,并从ⅡM中加载正确的UEK和USK.UEKH9来对(1)中随机产生的三个密钥进行加密保护,将加密结果称为该用户的EKB(加密密钥块)。
(3)对(2)中产生的E髓进行HASH。并通过USK私钥对该HASH进行签名,用来保证数据的完整性。
(4)EKB及其HASH签名组成创建者访问该文件时需要用到的密码元数据,并保存在md-file中。
2、共享文件
假设Alice是文件的创建者,她要将文件的读或写权限授予Boh需要经过以下步骤:
(1)Alice通过某种方式得到Bob的UEK公钥。
(2)Alice读取该文件的md-file,通过自己的USK公钥验证密码元数据的完整性,然后从中获取自己的密码元数据。
(3)Alice用自己的UEK解密密码元数据后,按照基于HMAC的数据检验算法计算出Bob的HMAC密钥FRK和FWK然后Ahce用Bob的UEK公钥加密FEK,FWK和FRK。对于读权限用户FWKK无效。其加密结果是Bob的EKB。
(4)对(3)中产生的E髓进行HASH。并通过Alice的USK私钥对该HASH进行签名,用来保证数据的完整性。
(5)将EKB及其HASH签名作为Bob访问该文件时的密码元数据,并增加到md-file中。
四、性能测试
系统运行环境为Cele卫Dn CPU 2 00GHz,256MB内存,对称密码学采用128位密钥的AES算法,公钥密码学采用1024位密钥的RSA加密和签名算法,用户数目10个。实验数据如表1所示。因为需要产生加解密密钥和HMAC密钥,同时还要对文件数据和密码元数据进行加密、签名等操作。因此文件操作要比NFS慢的多,对于1MB大小的文件,读操作所花费的时间是NFS的3倍左右,而写操作所花费的时间是NFS的8倍左右。与SIRUS对比,TCBFS的读写速度慢一些。从表1可以看出,TCBFS创建和共享文件的速度大约为SIRUS的1.4倍,对1MB文件进行写操作的速度为SIRUS的1.6倍,但由于采用基于HMAC的完整性校验方式,明显提高了读操作的速度,两者基本相同。由于所有RSA密钥及加解密操作都采用TPM硬件来完成,而目前的TPM硬件加密解密速度比openssl等软件要慢,同时用户空间文件系统开发模型的使用也增加了系统运行的时间消耗。考虑到上述因素的客观性,在系统实现中,对目录树加密元数据和加密文件采用较好的缓存和索引算法来尽量提高系统的性能。
可信计算平台的文件加密就是这样的,有需要的话,您也不妨试试。
小知识之FUSE
用户空间文件系统(Filesystem in Userspace),是Linux 中用于挂载某些网络空间,如SSH,到本地文件系统的模块,在SourceForge上可以找到相关内容。