一种面向HDFS访问模式的保护方法和系统与流程

文档序号:18705254发布日期:2019-09-17 23:35阅读:193来源:国知局
一种面向HDFS访问模式的保护方法和系统与流程

本发明涉及hadoop分布式文件系统(hdfs)的数据保护,尤其涉及一种面向hdfs访问模式的保护方法和系统。



背景技术:

hdfs(hadoopdistributedfilesystem)是hadoop核心的分布式文件系统。hdfs常用于存储大型文件,类似于传统的分布式系统,当数据集的大小超过一台计算机的存储上限时,将这个数据集进行分割之后分别存储在大量廉价的服务器上。hdfs目前被广泛的应用于工业界和学术界中。近几年来人们对于数据隐私保护的要求越来越高,无疑给hdfs的数据隐私保护能力带来了更大的挑战。对于目前版本的hdfs系统来讲,系统设计在数据安全方面重点考虑了数据的可用性和数据的完整性,保护数据机密性的策略比较少。比如可以配置基于kerberos和acl的访问控制策略以及透明加密技术。因此国内外对hdfs上数据机密性保护的研究很多,主要是在hdfs上设计和实现加密算法,主要思想是保证用户在读写操作的时候,使用的是密文数据,只有用户保存着自己的私钥,数据只能在客户端加密和解密,其他人不能获得私钥和明文,这样以来就保护了用户的隐私信息。

但是大量研究发现,仅仅对数据进行加密并不能完全保护用户的隐私数据,攻击者即使无法解密用户存储的敏感数据,仍然可以通过统计分析用户的访问频率和访问顺序等访问模式,推断出用户的隐私信息。oram(不经意随机访问机)是目前保护访问模式的一种重要手段,最早由goldreich和ostrovsky提出,此技术诞生时的研究背景是软件保护,即为了隐藏程序的存储器访问模式,用来防止软件被反编译等手段进行反向工程。oram可以隐藏数据的访问模式,将每次的访问进行混淆,让攻击者不能区分访问是真实的还是伪造的,因此攻击者将不能获得用户数据的存储位置、访问频率和访问顺序等隐私信息,也就无法进一步推断出用户数据的内容和重要程度等信息。

现有方法的缺点和局限性在于:hdfs作为一种被工业界和学术界广泛使用分布式存储系统,仅仅依靠数据加密无法抵抗所有类型的攻击,攻击者仍然可以通过用户的访问模式推断出隐私信息,目前还没有相关研究实现对hdfs用户访问模式的保护方案,这对于众多使用hdfs进行分布式存储的公司和个人用户来讲,无疑产生了巨大的安全隐患。比如攻击者可以通过收集用户对不同数据节点的访问次数,再根据这些访问次数绘制一张数据节点重要程度排名表,用户访问次数最多的节点就是用户某段时间来讲最为重要的文件的存储位置,攻击者接下来就可以集中资源攻击最重要的数据节点。集群中的节点数量可能量级很大,如果攻击者不能掌握用户的访问频率,就需要攻击成千上万的节点,这显然是不现实的,因此访问频率的泄露极大降低了攻击成本。攻击者还可以通过用户对数据节点的访问顺序,推断出访问顺序和特定操作之间的关联关系,当用户再次出现此访问顺序时就可以推断出用户会接着进行这项操作,这就泄露了用户的隐私信息,攻击者甚至可以接着设计针对这项操作的攻击方案。



技术实现要素:

大量研究证明仅仅对数据进行加密不能抵抗所有类型的攻击,攻击者仍然可以通过观察用户的访问频率推测出隐私信息,目前还没有有效的手段保护hdfs中用户的访问模式,攻击者就可以通过观察hdfs中用户对数据的访问频率、访问顺序和文件分块数等访问模式,推测出用户数据的重要程度、关联关系以及目标文件的存储位置等隐私信息,并且可以利用这些信息进行下一步攻击。

