王崛赣,柳毅
(广东工业大学计算机学院,广州510006)
云存储服务以其存储方便、价格低廉的特点,吸引了大量的用户,而众多云存储用户上传的海量数据中存在许多重复数据。为了节约存储成本、减少网络带宽消耗,云存储服务提供商(CSP)会采用数据去重技术。基本原理非常简单,每当上载文件时,存储服务器都会检查该文件是否是先前存储的内容的副本,如果存在,新副本将定向到相同副本的位置,不存在,则上传内容。而实际中,存在大量的内容相似度高而细节不尽相同的文件,所以文件级重复数据删除方案往往效率不高。实际中常应用数据块级去重,每个文件切分为若干数据块,将冗余的数据块从系统中删除。
在数据上传过程中,重复数据删除技术的应用还存在减少网络带宽消耗的可能。客户端去重方案中,用户只需要上传数据的哈希值,云服务器对数据的哈希值进行查验,如果存在重复性,则无需上传数据,减少了数据上传的网络带宽消耗。
尽管在客户端实现跨用户去重的方案有诸多优点,但是也存在着不足。在去重过程中,它为侧通道攻击的出现提供了可能性,攻击者通过数据的去重是否发生就可以推断出数据存在与否,进而侵犯他人数据隐私。这存在一个去重悖论:一方面,必须暴露数据部分信息,用于做去重的依据;另一方面,用户不希望存储在云中的数据信息暴露,被攻击者获取隐私信息。
本文提出了一种隐私保护的客户端去重方案,在不借助可信第三方服务器、存储网关等网络设备的前提下,通过略微增加通信开销,实现了更强的数据隐私保护。本文方案贡献总结如下:
(1)重复性查询时,同时对两个数据块的重复度进行查验,设计独特的反馈信号。使攻击者无法判断数据块的存在性。
(2)不需要额外的第三方网络设备,降低了系统成本,也降低了第三方设备被攻击者劫持造成数据泄露的风险。
(3)对验证为可能是重复数据的数据块进行所有权证明验证,有效防止攻击者仅凭借数据标签就可以取得用户数据的情况发生。
(4)对数据进行流行度划分,流行度高的数据含有的隐私信息较少,可以直接向客户端反馈这些数据的存储状况,无需上传流行数据达到减少网络带宽消耗的目的。
关于云存储去重已经进行了大量的研究。早期因为数据加密方式的不同,导致数据去重和语义安全的加密不兼容,加密方式及密钥等差异,即使同样的明文数据得到不同的密文,不可能识别出数据是否重复。对此,文献[1]提出收敛加密(Convergent Encryp⁃tion,CE)算法,CE为基于内容的加密算法,由数据内容计算得到加密密钥,并用此密钥加密原始数据得到密文。确保了相同的数据加密之后得到相同的密文,为云存储去重提供了技术支持。出于降低存储成本、网络带宽消耗的目的,云存储服务供应商往往会采用跨用户客户端重复数据删除[2]。但是这种去重方案过程中可能会发生侧信道攻击造成用户数据隐私泄露。
为了抵抗侧信道攻击,Harnik等人[3]提出了减轻恶意用户利用侧信道的方法,他们对每一个上传文件设置一个随机阈值tF。只有当文件上传次数超过阈值,才会启用客户端去重。因为阈值随机,所以当服务器要求上传文件时,攻击者无法判断该数据是否原来就存在;但是当服务器发出不需要上传文件信号时,攻击者可以得出上传文件一定存在的结论。Lee等人[4]对Harnik的方案进行了改进,引入一个随机数r(r∈{0,1,2}),文件去重阈值定义为tF-r,增加了文件去重的随机性,降低了数据隐私泄露的可能性,提高了安全性。Wang等人[5]提出了用博弈论对去重中遇到的安全问题进行建模,通过实验仿真证明该方案能够有效地抵御侧信道攻击。Armknecht等人[6]对去重策略和其优劣势进行建模分析,证明去重过程中必须权衡效率和安全。
以上方案归根到底都属于设置文件去重随机阈值,所以都存在浪费网络带宽的缺点。抵御侧信道攻击的另一种手段是使用额外的网络设备来混淆上传网络流量。例如Heen等人[7]提出一种基于网关的去重模型,由网关对上传数据进行混淆操作,使得攻击者无法依据数据包的上传情况得出有效的信息。Shin等人[8]在Heen的基础上引入差分隐私机制,通过上传虚拟数据混淆上传数据,减少了数据信息泄露的风险。
上述存储网络方案往往造价高昂,不适合大规模部署。Yu等人[9]提出ZEUS方案,要求每次上传两个数据块,设计特定的删除响应表、数据对的异或值上传等手段,使得攻击者无法确认数据块的存在性,但是造成了一定的网络带宽消耗。Pooranian等人[10]在此基础上结合随机化方法提出RARE方案,提高了安全性,但造成了更多的网络带宽消耗。
基于上述方案存在的问题,本文对ZEUS方案进行改进,进一步提高安全性能、降低网络带宽消耗。
重复数据删除技术在云存储中应用广泛,理想状况下,云存储服务器接收到相同的文件,就可以创建对原文件副本的引用链接,而无需上传冗余数据。而根据重复数据删除执行的位置可分为客户端去重和服务器去重,客户端去重中需要用户和服务器进行信息交互,来判断是否需要执行去重。如图1所示。
图1 客户端去重响应模型
由用户在客户端发出数据删除请求(dc请求),dc请求包含需要上传数据F的哈希值,用来检测数据是否重复;服务器接收到请求后进行检测并将结果反馈给客户端,确认是否需要上传数据。
去重方案中存在以下几种侧信道攻击的可能:
(1)文件确认:攻击者通过执行重复检查来验证某些文件,以重复数据删除是否执行判断文件的存在性;
(2)学习剩余信息:攻击者尽可能生成所有可能的数据进行重复性检查,通过数据删除响应确认数据块的存在,反复调用已确认存在的数据块来学习数据拥有者的敏感信息。
(3)相关块攻击:攻击者根据特定文件拆分后数据块之间的依赖性,给予某个文件的一定比例数据块就可以确认文件的存在性。
侧信道攻击主要利用去重方案中对重复数据删除执行的反馈信号确认,数据块的存在性,进行流量混淆,隐藏数据块的存在性是抵御上述侧信道攻击的有力手段。
所有权证明(Proof of Ownership,PoW)[11]能够有效提高客户端的去重的数据安全性能。云去重通过上传数据的哈希值来检测数据的存在与否,而攻击者可能拥有某些数据的哈希值而并未拥有真实数据,这可能出现严重的数据安全问题。Halevi提出的PoW方法[11],要求客户端和服务器根据上传数据的内容建立默克尔哈希树(Merkle Hash Tree,MHT),并以挑战问答的形式由服务器发起验证挑战。具体方式为:服务器根据已经存在的数据D,计算其短消息值φ(D),同时客户端计算φ'并运行算法。当φ'=φ(D)时,则证明用户确实拥有该数据。
数据内容鲜为人知,数据的流行度[12]定义为非流行数据,存在隐私信息的可能性高;数据被大量用户拥有,这种数据定义为流行数据,隐私信息存在的可能性低。不同的数据类型对隐私保护的需求是不一样,可以根据数据流行度的高低对数据进行不同程度的保护。数据流行度高即含隐私信息少,流行度低则意味着数据隐私信息多需要更高强度的保护。数据隐私度的划分依据为该数据上传用户数量,将数据的合法上传者数量设定为数据流行度的衡量依据,设立一个数据流行度阈值(合法上传者数量),当某个数据块合法上传的用户数超过阈值,数据类型标识转变为流行数据。
本方案模型由云服务提供商(CSP)和用户(User)两个实体组成。方案是基于数据块级去重的,当用户上传文件时,先由客户端将文件进行分割,数据块大小固定,且需要保证文件分割后得到的数据块数目为偶数,当文件自然分割后不满足大小固定或数据为偶数时,客户端需要选择随机数进行填充。去重交互过程中,每次同时上传两个数据块的哈希值,向服务器发起删除问询(dc请求),服务器接收到dc请求处理后向客户端发出删除响应(dc响应),并据此决定是否上传数据。单轮dc响应及处理概述如图2所示。
图2 系统响应模型
(1)客户端将文件分割为若干数据块,保证每个数据块大小一致,保证最后分割出的数据块数为偶数。
(2)上传一对数据块的哈希值进行重复度查询,如果数据块存在,则发起PoW验证,验证通过则更改数据块的流行度计数值。
(3)服务器根据上传两个数据块存储状态,参照设定的dc响应表(表1)向客户端做出dc响应。
(4)客户端根据dc响应,确认数据块是否需要上传至服务器。
为了隐藏数据块的存储状态,文献[9]提出了同时上传两个数据块,设计特定的dc响应的方案。本文在其基础上进行效率改进,设计出新的dc响应规则,如表1所示。
表1 dc响应表
根据响应设计存在三种处理方式:
(1)当两个数据块(记作c1、c2)都不存在云服务器中时,服务器将发送dc响应值2给客户端,此时客户端需要将c1和c2上传服务器,服务器根据上传的c1、c2计算数据标签(h(c1)、h(c2))确保数据真实标签与重复性检查时的标签一致,标签相同服务器存储这两个数据块,用户对数据签名;两次数据标签不同,终断本次文件上传。
(2)当c1和c2中有且仅有一个数据块存储时,服务器将发送dc响应值1给客户端,此时客户端需要将c1和c2的异或值上传服务器,服务器通过计算数据块的异或值推断出另一个数据块。例如,服务器中c1存在,服务器通过计算(c1⊕c2)⊕c1就可以得到c2。对新数据块进行标签验证(同A中所述),验证通过服务器存储该数据块,并要求用户给该数据块签名。验证不通过,中断本次文件上传。
(3)当c1和c2都已存在时,需要查验两个数据块的流行度,处理分两种情况:①如果两个数据块都属于流行数据,服务器将发送dc响应值0给客户端,告诉客户端无需上传数据;②存在非流行数据块时,服务器将发送dc响应值1给客户端,再要求用户对非流行数据块进行签名。
在上述dc响应过程中,是依据数据标签(数据的哈希值)来判断数据块是否存在存储系统中的,攻击者可能拥有某些数据块的哈希值而并未拥有该数据,这里如果依旧简单的执行去重操作,这会导致拥有该数据用户隐私泄露。所以当凭借数据标签得出数据块存在时,服务器需要发起PoW验证挑战,客户端响应PoW挑战,通过验证证明用户真实拥有该数据;验证失败则中断本次文件上传操作。
不同的数据类型对隐私保护的要求是不一样的,如:收藏的电影视频文件含有个人隐私的可能性低,基本上不会暴露用户的隐私信息;而个人薪资单、病例表等文件往往含有的大量的用户隐私,需要更严苛的隐私保护。为了减少去重复数据删除过程中的网络消耗,本文依照数据流行度的划分对数据进行差异性处理。在存储系统中设置了一个流行度阈值t(非流行数据用户上限数),系统维护一个文件列表(表2),数据标签用来做初步的数据存在性检查,密文数据用来发起PoW验证挑战,当PoW验证通过则要求数据上传用户给数据签名,当给数据签名的用户数超过流行度阈值t时,流行度状态转为1,标识着该数据为流行数据,其含有用户隐私的可能性低。
表2 文件列表
本方案的伪代码描述如下,当用户需要将文件f上传到云存储系统中时。文件首先被分割(第一行代码)。由于方案设定为一对数据块同时上传,所以需要保证文件被分割为偶数个数据块(第6-9行)。一个文件被分割为n个数据块,所以一次文件上传需要执行n/2轮数据问询(第10行)。当服务器接到重复查询信号
算法客户端去重
输入:上传文件f,数据块大小ф
01.user partitionsfinto chunkc1,c2…cn//分割文件
02.user setsn=sizeo(ff)/ф
03.if size o(fcn)≠ф
04.dummy bytes are padded tocn//补齐数据块
05.end if;
06.ifnis odd//数据块数量为奇数
07.padded random chunkcn+1//填充一个数据块
08.sets n=n+1//n+1保证数据块数量为偶数
09.end if;
10.for i∈{1,3…n-1}
11.performs duplicate check on
12.ifci=0 andci+1=0//两数据块存储状况为零
13.uploadsciandci+1//上传数据
14.else ifci=1 andci+1=1//数据块都存在
15.if POW test pass//数据所有权验证
16.ifci=1 andci+1is popularity data//两个数据块均为流行数据
17.replies dc response 0//发送dc响应0,告诉客户端无需上传数据
18.else
19.ci.sign(U),ci+1.sign(U)//数据拥有者对非流行数据
签名
20.replies dc response 1//发送dc响应1,要求上传数据
21.end if;
22.else
23.exit;//所有权验证不通过中断去重
24.else//仅有一个数据块存储在云中
25.replies dc response 1//发送dc响应1,要求上传数据
26.ifci⊕(ci⊕ci+1)//确认存在的数据块
27.storageci//存储数据块
28.ci+1sign(U) //数据拥有者签名
29.else
30.storageci+1//存储数据块
31.ci.sign(U)//数据拥有者签名
32.end if;
33.end if;
客户端重复数据删除方案是基于服务器和客户端进行信息交互,通过信息反馈来确认数据是否需要上传的。攻击者根据此原理发动侧信道攻击,获取用户数据隐私。为了隐藏数据块的存在性,本文通过改进ZUES方案设计了一个新的dc响应表(表1)。响应状态为0、1、2这3种,当dc响应为2时,c1、c2两个数据块均不存在于存储系统中,攻击者无法获取用户的隐私;当dc响应为0时,意味着c1、c2两个数据块均存在于存储系统中,且c1、c2都为流行度高的数据块,其含有隐私数据的可能性低,攻击者通过流行数据获取数据拥有用户的隐私可能性低;当dc响应为1时,意味着c1、c2至少有一个数据块存在,此时服务器可以根据数据块c1、c2的数据标签确认数据块的存在性,但是服务器并未将这些信息反馈给客户端,所以攻击者是无法判断具体的数据块的存在性;综上dc响应的设计能够隐藏数据的存在性,保护数据隐私不被泄露。
在本方案中,当系统确认某个数据块在云存储系统中存在时,会先进行PoW验证确保数据上传者真实拥有该数据,防止攻击者仅凭借数据标签就可以获取到原数据的链接,进而侵犯数据真实拥有者的隐私。重复上传数据会要求上传者对数据进行数字签名,能够防止恶意用户重复上传某些数据导致数据流行度遭受恶意修改,更好保护用户数据的隐私不被泄露。
在云存储系统去重方案中,会有一种恶意用户上传与文件标签不一致的密文数据,造成数据被污染。例如,恶意用户是文件F1的上传者,F1对应的数据标签为T1,在服务器要求上传F1的密文C1时,恶意用户上传的是F2的密文C2。当后续上传者需要下载此文件时,下载解密之后得到的文件便不是F1而是恶意用户上传到的F2,造成数据污染。
在本文方案中,会要求在初传者上传数据时将数据标签与服务器根据真实上传数据计算的数据标签作对比,如果对比通过则存储数据;不通过就认定本次上传为恶意上传终止文件上传。这样可以有效避免数据被污染,保障用户上传数据的完整性。
本文方案在文献[9]提出的ZEUS方案上做出改进,以牺牲网络带宽的方式提高数据隐私保护,所以以通信开销来评估方案性能。与文献[9]的ZEUS和文献[10]的RARE方案作对比。假定任意数据块存储在服务器的概率为p,数据块大小为ф。
上传两个数据块的通信开销计算为:
文献[9]中ZEUS方案在上传数据时,除原始数据块之外还需要上传数据对的异或值c1⊕c2(大小为ф),通信开销计算为:
同样的,文献[10]的RARE方案通信开销计算为:
在本文方案中,当上传的两个数据块均不在服务器中时通信开销应为公式(1)所示;当服务器中存在数据块时,客户端需要上传c1、c2的异或值c1⊕c2,此时本文方案的通信消耗应为公式(2)所示;本文方案中设计了数据流行度的查验,当数据流行度高时,直接告知客户端无需上传数据,此时通信开销为零。
综上分析,很容易得出3个方案的通信开销结果,对比如下:
本方案是在AMD锐龙5的CPU、主频2.1 GHz、内存16 GB、系统为Windows 10的PC上实现的。使用编程语言为C++,借助OpenSSL库实现哈希函数SHA-256,实验过程中忽略数据标签(数据哈希值)上传造成的通信开销。在实验中以上传同一个文件的用户数作为上传数据的流行度衡量,实验中选择一个大小为1 MB文件进行上传,切分数据大小设定为64 KB,将数据流行度阈值设置为{20,30},通过创建不同用户账号进行数据上传,统计多次上传的通信开销。将本文方案与Original方案以及文献[9]中的ZEUS方案的实验结果作对比,结果如图3所示。
图3 各方案在不同流行度下的通信开销
由实验结果可以看出:Original方案只有在第一次上传数据才有通信开销,因为在实验中我们是通过许多不同的用户账户对同一份文件进行上传以达到改变数据流行的目的,所以除第一次之外,其余上传时Original方案认定上传数据为重复数据就不再将数据进行上传,所以在不考虑数据隐私的前提下Original的通信开销是最低的。对比本文方案与ZEUS方案,可以看出当数据类型为非流行数据时,其通信开销和ZEUS方案一致,当数据存在于云存储中但是其为非流行数据可能包含用户的隐私,此时需要上传数据用以混淆数据的存在性,保障用户数据安全;当数据类型转变为流行数据时,本文方案的通信开销不再增加,因为流行数据所以含有用户隐私的可能性低,系统直接执行客户端去重,不再要求上传数据,用以隐藏数据的存在性。实验结果证明本文方案在保障用户数据隐私不泄露的同时降低了通信开销。
针对当前面向数据块级别的客户端重复数据删除方案中存在的缺陷,在ZEUS方案的基础上,改进其dc响应的设计,引入数据流行度的概念,根据流行度对数据进行不同的处理,在保证数据隐私不被泄露的前提下,降低去重过程中网络带宽的消耗;对数据进行所有权证明验证确保数据上传者真实拥有该数据,进一步提高了数据安全性,保障用户隐私。仿真实验证明本文方案是高效可行的,同时必须承认在去重过程中,为了保证数据安全几乎每一轮的重复度查询之后都会执行一次PoW验证,所以整个文件上传过程会造成更多的时间消耗。如何在保障数据安全的前提下减少去重过程中的时间成本,是下一步研究的重点。