Hadoop作为一个开源的分布式编程框架,已逐渐成为计算机行业最新的潮流。其分布式文件系统(HDFS),可存储大量数据,具有高容错性和吞吐量。然而,目前的HDFS不支持云内的数据加密,则使得数据的私密性成为一个至关重要的安全问题。为此我们提出了一种基于HDFS的混合加密方法。
一、HDFS的数据加密
为了实现数据存储持久和读取便捷,HDFS将文件分割成预定好数据大小的数据块格式,集群则被分成一个负责管理元数据的主节点和多个存储块文件的数据节点。主节点是整个云存储服务的入口,其中元数据包含的信息有命名空间、访问控制信息、文件块位置和文件块的对应关系等。数据节点则是用来存储云端数据文件,每一个经过客户端分割后的文件块都有唯一的ID进行标识。
1、系统架构
我们的安全目标是阻止攻击者在入侵数据节点之后窃取文件信息。正如图l所示,将加密和解密模块放人数据节点中,模块采用AES算法在对数据块进行写操作之前完成加密运算;反之,在对数据块进行读操作之前进行解密运算。一个数据块用同一个存储在数据节点上的密钥进行加解密操作。密钥管理模块在数据节点中实现。相对于数据节点与主节点之间的通信协议维持不变,在客户端和数据节点之间则加入了验证协议和密钥交换协议。
2、密钥管理
如果密钥以明文形式存储在数据节点上,将无法保证仅仅通过加密文件操作就能确保用户的私密性,因为攻击者势必能够在恶意攻击到数据节点后获取到明文密钥信息从而完成数据文件的解密操作。为了有效解决这个问题,采用非对称加密算法RSA对AES密钥进行加密,而后再将其存储在数据节点中。客户端负责生成RSA密钥对,并且存放其中的私钥,公钥则被主节点存储在元数据中。图2展示了混合加密方案的基本流程,其中,待加密文件被分成N个数据块,分别为B1,B2,…,Bn,每个数据块都有与其对应的AES密钥kbn。
3、系统实现
采用Java库函数中的JEC(Java CryptographyExtension)来实现加密算法。在AES加解密算法中选用CFB模式,该模式数据块被细分成连续的16B小块,末尾不足16 B的部分也不预补足。这样选择的原因是CFB模式满足了AES加密后数据块长度不变的特性,也就是说1个默认大小(64 MB)的数据节点数据块在经过AES-CFB的加密后不会发生长度的改变,从而破坏整个系统的基础环境设定。
(1)加密方案
加密模块被加入在数据节点代码中生成文件代码段的位置。图3描述了加密过程的时序。客户端在初始化时生成RSA密钥对,然后公钥被上传到主节点中。当客户端请求主节点创建一个文件时,主节点发回一个含有数据节点链表和客户端RSA公钥的元数据。对每个文件块,客户端从管道中发送公钥到第一个数据节点而后将数据块分包上传。在接收到新的块后数据节点生成一个AES会话密钥用于加密数据块文件,而之前的RSA公钥则用来加密这个AES会话密钥。最终,加密后的文件块和加密后的AES密钥分别独立存储在数据节点的本地磁盘中。后续的数据节点则通过管道接收加密后的文件块信息,而无需重复加密工作,从而节省服务器资源。
应当注意到,HDFS文件系统会定期检查存储在数据节点中文件块的CRC(Cyclic RedundancyCheck)冗余校验码,以确保存储在云端数据的可靠性,以防应为存放时间长久由于磁盘错误而引起的数据失效问题。客户端在发送数据前为每个数据块计算出一个512 B的CRC冗余校验码,一并将其上传至数据节点中。数据节点会周期性的计算磁盘内数据块的CRC冗余校验码,并与初始的CRC冗余校验码相比较,以确保文件的可靠性。由于加密后的数据块的CRC32冗余校验码必然与明文时的不同,所以在加密后还需重新计算一个新的CRC冗余校验码,以应对这一机制。
(2)解密方案
正如图4所示,在数据节点接收到客户端的读数据请求后,将首先发送给客户端所读数据块相对应的AES密钥的密文。客户端用RSA私钥解密后再将AES密钥明文发回给数据节点。最后,有数据节点完成数据块的解密工作后发还给客户端。
二、性能测试
1、测试环境
实验在1个只有2台机器的环境中进行。主节点硬件配置为Intel Xeon 8-core 2.00 GHz,10 GB内存,1TB硬盘。数据节点硬件配置为Intel Xeon 16-core 2.20 GHz.20 GB内存,2TB硬盘。数据副本设为1。
2、改进系统与原生系统的对比测试
在上述加解密方案中,系统开销可分为两部分。一部分是数据块加解密运算的开销,另一部分开销则是花费在密钥管理,CRC冗余校验码的重新计算上。将对包含加解密运算的系统总开销和不含加解密才做的新系统架构开销分别进行测试,并与原生系统进行详尽的对比。
(1)加密测试
在加密测试环节,我们通过上传不同大小的文件,对包含加密运算的新系统和原生系统在写操作下的吞吐量进行了对比。如图5所示,新系统和原生系统的吞吐量分别在上传512 MB和256 MB的时候达到顶峰。性能的衰减随着上传文件块的大小变化而变化,在文件大小为256 MB时,衰减为最大,达到53%;当数据块大小为8 MB时,衰减为最小,低于33%。
很明显可以看出,性能的衰减主要是因为加密操作的引入,因为若新架构的系统不进行加密运算,则增加的系统开销不足2%。因为大量的AES加密运算消耗了一定量的CPU资源,使得本来专注于HDFS系统调度的CPU不得不增加其在运算中的开销。后续研究中,将引入通用计算技术( GPGPU),彻底改观HDFS系统吞吐量大幅衰减的现象。
(2)解密测试
通过与加密测试相对应的测试方法,分别读取在加密测试环节中上传至数据节点中的文件,从而评估解密环节的性能开销。如图6所示,读取速度1.4倍于写入速度,因为磁盘的读取速度比写入速度要高。由于解密运算和加密运算占用的CPU资源是一样多的,所以解密阶段的性能衰减比加密阶段高出了75%,但新架构带来的系统额外开销依然在2%以内。
小知识之Hadoop
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。