面向云端的文件多层破碎混淆机制
2019-11-09唐成华李海东周江山强保华
唐成华,李海东,潘 然,周江山,强保华,
1(桂林电子科技大学 广西云计算与大数据协同创新中心,广西 桂林 541004) 2(广西可信软件重点实验室,广西 桂林 541004) 3(广西密码学与信息安全重点实验室,广西 桂林 541004)E-mail:tch@guet.edu.cn
1 引 言
作为一种新兴的计算模式,云计算带来了全新的巨量资源共享虚拟化技术,满足于企业脱离IT基础设施管理和维护,而专注于自身核心业务的发展.云计算成为当前信息领域的工业化革命,伴随着其业务不断普及和信息的爆炸式增长,云计算安全问题已逐渐得到人们的关注,并成为制约云计算发展的重要因素[1].2018年2月,Under Armour遭遇1.5亿账户数据泄漏事件;3月,Facebook发生公司史上最大规模的个人信息泄漏事件,超过5000万用户信息遭到窃取;同年8月,华住旗下多个连锁酒店开房信息数据在暗网出售,泄露数据总数接近 5亿条.这些事件不断警醒着人们,若要大规模应用云计算技术与平台,必须解决云计算安全问题,特别是当前移动终端用户使用先进的Wifi/5G网络和云技术时,面临高级持久威胁(APT)容易遭受被渗透到不同级别的云和移动基础设施中以窃听、窃取和修改数据[2],因此目前云端中的数据隐私安全保护研究极为重要.
针对云端的文件数据安全问题,研究者们提出了一些解决方案,主要有隐式切割和显式加密等方式.对于上传到云端的重要文件,通常是对文件进行加密处理,而当数据块数量增多时,加密的效率变得低下,超过了用户所能容忍的时间,因此,Parakh等[3,4]提出隐式数据安全及其改进方法,不需要使用加密机制,使得非授权用户不能获取文件内容.在此基础上,毛剑等[5]对数据保护提出了二次混淆数据分割方案,在隐式数据分割的基础上,对文件进行二次分割.对文件分块的设置并非易事,并且可能会对性能产生重大影响,较大的块可能包含用户未请求的信息,较小的块则可能需要更多的访问请求,基于此考虑,Chung等[6]结合跟踪技术提出了动态分区算法.史玉良等[7,8]提出隐私约束概念,通过隐私约束数量来调整数据块数量的保护机制.张宏磊等[9]在隐私约束的基础上,提出基于分块混淆的动态数据隐私保护机制,同时提高云计算的安全性和应用的效率.Kauthale[10]和Mohammed[11]分别对差分隐私保护方案进行了改进,提出了两段垂直划分的隐私保护算法,将敏感属性数据和非敏感属性数据分开放置在不同的块中.通常具有多个敏感属性的数据更为常见,Wang等[12]分别采用聚类方法和主成分分析法将敏感属性记录划分成组,基于k-匿名化过程实现隐私封闭化过程,但在原始信息保留上存在一定的弊端.Kapusta 等[13]分析了现有的分布式存储系统,提出了分两组进行碎片分块的机制,一组解决存档数据的需求,一组解决机密数据的存储要求,从而避免了完全加密,提升了数据安全的处理效率.当然,存储在云端的数据必须有完整性验证机制[14].
上述文件数据分块方法,可以在特定存储环境和特定保密环境下实现文件切割.本文借鉴于此,针对云计算环境提出一种文件破碎混淆保护方案,即进行两次文件切割,且只有一次加解密操作.在安全性得到保障的前提下,文件数据处理效率也得到了明显提升.
2 基本概念
定义1.可接纳容忍度ω,是指攻击者在进行文件暴力破解时,个人可承受时间成本的最大值.时间成本具有不同的单位,本文规定时间成本的基准单位是秒(s).在实际破解过程中,攻击者破解目标对象所需要消耗的时间存在一个容忍程度范围.从心理学上来说,为了破解一个文件,攻击者所能容忍的时间远远高于一个正常切割文件所有者所能容忍的时间.
例如,攻击者为了破解一个重要文件,通过暴力破解需要等待的时间是30天,换算为基准单位为:2.59200×106s,那么ω=2.59200×106.如此同时,对于同一份文件,用户所能容忍的时间成本可能是5秒之内.
定义2.文件密级Ψ,按照官方的定义,有狭义和广义两种,其中狭义的密级是指保密行政管理部门对于涉及国家秘密的诉讼和非诉讼案件,应办案机关的要求,就案件中涉嫌涉密事项做出的鉴别和认定;广义的密级是指保密工作部门对某一事项是否属于国家秘密和属于何种密级进行鉴别以及认定[15].
本文Ψ是指文件上传者对该文件自定义的保护等级,规定Ψ的取值范围为1-100,其中1表示最低等级,100表示最高等级.例如:用户上传一份公司的核心收购计划,涉及的范围和金额巨大,此时可以定义文件的等级为90级;若用户只是上传一份临时的个人清单计划,则可以定义文件的等级为5级.
定义3.算力η,是指计算机的运算能力,可表示为计算机运行一个程序或者应用所消耗的时间,也可表示为计算机在一秒钟内能运行程序的次数.
按照最新公布的数据,目前全球最快的超级计算机是美国能源部下属橡树岭国家实验室的“Summit”,其峰值是每秒运行1.87659×1017次.参照超级计算机“顶点”的运行次数,定义最大算力为ηmax,则ηmax=1.87659×1017.
定义4.算力和密级、文件大小的关系,在实际应用中,使用ηmax的概率比较小,更多使用的是与ηmax呈现一定比例的实际算力η.
本文中认为当文件的大小较大时,需要切割块数也较多,从而需要很高的算力去破解文件,当文件较小,切割块数也较少,从而需要的算力较低;同时当文件密级程度很高时,也会需要很高的算力去破解文件,文件密级程度属于中下时,需要的算力趋于一个平稳的值,由此定义实际算力的指数次幂和密级呈现凸函数的关系.通过定义Ψ的值和其对应的η,对这些定义的值进行支持向量机SVM处理,可以得到一个算力和密级、文件大小之间的函数关系,如公式(1)所示.
η=ηmax×100.00179×(Ψ,2-10,4-0.12849×δ)
(1)
定义5.文件破解效率ξ(n,Ψ,δ),是指文件在一个确定的容忍度ω、确定的文件大小的情况下,破解一个密级为Ψ、文件大小为δ,块数为n的文件所需要的ω的个数,即需要达到多少个ω时,文件将会被攻击者破解.
定义6.文件大小δ,是指文件实际需要切割的大小,本文规定文件大小的基准单位是k.
3 文件破碎保护
3.1 文件破碎混淆模型
为了保护云计算用户的文件存储安全,设计了一种文件破碎混淆模型保护方案,如图1所示.该方案包含第一层文件切割、第二层文件切割和文件还原3个部分.其中第一层文件切割主要处理文件的分块和文件的混淆;第二层文件切割处理文件的二次切割和文件的重新组合,形成新的不可识别的文件;文件还原主要是对第二层文件切割和第一层文件切割的操作进行还原,从而获得原文件.
图1 文件破碎混淆模型Fig.1 File fragmentation and obfuscation model
在第一层文件切割中,假定文件被切割成n块,对已切割的n块文件打乱其前后顺序,同时形成打乱顺序私钥文件存储在本地文件库,以供在文件恢复阶段能有效的恢复文件.由于切割后的文件需要存储在云端,而云端的不可控性使得存储在云端的文件安全性得不到保证,目前最常见的处理方式是对文件进行加密操作,若是对存储在云端的每一块文件都进行加密处理,会严重地影响到系统的效率.针对此问题,本方案对打乱顺序私钥文件进行加密处理,从而提升安全性,进而使得整个程序只需进行一次加密处理,以保证合理有效的处理效率.
当文件块的切割数量较小时,通过暴力破解所消耗的时间Tn成本很低,所以为了确保在一定的时间范围内,攻击者不能通过排列组合的方式得到正确的文件块顺序,需要对文件切割数量有一定限制.定义暴力破解次数为g,则g与文件块数量呈一定函数关系,如公式(2)所示.
g=n!
(2)
破解的次数由文件块的数量决定,根据定义3,攻击者要达到对应的破解次数,与攻击者计算机的运行能力η有直接关系.根据定义2,用户上传文件的同时会设定一个Ψ,而对于不同Ψ的文件,要求的文件破碎时间成本不一样,根据定义4,当给出一个确定的Ψ时,η的值也随之确定,可得破解的时间成本为:
(3)
根据定义1,攻击者会存在一个ω,我们以ω为一个基准,根据定义5,ξ(n,Ψ,δ)可以理解为存在有多少个ω基准,由此可以得出,ξ(n,Ψ,δ)为:
(4)
通过公式(2)、公式(3)和公式(4)可以得到:
(5)
根据定义4和定义6,将公式(1)带入公式(5)中可得:
(6)
求解函数ξn,当n满足公式(7)时,可得到一个最合理的切割数量.
(7)
3.2 破碎混淆算法
文件破碎混淆算法包含两层切割过程.其中第一层文件切割包括两个核心步骤:文件分块和文件混淆.首先定义需要切割的文件f,假定文件需要被均匀的切割成n块文件,为了能有效地恢复文件,需要对切割后的每一块文件进行编号存储,则切割后的文件块为f1,f2,…,fn-1,fn.为了文件的安全,需要对每块文件块的编号位置进行随机重排,确保每次上传到云端的文件块顺序是随机乱序的,通过公式(2)和公式(7)可以确定切割数量n.
文件第二层切割也包括两个步骤:文件二次切割和文件重组.通过第一层对文件的切割和混淆,文件被切割为n个长度相等的块f1,f2,f3,…,fn.二次切割时,对其中每一块文件分别均分成m份,将这m份文件块进行编号1,2…,m-1,m,定义为后续编号,总共得到n×m份文件块.将第一层切割的文件块以一维数组的形式表示,第二层切割的文件块以二维数组表示.可得变化过程如公式(8)所示.
(8)
文件重组是对后续编号相同的文件块合并到一起,重组形成一个新的文件块,通过重组,将n×m份文件块合并成m份文件块,重组过程如公式(9)所示.
(9)
为了提高第二层文件破碎的安全性,在每份重组文件块前附加上一个随机字符.在文件块数和打乱顺序都被已知的情况下,攻击者按照获取的情报,仍然不能得到正确的破解文件.将随机字符ln写入重组文件块中可得到最终的重组文件块,如公式(10)所示.
{l1+f1,1,+f2,1+…+fn-1,1+fn,1}、{l2+f1,2,+f2,2+…+fn-1,2+fn,2}、…、{lM+f1,m+f2,m+…+fn-1,m+fn,m}
(10)
算法1.破碎混淆算法
Input:需要加密的文件file,密级值secretLevel,第二层切割的块数secondNum
Output:加密的私钥,经过破碎重组后的文件块数组merge[]
Begin {
1.fileSize=file.length /*文件的大小*/
2.OptimalNumberOfCuts=FindOptimalNumberOfCuts(secretLevel)
/*FindOptimalNumberOfCuts函数表示寻找最佳切块数量,OptimalNumberOfCuts表示取得切块的数量*/
3.fileLength=fileSize / OptimalNumberOfCuts
/*fileLength表示每块文件的大小*/
4.for i=0 to OptimalNumberOfCuts do
5. UpsetArrary=upset(arrary)
/*upset函数的作用是打乱顺序,UpsetArrary表示已经打乱的数组文件,arrary表示未打乱的数组*/
6. fileEncrypt(UpsetArrary) /*对数组UpsetArrary加密*/
7. create(fileName,UpsetArrary)
/*创建文件块,按照UpsetArrary数组的顺序*/
8. while(length 9. write(fileName) /*write给每块文件写入数据*/ 10.end for 11.savePrivateKey(file(PrivateKey),savePath) /*savePrivateKey函数保存私钥文件,file(PrivateKey)函数表示形成私钥文件,savePath表示存储私钥的本地地址*/ 12.ProcessBrokenFileBlock(fileName) /*处理切割打乱后的文件块*/ 13.length=files.length /*经过破碎混淆算法后得到的文件块数*/ 14.for i=0 to length do 15. filesSegmentation[]=secondSegmentation(files,secondNum) /*filesSegmentation表示经过二层切割后的文件块数组,secondSegmentation函数表示对一个文件进行的二层分割*/ 16.allFilesBlock[][]= filesSegmentation /*allFilesBlock存储所有经过两层切割的文件块*/ 17.end for 18.reorganizationFile[]= recorganization(allFilesBlock) /*reorganizationFile存储的是重组后的数据块,recorganization函数表示对数据块进行重组*/ 19.} End 算法1以密级为基础,借鉴二分插入排序思想,根据公式(7),取得文件切块数量;采用一维数组的方式存储打乱的文件块编号,依据编号及切割长度,将文件写入新生成的文件块中,通过RSA非对称加密算法加密数组编号,私钥存储在savePath中,第一层分割操作完成.第二层分割操作采用二维数组存储二层切割文件,通过改变两层循环的下标前后顺序,从而达到对切割文件的重组. 文件经过破碎混淆后,其可用性也随之消失,为了使合法用户能方便迅捷地下载使用文件,需要能及时地对破碎后的文件进行恢复还原.重组后的文件块进行文件上传时,会根据重组文件块的顺序为每一个块生成1个唯一的块标识BLOCK_ID,文件通过云端下载后,会通过BLOCK_ID进行排序,同时实现完整性验证.文件恢复算法流程如下: Step 1.从云端依次下载全部的m个文件块,通过BLOCK_ID标识进行验证,并实现对文件块排序,再依次将每个文件块中的首字母ln去掉; Step 2.对每块文件进行n次切割,获得n×m份文件块;然后将后续编号相同的文件块进行合并,从而得到n个重组的文件块; Step 3.将本地存储的打乱顺序私钥文件进行解密,获得打乱对应的序号; Step 4.通过解密出来的序号对重组后的n个文件块进行顺序还原,将还原后的n个文件块进行合并,最终得到一个完整的文件. 搭建一台服务器作为云端服务器,配置为8核CPU Inter(R)Xeon(R)3.50GHz,8G内存,500G硬盘.系统采用Ubuntu16.04版本,数据库采用5.5.25 MySQL Community Server(GPL),编程语言为java 1.8.0_101. 为了确定密级对算法效率的影响,本文实验先统一文件大小为10M.根据本文算法方案,首先设计出程序.通过对文件进行密级假定,得出1-80grade所对应的时间消耗,为了使数据更具有可靠性和稳定性,采用对同一组密级进行20次重复试验,从而可以得到1600组数据,通过K-means方法对数据进行筛选,消除问题数据,最终得出一个较稳定的1-80grade所对应的时间消耗. 采用与面向隐私保护的数据块调整机制(Method A)[8],隐式数据分割机制(Method B)[5]算法进行对比.通过对Method A中实验还原以及与实验数据的对比,得到Method A隐私约束数量和时间消耗所对应数据;通过对Method B中方法进行试验还原,得到切块数和时间消耗所对应数据. 为了验证本文文件破碎混淆算法的效果,分别对Method A、Method B,以及文件破碎混淆算法,通过在隐私约束数量、密级和切块数三个不同维度进行3组模拟实验. 图2 隐私约束-时间消耗Fig.2 Privacy constraints-time consumption 实验1.以隐私约束数量为维度进行,方法B中隐私约束数量对应的时间消耗采用的是其方法中切块数频率较高的17块所对应的时间消耗;本文方法中隐私约束数量对应的时间消耗采用的是密级使用频次较高的50grade所对应的时间消耗.实验结果如图2所示. 由图2可知,方法A随着隐私约束数量的增多,时间消耗也逐渐增多,在隐私约束数量为13个时,三种方法的时间消耗几乎差不多,当超过13个隐私约束后,方法A的时间消耗明显高于本文方法和方法B.由此可以得出,当隐私约束超过13时,可以考虑使用本文的方法或者方法B. 实验2.以密级为维度进行,方法A中密级对应的时间消耗采用的是其方法中隐私约束使用频率较高的13个所对应的时间消耗;方法B中密级对应的时间消耗采用的是其方法中切块数频率较高的17块所对应的时间消耗.实验结果如图3所示. 图3 密级-时间消耗Fig.3 Secret grade-time consumption 由图3可知,本文方法的时间消耗存在一个先上升后下降的趋势,这是由于程序在刚开始启动时,会对程序每一部分都进行启动,当密级较高时,整个算法消耗的时间会超过刚开始的时间消耗.随着密级的增大,时间消耗也逐渐增多,在密级为35左右时,三种方法的时间消耗几乎一样,当密级超过35时,本文的方法时间消耗明显高于另外两种方法,由此可以得出,当密级小于35时,建议使用本文的文件破碎混淆算法,否则,建议使用另外两种方法. 实验3.以切块数为维度进行,方法A中切块数对应的时间消耗采用的是其方法中隐私约束使用频率较高的13个所对应的时间消耗;本文方法中切块数对应的时间消耗是按照密级和切块数对应的关系,采用密级对应的时间消耗.实验结果如图4所示. 图4 切块数-时间消耗Fig.4 Number of slices-time consumption 由图4可知,随着切块数的增大,时间消耗也逐渐增多,在切块数为20左右时,三种方法的时间消耗几乎一样,当切块数超过20时,方法B和本文方法时间消耗远远高于方法A;当切割数不超过30时,方法B的时间消耗略低于本文方法,原因在于本文方法不仅考虑文件破碎后的效率问题,还要保障文件的安全性,本文方法对切割后的文件块进行了多重操作,另外使用了一次加密,因此它的效率比方法B要略低. 针对云计算平台中文件存储的安全性和效率低的问题,研究文件分块存储情况下的安全性,提出一种文件破碎混淆保护方案,根据文件密级确定文件破解时的算力,以此来确定文件破解时的效率,通过对破解效率的求解确定文件第一层切割的块数,实现文件切割块数的动态变化;为了防止切割的文件块被破解恢复,需要对文件块打乱混淆,加密保存其打乱顺序;依据隐式分割机制,对切割的文件块进行二次切割,为了保障每一个文件块不是完整的数据,采用对文件块进行编号重组.实验过程从三个维度上验证了本文算法的优良性. 未来工作主要将云计算及文件动态传输结合起来,在考虑文件传输的效率以及文件的完整性上,实现文件云端安全.3.3 文件恢复
4 实验分析
4.1 实验环境
4.2 实验数据获取及方法
4.3 文件切割效率对比
5 结 论