因此本发明首次给出了hdfs访问模式保护方案的设计与实现,本发明基于hadoop2.8.4版本,将oram模型思想与hdfs系统相结合,根据hdfs系统的具体使用场景,添加文件缓冲区、数据块位置映射表(positionmap)等功能模块,设计新的hdfs文件读写算法,将数据节点(datanode)采用treeoarm结构来优化系统性能。保护的访问模式类型包括:1)具体的读写操作,2)文件的分块数量,3)文件存储的数据节点位置,4)文件的访问频率,5)文件的访问顺序。并且将保护访问模式方案作为一个可选功能提供给用户,用户可以根据对数据机密性的要求高低灵活选择开启或者关闭此功能。

本发明解决技术问题所采用的技术方案为:

一种面向hdfs访问模式的保护方法,包括以下步骤:

1)混淆文件的操作类型:读或写操作。将读写操作分解为先读后写的两次原子操作,如果是读文件操作,则从数据节点读取数据块到客户端后数据节点删除此数据块,随后放入客户端的文件缓冲区中,混洗(eviction)操作时从客户端的文件缓冲区中随机选择一个文件写回到数据节点;如果是写操作,则从数据节点假读一个无效文件(dummyfile)到客户端,之后将需要写入的真实文件从客户端上传到数据节点中,所以攻击者观察数据传输路线时无法区分操作类型;

2)隐藏文件的分块数量:提出了混淆数据块的概念,即在写文件之前,为文件增加混淆数据块以改变文件的分块数,文件读取回客户端时,需要先识别文件中的混淆数据块并将其删除以保证数据的正确性;

3)隐藏文件存储的数据节点位置:主要利用混洗操作实现,每次读取文件之后,会从数据节点中删除此文件,之后会随机选择客户端的文件缓冲区的一个文件写回,这样就保证了文件不会长时间存储在同一个数据节点上,而且读回客户端的文件也不会立即写回到数据节点上,可能在之后的某次混洗时写回。因此攻击者将无法判断正在进行操作的文件是真实文件还是无效文件,也无法得知文件存储的数据节点位置;

4)隐藏文件的访问频率,文件的存储位置不断变化,用户对重要文件的访问次数虽然很多,但是访问哪个数据节点是随机的,攻击者统计到的访问频率与用户数据的重要程度没有任何关系;

5)隐藏文件的访问顺序,就算在某个重要操作之前,用户存在一个固定的对文件访问顺序,但是在本文的方案设计中,文件存储的位置是不断变化的,因此用户对数据节点的访问顺序在观察上是随机的,攻击者也就无法通过监控客户端和服务器之间的数据传输通路来掌握到访问顺序。

进一步地,所述数据节点采用treeoarm结构,并在管理节点中设置数据块位置映射表,用于存储数据块在数据节点的treeoarm结构中的叶节点位置;所述客户端向所述管理节点发送写数据块请求时,所述管理节点为数据块分配存储位置,即存储该数据块的数据节点以及数据节点中的叶节点位置,并在所述数据块位置映射表中记录数据块的叶节点位置;读取数据块时,所述管理节点将数据块的存储位置返回给所述客户端,所述客户端根据位置信息到相应的数据节点中查找数据块。

进一步地,在hdfs集群启动之后进行初始化操作:存储若干无效文件到数据节点中,以便通过读取无效文件来进行混淆,并将无效文件写入到客户端的文件缓冲区。

与上面方法对应地,本发明还提供一种面向hdfs访问模式的保护系统,包括客户端、管理节点和数据节点;所述客户端对所述数据节点的读操作和写操作分别分解为先读后写的两次原子操作,以隐藏文件的操作类型;所述客户端在向数据节点写文件之前,为文件增加混淆数据块以隐藏文件的分块数量,文件读取回所述客户端时,所述客户端先识别文件中的混淆数据块并将其删除以保证数据的正确性;在每次从所述数据节点读取文件之后,从所述数据节点中删除此文件,并随机选择所述客户端的文件缓冲区的一个文件写回到所述数据节点,以隐藏文件存储的数据节点位置。

