本文首先对Hadoop的分布式文件系统HDFS进行研究,通过分析其数据传输过程,设计实现一种大文件的安全传输方案,保证大文件传输过程中的安全属性。
2.Hadoop分布式文件系统HDFS研究
2.1 HDFS体系结构
HDFS由互连的节点集群组成,是一个典型的主从结构体系,主要涉及3种种实体:命名节点(NameNode,NN),数据节点(DataNode,DN)和客户端(Client),其中NN管理文件系统的元数据,DN存储实际的数据块。
图2-1 HDFS体系结构图[1]
NN是整个系统的主控制服务器,每个集群中只有唯一一台性能可靠、配置较高的物理机器作为NN。它负责维护文件系统的命名空间(NameSpace)并协调客户端对文件的访问。同时,NN维护着“文件名→文件所包含的数据块”和“数据块→存储该数据块的DN”这两个重要的映射表[1]。
DN是整个系统的工作者,一个HDFS集群中包含有多个DN,一般一个DN只对应一台普通的物理机器。它的主要功能是存储数据块和被NN、Client和其他程序调用。
客户端可以看作运行在HDFS上的应用程序,它通过网络与NN和DN进行通信,进行数据传输和管理。以文件下载为例,客户端首先与NN通信,获得包含有数据块位置信息的元数据,再根据元数据与相应的DN进行通信,从而获得需要的数据块,完成整个文件的下载。
2.2 HDFS数据流写入过程分析
一、数据流写入机制
HDFS中以流的方式进行数据的读取,图2-2表示了客户端对DHFS写入数据的过程。
图2-2 客户端对HDFS写入数据过程图[6]
Client准备在HDFS中创建一个新文件,并往该文件中写入数据流时,首先需要创建一个DFS实例;之后,调用DFS实例的create方法,通过RPC与NN进行通信,发送创建新文件的请求;DFS继承了FileSystem类,其create方法创建新文件成功后,返回一个FSDataOutputStream对象实例,Client通过write方法写入数据;FSDataOutputStream将用户数据打包,放入数据队列中,数据流根据NN提供的DN列表来为数据块选择存储副本的DN,所有的DN形成一个管道(Pipeline of DNs)。数据包传到第一个DN后,沿管道依次复制给管道中的DN;当管道中的所有DN都确认一个数据包传输完毕后,数据包就被从确认队列中移除;当数据块写入完毕后,Client调用FSDataOutputStream的close方法来关闭数据流;一切写入工作都处理完毕后,Client与NN通信,确认写入已经完成,并告诉NN各数据块存储信息[7]。
二、数据块写入过程源码分析
通过hadoop-common-2.2.0.jar文件中的API org.apache.hadoop.fs.FileSystem.
copyFromLocalFile(Path src,Path dst)可将本地的文件上传到HDFS的指定位置,其中src是本地文件的路径,dst是HDFS中的目标路径,通过分析该API可以得出图2-3所示的分析图:
图2-3文件上传过程源码分析图
IOUtils.copyBytes(in,out,conf)方法实现数据传输流的复制,其中conf是配置信息,表示数据流写入内存的大小;in为FileInputStream类型,是本地文件生成的节点流;out为FSDataOutputStream类型,该类继承自DataOutputStream,指向HDFS中的目的路径,是一个复杂的处理流。out由dstFS.create()方法创建,其中dstFS是FileSystem类的一个实例。该方法是一个抽象方法,无方法实体,但DistributedFileSystem类继承自FileSystem类,并重写了create方法。在重写的方法中,首先实例化一个名为dfs的DFSClient类,负责与NN和DN进行通信,通过dfs.creat()方法来创建out输出流。返回的out为DFSOutputStream类型,该类是Client和HDFS之间传输数据的关键,继承自FSOutputSummer类,同时包含Packet、DataStreamer和ResponseProcessor三个内部类,分别用于规定数据传输的单位packet及其格式、写数据包和读应答。
FSOutputSummer是一个抽象类,它包装了与checksum相关的操作方法,用于产生校验和,数据输出流接收数据是通过它的write方法。
3. HDFS数据安全传输方案
为了实现数据的安全传输,需要设计实现数据的加密上传方案,以保证数据传输过程中的安全属性。
3.1方案设计目标
(1)保证文件的安全属性;
(2)具有较高的执行效率;
(3)具有较小的执行开销。
3.2方案描述
客户端进行文件上传之前,先计算文件的特征值(哈希值),并用私钥进行签名,以便下载数据时进行校验,保证数据的完整性;然后通过修改Hadoop的源码,使客户端在分块上传文件的过程中,在数据包放入数据队列之前,对数据包内的数据进行实时加密,实现边加密边上传。
该方案的特点有:(1)开销较小,速度快;
(2)便于实现断点续传;
(3)实现难度较大,设计复杂。
文件下载过程中,数据通过密文流传入用户内存后,将其解密为明文,再通过文件输出流,恢复原文件。
3.3方案安全性分析
方案的安全性主要体现在以下几个方面:
(1)保证文件的完整性。在传输前计算文件特征值,并用私钥进行签名,用于下载文件时校验,确定文件是否被修改或破坏,以保证文件的完整性。
(2)保证用户的帐户安全。整个过程需要用户私钥来对文件进行校验等操作,即使帐户被盗,非法用户由于无法获取私钥,也不能窃取文件。
(3)保证传输过程的机密性。文件在写入输出流之前加密,以密文的形式写入输出流,传入网络。即使被非法截获,也是以密文形式丢失,不会影响文件的机密性。
(4)保证文件存储的机密性。文件以密文的形式存储在云端,可以防止服务商监守自盗。另外,一旦服务器被攻击者攻破,攻击者也无法获得明文,不会损失文件的机密性。
3.4方案实现
从上传过程分析可知,数据输出流接收数据是通过FSOutputSummer.write()方法实现,因此可以在write()方法中先将数据加密后,再写入输出流。
图3-1 FSOutputSummer的类图
FSOutputSummer继承自Java的基类OutputStream,并重写了它的write()方法,其代码如图3-2所示。
图3-2 FSOutputSummer.write方法代码
其中参数byte b[]就是需要写入输出流的数据,取自内存中,其大小一般设置为4096Bytes。如果能在这里把它加密,并保持加密先后的大小不变,这样既不会影响后面对数据的处理,也能达到保证机密性的目的,是合适的加密位置。
加密算法采用序列密码RC4算法,文件加密上传后大小不变,可以保证正常下载解密。对数据进行加密后,数据的整个传输流程如图3-3所示。
图3-3 数据流传递过程图
上传文件时,首先通过FileInputStream将文件数据按每次4096Bytes写入到客户机内存中。在DataOutputStream进行处理时,先将数据用RC4算法进行加密;然后分成大小为512Bytes的Chunk,每个Chunk是一个校验单位,产生4Bytes的校验和;Chunk数据及其校验和会不断传入Packet中,当Packet大小为64Kb,即包数据已满时,将该数据包放入数据队列,然后通过网络传到Block中,一个Block大小为64Mb。最后,Block及其备份都存储在Hadoop云存储系统中。
对图3-9所示的FSOutputSummer.write方法进行改写, 具体代码如图3-11所示。
图3-11改写后的写数据块代码
其中isEnc是一个布尔值,获取自upload类中的静态值upload.isEnc,用于判断是否需要对数据进行加密;RC4Key是数据加密中使用的密钥,通过upload.getKey()方法获取,返回一个采用Base64编码的字符串;数据b采用RC4Coder.encry(b,RC4Key)方法进行加密。改写完成后,我们将代码编译打包,导出新的hadoop-common-2.2.0.jar文件,方便以后调用。
文件解密下载时,需要将内存中的输入流按照4096Bytes大小来解密,这样才能保证密钥流的同步,正确解密得出原文件。
4.CSD安全传输插件的设计与实现
4.1设计目的
CSD安全传输插件是安全云盘系统的核心部件,其设计目的是为用户提供安全的文件传输方式,保证文件的安全属性。
4.2功能设计
根据文件传输过程中的用户需要,安全传输插件应具有密钥管理、安全传输和过程控制等功能,具体的功能设计如图4-1所示。
图4-1 CSD安全传输插件功能结构图
插件系统包含安全上传和安全下载两个模块,每个模块分别包含密钥管理、加密上传(解密下载)和传输控制三个子模块。
上传过程中,密钥管理子模块具有密钥生成、分割和恢复三个功能,主要负责生成数据加密的会话密钥,并采用(2,3)门限方案分割成三份,由云端、可信第三方和用户分别存储,方便恢复和调查取证;加密上传子模块具有首次上传、断点续传和特征值生成三个功能,主要负责数据的加密传输和校验;传输控制子模块具有进度显示和上传控制两个功能,主要负责显示数据上传进度、速度等信息,并对上传过程进行暂停、继续等控制。
用户在云端的命名空间目录结构设计如下:
/SecuCloud/UserName/File/FileType/FileName
(存储用户的加密文件)
/FileInfo/FileType/FileNameInfo
(存储用户加密文件的相关信息)
/ThirdStore/UserName/KeyShare/FileType/FileKeyShare
(存储可信第三方公钥加密后的密钥共享份)
图4-2表示文件上传的流程。
图4-2 文件上传流程图
下载过程中,密钥管理子模块具有密钥恢复功能,主要负责恢复数据的会话密钥,用于对数据进行解密;解密下载子模块具有首次下载、断点续传和完整性校验等功能,主要负责数据的安全下载,并对数据进行解密还原,同时校验其完整性;传输控制子模块具有进度显示和下载控制两个功能,主要负责显示数据下载进度、速度等信息,并对下载过程进行控制。图4-3表示了文件下载的流程。
4-3 文件下载流程图
4.3工程实现
由于Hadoop源码采用Java语言,为了使用户的数据在本地完成加密然后上传,CSD安全传输插件采用Java Applet技术来开发。插件能够拓展Web浏览器,实现客户端软件的功能,但它只是在使用的时候下载到内存里运行,避免了用户安装、升级客户端软件的麻烦。Applet和微软的ActiveX类似,是在Web浏览器中运行的小程序,但Applet具有Java的跨平台特性,在Linux和Windows环境下,只要有JVM都可以运行。
一、Applet插件的实现
文件安全传输Applet插件的包文件结构如图4-4所示,其中最主要的是uploadFile.java和downLoadFile.java两个文件,主要实现文件的安全
上传和下载,其它文件主要实现密钥管理、数据加密和数据库操作等功能。另外,导入新的hadoop-common-2.2.0.jar文件,用于实现文件的加密上传。
图4-4Applet插件文件结构图
Applet插件开发完成后,导出jar包,签名后嵌入到Web网页中,进行功能测试。
二、Applet功能测试
首先,部署如图4-5所示的测试环境。
图4-5测试环境部署图
其中,NameNode、DataNode1和DataNode2三台主机构成了简单的Hadoop集群,为安全云盘系统提供数据存储支持;Web Server利用TomCat服务器部署了安全云盘的Web服务系统;Client PC是客户主机,用于对系统进行测试;整个测试环境处于一个局域网中。
经过一系列测试,插件系统基本可以完成预期功能,且工作效率较高,在百兆局域网环境下上传下载的峰值都能达到11Mb/s左右。
5.总结
本文在学习了云计算和云存储的相关理论后,首先分析了云服务的发展现状,对云存储中面临的一些安全问题进行了研究;然后深入分析Hadoop分布式文件系统HDFS,详细了解其体系结构、功能和运行机制,并重点对上传文件时的数据流进行研究,在此基础上提出了针对HDFS传输数据流的安全方案,使传输过程安全可靠;根据安全方案,对Hadoop源码进行相应修改,使之正常工作,完成预期功能;基于之前的研究结果,设计实现安全云盘的核心部件——CSD安全传输插件,实现了文件的安全传输。
整个系统让用户的文件数据在本机加密之后再存储到云端,保证了传输过程的安全和云端存储的安全。这样,即使数据在传输中被抓包或是在云端被非法窃取,都是以密文的形式被非法获得,不会损失机密性;另外,文件校验机制让用户文件不会被非法篡改。“浏览器+插件”的开发模式,符合云计算发展的主流,也更加方便用户的使用。在信息安全不断被用户重视的今天,安全云盘系统致力于打造一个“数据银行”,为用户提供安全存储服务,既能保护数据的安全性,也能方便用户随时使用,具有良好的市场前景。
参考文献
[1]刘鹏.云计算(第二版)[M].人民邮电出版社,2013
[2]Siani Pearson.Taking Account of Privacy when Designing Cloud Computing Services[J],HP Laboratories HPL-2009-54
[3]Chao YANG, Weiwei LIN, Mingqi LIU.A Novel Triple Encryption Scheme for Hadoop-based Cloud Data Security[J].2013 Fourth International Conference on Emerging Intelligent Data and Web Technologies:438-442
[4]Bao Rong Chang Hsiu Fen Tsai Zih-Yao Lin Chi-Ming ChenAccess Security on Cloud Computing Implemented in Hadoop System[J].2011 Fifth International Conference on Genetic and Evolutionary Computing:77-80
[5]Huang Jing, LI Renfa, Tang Zhuo.The Research of the Data Security for Cloud Disk Based on the Hadoop Framework[J].2013 Fourth International Conference on Intelligent Control and Information Processing (ICICIP) June 9-11,2013, Beijing, China:293-298
[6]Tom White.Hadoop: The definitive guide[M]2nd Edition.Sebastopol California,US: O'Reilly Media,Inc.2011
[7]万川梅,谢正兰.Hadoop应用开发实战详解[M].中国铁道出版社,2013