进一步地,上述系统通过文件的存储位置的不断变化,隐藏文件的访问频率和访问顺序。

进一步地,上述系统将保护访问模式作为一个可选功能提供给用户,使用户能够根据对数据机密性的要求高低而灵活选择开启或者关闭此功能。

本发明的有益效果是:

大量研究发现,仅仅对数据进行加密并不能完全保护用户的隐私数据,攻击者即使无法解密用户存储的敏感数据,仍然可以通过统计分析用户的访问模式从而推断出用户的隐私信息,在hdfs中,攻击者可以通过观察hdfs中用户对数据的访问频率、访问顺序和文件分块数等访问模式,推测出用户数据的重要程度、关联关系以及目标文件的存储位置等隐私信息,并且可以利用这些信息进行下一步攻击。

目前没有方案来保护hdfs中用户的访问模式,因此本发明填补了hdfs访问模式保护的空白,给出了基于oram技术的hdfs访问模式保护方案的设计与实现。本发明增加的代码量仅为原系统代码的0.3%,所以对原始系统几乎没有影响。并且十分灵活的将保护访问模式方案作为一个可选功能提供给用户,用户可以根据对数据机密性的要求高低选择开启或者关闭此功能。通过对系统进行安全性测试,证明了本发明保护了hdfs中用户对数据的访问模式,包括:1)具体的读写操作,2)文件的分块数量,3)文件存储的数据节点位置,4)文件的访问频率,5)文件的访问顺序。在增强hdfs安全性的同时,也通过性能测试证明本发明带来的性能开销处于可以接受的范围。

附图说明

图1为本发明读文件流程图;

图2为本发明写文件流程图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步详细说明。

本发明的代码实现基于hadoop2.8.4源代码,根据功能模块和文件读写流程修改源代码,主要修改的java文件为commandwithdestination.java、ioutils.java和pathdata.java,新增java文件为filebuffer.java、treenode.java和treeoram.java,总代码量为4686行。下面描述具体的操作流程。

一.初始化

hdfs集群启动之后,需要初始化操作,传若干dummyfile到数据节点中,dummyfile是无效的文件,在客户端之外无法辨别和真实文件之间的差别。初始化的作用在于hdfs刚启动时,集群中不存在真实文件,这时候用户发起了文件上传请求,首先要进行文件读取操作,这时候如果没有文件可以读取,那么就说明集群中还没有存储真实文件,也就泄露了访问模式,如果先存储若干dummyfile在数据节点,就可以通过读取dummyfile来进行混淆,随后dummyfile被写入到客户端的文件缓冲区(filebuffer),在混洗时还有可能被写回集群中,因此也可以起到文件混淆的作用。

二.读文件操作流程

读文件操作流程如图1所示,其中包含客户端、数据节点(datanode)和管理节点(namenode)。

数据节点datanode采用treeoarm结构来优化系统性能。treeoarm是一种现有技术,treeoram的存储结构为高度logn,节点数为n的二叉树,而每个节点都是一个桶(bucket),每个bucket可以存储相同且固定个数的块,通过使用这种二叉树的存储结构,treeoram能够简化混洗操作,从而优化了客户端和服务器之间的平均带宽以及最坏情况下带宽。因此本文将datanode改为treeoram结构。

管理节点namenode含有数据块位置映射表,即positionmap,用于存储数据块在具体datanode中的叶节点位置。数据块在datanode上是以二叉树的结构存储的,所以对数据块的搜索依赖于该数据块的叶节点,即从根节点开始向叶节点搜索,在该路径上找到目标数据块。因此需要positionmap来存储每个数据块在相应datanode上的叶节点位置,在客户端向namenode发送写数据块请求时,namenode需要为数据块分配存储位置,除了存储在哪个datanode之外,也要随机分配在datanode中叶节点位置,分配之后namenode需要在positionmap中记录数据块的叶节点位置,读取数据块时,namenode会将数据块在哪个datanode以及数据块的叶节点位置一同返回给客户端,之后客户端根据位置信息去相应的datanode中查找数据块。

图1所示的读文件操作流程具体包括以下步骤:

1.客户端首先查找filebuffer,如果文件在filebuffer中,直接读取文件,如果不在filebuffer中,客户端向namenode发送读文件请求。

2.namenode在元数据中查找文件信息,如果文件不存在,就返回错误信息,如果文件存在,接着在positionmap中查找文件在datanode中的叶节点,namenode把文件数据块存放的datanode以及叶节点信息返回给客户端。

3.客户端与datanode建立信息流来读取第一个数据块,datanode根据客户端发送的叶节点,从根节点开始向叶节点的路径搜索bucket(treeoarm的树的节点称为bucket,即桶,每个桶包含相同且固定个数的块),如果找到了数据块,则记录数据块。为了混淆该数据块的位置,仍需要继续访问叶节点路径,直到整个路径都被访问完毕,在datanode将数据块传输给客户端后,删除该datanode上的目标数据块,接着读取其他的数据块。文件的所有数据块(其中包含混淆数据块)都被传输到客户端之后,客户端对数据块进行扫描,识别并删除掉混淆数据块。

4.通过混洗进行写文件操作:随机选择客户端的filebuffer中的一个dummyfile文件或者真实文件写回,客户端向namenode发送写文件请求,namenode对文件是否存在以及是否有相应权限等进行检查,检查无误之后在hdfs目录中创建此文件名,等待上传数据块。

5.客户端对文件进行分块,客户端给文件添加混淆数据块。添加混淆数据块的方式可以是:在文件后面随机增加0-3个混淆数据块,每个混淆数据块开头和结尾均为大素数“122420729”,在文件写回客户端时便于客户端进行识别。客户端向namenode询问第一个数据块的存储位置,namenode为数据块分配所要存储的datanode以及随机分配此datanode上的叶节点位置,更新positionmap,之后将这些位置信息返回给客户端。

6.客户端与namenode分配的datanode中距离最近的datanode建立联系,datanode接收数据块和叶节点信息,将数据块插入根节点,从当前datanode传输数据块到其他备份存储的datanode。

7.这些datanode进行eviction操作:datanode二叉树结构中的每层随机选择v个bucket,每个bucket中选择一个真实或者dummy数据块进行向下一层的混洗,将数据块根据其叶节点位置,向左孩子或者右孩子逐层移动数据块。

8.客户端继续传输文件其他数据块,所有数据块都传输完毕后,客户端关闭数据传输流,将上传完毕的文件从filebuffer中删除,并将读取的文件写入filebuffer。

三.写文件操作流程

写文件操作流程如图2所示,包括以下步骤:

1.客户端首先向namenode发送请求,namenode查找要写入的文件是否存在以及权限等,确认无误后创建新文件。

2.客户端从文件系统中随机选择一个dummyfile,向namenode发送文件读请求,namenode将dummyfile每个分块对应的datanode以及在datanode上的叶节点位置返回给客户端。

3.客户端与存储dummyfile的第一个数据块的datanode的建立数据传输通路,datanode根据客户端发送的叶节点,从根节点开始向叶节点的路径搜索bucket,如果找到了数据块,则记录数据块,为了混淆数据块位置,需要接着访问叶节点路径,直到叶节点被访问。datanode将数据块传输给客户端,接着读取其他的数据块。dummyfile的所有数据块都被传输到客户端之后,对数据块进行扫描,识别并删除掉混淆数据块。

4.eviction进行写文件操作,将要写的文件写到datanode中:客户端对文件进行分块,给文件添加混淆数据块,客户端向namenode询问第一个数据块的存储位置,namenode为数据块分配所要存储的datanode以及随机分配此datanode上的叶节点位置,更新positionmap,之后将这些位置信息返回给客户端。

5.客户端与距离最近的datanode建立联系,datanode接收数据块和叶节点信息,将数据块插入根节点,从当前datanode传输数据块到其他备份存储的datanode。

6.这些datanode进行eviction操作:每层随机选择v个bucket,每个bucket中选择一个真实或者dummy数据块进行向下一层的混洗,将数据块根据其叶节点位置,向左孩子或者右孩子逐层移动数据块。

7.客户端继续传输文件其他数据块,所有数据块都传输完毕后,客户端关闭数据传输流,接着判断filebuffer是否已经达到存储上限,如果没有,将读取回客户端的dummyfile写入filebuffer,否则将dummyfile删除。

四.实施例

本实施例使用hadoop2.8.4版本,分别测试原始系统和本发明系统的安全性,集群使用1个master节点和5个slave节点,master节点也作为客户端提交文件上传和下载命令。在两个系统上分别进行下面三个实验:

(1)操作类型隐藏效果测试

实验方法:在原hdfs系统和本发明的oram-hdfs方案中,都进行一样的四步操作:①写入文件file1,②读取文件file1,③写入文件file2,④读取文件file2,在操作过程中通过wireshark工具对客户端和服务器之间的数据传输流进行抓包,然后分析报文辨别读写操作类型,对比分析结果。

实验结果:通过报文中的信息,即tcp协议三次握手建立连接以及fin报文关闭连接,可以判断出用户的操作类型是读还是写,原始版本的hdfs能够通过这种分析方法判断出用户的操作类型,准确率达100%,但是对于本发明实现的hdfs系统来讲,无法分析出用户的操作类型,因为修改后的方案将读写操作都变为先读后写,即在报文中既存在读操作特征又存在写操作特征,因此无法通过报文分析出用户具体的操作类型,即本发明方案可以隐藏用户的访问模式类型。

(2)文件分块数隐藏效果测试

实验方法:在原hdfs系统和本发明的oram-hdfs方案中分别上传5个分块数分别为1-5的文件,通过wireshark工具对客户端和服务器之间的数据传输进行抓包,然后分析报文来获得文件的分块数,对比分析结果。

实验结果:通过报文中关闭连接信息出现的次数可以判断出文件分块数大小,根据这种分析方法,可以准确判断出在原始hdfs系统上写入的5个文件的分块个数,而对于本发明的方案,在写原子操作中分析得到的文件分块数是错误的,因为本研究方案为了隐藏文件的分块个数,在每次上传文件时都会随机增加一定数量的混淆数据块,在本实验中,随机增加0-3个混淆数据块。

(3)文件访问频率,访问顺序以及存储位置隐藏效果测试

实验方法:在原hdfs系统和本发明的oram-hdfs方案中各上传5个文件,分块数都为1,假设file1文件是用户频繁进行读写操作的重要文件,对这5个文件的读取序列为file1-file2-file1-file3-file1-file4-file1-file5,按照此访问序列重复读取4次,即5个文件的访问次数分别为16,4,4,4,4,统计两个系统中每个datanode的访问频率和访问顺序。

实验结果:首先对于文件存储位置,通过对实验过程中file1文件位置的统计,原始hdfs版本file1文件的位置不会发生改变,所以暴露了文件的存储位置;而本发明方案中file1文件位置不断变化,因此隐藏了文件的存储位置。对于文件访问频率来讲,原始hdfs系统中对datanode3的访问次数是其他节点的四倍,因为重要文件file1存储在datanode3上,所以暴露了文件的访问频率;而在本发明方案中,每个数据节点的访问次数差距很小,因此隐藏了文件访问频率。对于文件访问顺序来讲,在原始hdfs系统中,对文件的访问顺序相同,对数据节点的访问顺序也相同,所以暴露了文件的访问顺序;而在本发明中,就算对文件的访问顺序相同,在观察上对数据节点的访问顺序是没有规律的,因此隐藏了文件访问顺序。

以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的原理和范围,本发明的保护范围应以权利要求书所述为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1