云存储系统中数据完整性验证协议文章编号:1001-9081(2012)01-0008-05doi:10.3724/sp.j.1087.2012.00008要:在云存储网络环境中,数据的安全性和完整性是用户最关心的问题之一。综合考虑云存储网络环境中的安全需求,设计了云存储数据完整性验证(csdiv)协议。客户端把数据文件和校验标签上传到云存储服务器后随机抽查,服务器返回验证证据并由客户端判断文件的完整性。协议可以有效地验证云存储数据的完整性,并抵抗恶意服务器欺骗和恶意客户端攻击,从而提高整个云存储系统的可靠性和稳定性。仿真实验数据表明,所提协议以较低的存储、通信及时间开销实现了数据的完整性保护。:云存储;数据完整性;同态标签;安全协议;数据存储安全:tp393.04文献标志码:aabstract:inthecloudstoragenetwork,thesecurityandintegrityofdataarethemajorconcernsofclients.takingfullconsiderationofthesecurityrequirementsforcloudstoragenetwork,anewcloudstoragedataintegrityverification(csdiv)protocolwasproposed.theclientsuploadedfilesandtagstotheserversandthendidrandomcheck;theserversreturnedproofsandtheclientsjudgedtheresult.thisprotocolcouldnotonlyensuretheintegrityofdatainthecloudstorageeffectively,butalsoresistthecheatfromtheuntrustedserversandtheattackfromthemaliciousclients,andthenimprovedthereliabilityandstabilityofthewholecloudstoragesystem.thesimulationexperimentalresultsshowthattheproposedprotocolrealizestheprotectionofdataintegrityatlowcostofstorage,communicationanddelay.keywords:cloudstorage;dataintegrity;homomorphictag;securityprotocol;datastoragesecurity0引言随着计算机网络的不断发展,人们对于数据存储的要求也越来越高,特别是在云计算兴起的背景下,基于海量数据的云存储系统成为关注的热点。很多的网络服务商,包括国外的dropbox以及国内的金山快盘等,都开始提供云存储服务,帮助用户实现任意地点、任意时间、任意数据的访问,不仅给人们带来了方便和效益,同时也节约了社会的资源与能源。但是,因为云存储的安全性、可靠性及服务水平等还存在众多问题亟待解决,所以云存储仍未得到广泛认可与使用。数据存放在云存储中,用户最关心的问题之一是数据的完整性。当存储服务商可以有效地对用户提供数据完整性验证,并不断提高服务水平,云存储将获得广泛的应用。1相关工作传统存储系统的数据完整性检查主要是基于访问的,如在线存储系统[1]、海量存储系统[2]以及数据库存储系统[3]等,这些系统频繁访问服务器上的数据,增加了服务器的负担,严重浪费网络的带宽资源;另一种比较常见的方案是基于挑战和应答的方法,由客户端提出挑战某些数据块,服务器来生成数据完整性的证据,最后由客户端来判断结果,如ateniese等提出了可证明数据持有(provabledatapossession,pdp)模型[4-7],但该模型没有考虑数据在传输过程中的安全性;还有一种思想是惠普公司shah等提出的审计方案[8],该方案将用户的检查任务交给可信第三方来完成,但是这势必会增加原存储服务商的代价而且很可能泄露信息从而带来新的安全隐患;zhu等提出了一种分层混合云模型[9],能有效利用不同云存储服务商提供的云资源来协作存储用户的数据,同时将这个模型划分成3层:解释层、服务层和存储层,在一定程度上增加了系统的可靠性,同时额外增加了一些存储的开销。以上方案的不足,主要在于缺乏对云存储网络环境特性的考虑,没有尽可能地降低服务器的通信开销和存储开销,缺少安全协议保障用户数据的安全性。针对上述不足,本文基于pdp模型,提出一种适用于云存储的数据完整性验证(cloudstoragedataintegrityverification,csdiv)协议。客户端在把数据文件及其校验标签上传到云存储服务器后,通过随机抽查的方式,让服务器生成指定数据块的验证证据并返回,由客户端判断数据文件的完整性。同时,该协议具有适应性:对于较小的文件,可以通过检查所有的数据块来保证结果的有效性;而对于较大的文件,则可以检查部分数据块以一定的概率来保证数据的完整性,从而减少系统资源和网络带宽的消耗。2云存储数据完整性的验证方案2.1方案综述本方案参考google文件系统(googlefilesystem,gfs)[10]的设计,c、主服务器s、接口服务器s0以及存储服务器s1,s2,s3,…。当c想要把一个文件f保存在云存储系统中,可以与s0进行交互,上传或者下载数据文件,这样能最大限度地简化客户端的执行流程。而s则是整个云存储的中心枢纽,它不但负责所有存储资源s1,s2,s3,…的分配和调度,而且在存储目录中保存了用户的存储信息。这样的设计实现了控制流和数据流的分离,s0和s之间只有控制流,没有数据流,从而降低了主服务器的负载[11]。由于文件被分成多个数据块保存在存储服务器上,因此c与s0以及s0与s1,s2,s3,…之间可以并行地传输数据,有效提高系统的吞吐量。c与s0进行相互认证,获取会话密钥;接着c生成用于校验的公私钥对,并为每个待上传的数据块生成相应的标签,利用其同态的特性来唯一地标记对应的数据块;然后c向s0申请访问云存储系统,s0告知主服务器s,s根据系统当前的状况分配存储资源s1,s2,s3,…给c,接着c就上传f给s0,s0根据s的分配将数据块传送到相应的存储服务器。在验证阶段,客户端c发起一个校验的挑战,主服务器s根据存储目录中用户的存储信息,通知相应的存储服务器,把校验标签发送给接口服务器s0,并由s0将标签和验证信息返回给c,c根据保存在本地的私钥来验证数据是否完整。至此,整个云存储中数据完整性的验证流程结束。用户在任何时间如果需要再进行数据验证,可以随时执行验证阶段的任务。2.2相关概念2.2.1密码学符号列表本文所使用的基本密码学符号及其含义如表1所示。2.2.2同态标签12],可以将多个从文件块计算的标签合成为单个值,因此可以节省系统传输的带宽。假设给定两个标签ti和tj,它们是由所对应的数据块mi和mj计算得到的定长数据值,可以把标签和数据块看成具有映射关系,通过计算ti+tj的结果,来判断mi+mj的情况,即可以实现利用同态的特性来验证数据的完整性。2.2.3svo逻辑在安全协议分析领域,通常使用形式化分析的方法来判定协议的安全性。其中:ban(burrows,abadi,needham)请补充其中文名称和英文全称。逻辑[13]可以看作是形式化方法的代表作和里程碑,svo(syverson,vanorschot)逻辑[14]则是ban逻辑的一个改进版本。本文所需使用的基本svo逻辑术语及其含义如表2所示。2.3云存储数据完整性的验证协议2.3.1协议设计云存储数据完整性验证方案分为准备阶段和验证阶段,因此对应地设计了两个协议,协议中的实体与图1中的一致。假设服务器之间相互信任,同时为了实现用户的认证,防止恶意用户的攻击,csdiv协议基于x.509公钥认证框架[15],向认证协议[16],c和s0都拥有自己的公私钥对,且事先已经获得对方的公钥。这里c的认证公私钥对是(pkc,skc),s0的认证公私钥对是(pks0sks0协议1准备阶段协议。1)c→s0:epks0(rc,s0,k1),sigskc(h(rc,s0,k1));2)s0→c:epkc(rs0,c,rc,k2),sigsks0(h(rs0,c,rc,k2));3)c→s0:epks0(rs0,s0),sigskc(h(rs0,s0));4)c→s0:ek(f,size,n),sigskc(h(f,size,n));5)s0→s:c,f,size,n;6)s→s0:n,s(i)~blocknumber;7)s0→c:ek(n),sigsks0(h(n));8)c→s0:ek(block(i)),sigskc(h(block(i)));9)s0→s1,s2,s3,…:c,f,block(i);10)s1,s2,s3,…→s:c,f,blocknumber,indexnumber;11)s→s0→c:{“success”,”failure”}。准备阶段的协议1说明如下。1)c选取随机数rc和临时会话密钥k1,对rc、s0的标识符和k1加密,并对它们的哈希值做签名。2)s0验证签名和哈希值,如果通过则s0选取随机数rs0和临时会话密钥k2,对rs0c的标识符、rc和k2加密,并对它们的哈希值做签名。3)c验证签名和哈希值,检查rc是否是自己发送的随机数,如果通过则c对rs0s0的标识符加密并对它们的哈希值做签名;s0验证签名和哈希值,检查rs0随机数;如果双方都通过认证,就可以根据已获取的k1和k2,通过单向哈希函数计算得到最终的会话密钥k←hk1(k2)。4)c运行keyn,sk),并对文件名f,文件大小size和模数n的哈希值做签名。5)s0验证签名和哈希值,把客户端标识符c、f、size以及n发送给s。6)s根据云存储系统当前的状况,计划将文件f分成n块上传到s1,s2,s3,…这几个存储服务器,并把存储服务器s(i)需要存储的块号信息发送给s0。7)s0发送n给c告知其要分成几个数据块上传,并对n的哈希值做签名。8)c验证签名和哈希值,把f分成n块m1,m2,…,mn,运行tagmi计算对应的标签ti,每个数据块由块号、文件块和标签块组成,即block(i)=i‖mi‖ti,并对数据块的哈希值做签名。9)s0验证签名和哈希值,将block(i)、标识符c和文件名f发送给相应的存储服务器s1,s2,s3,…。10)s1,s2,s3,…收到数据块后,为其生成一个索引号indexnumber便于以后查找并告知s。11)s在存储目录中更新c有关f的所有信息后,返回协议的运行结果。协议2验证阶段协议。1)c→s0:ek(f,u,k3,k4),sigskc(h(f,u,k3,k4));2)s0→s:c,f,ij,aj;3)s→s0:c,f,n;4)s→s1,s2,s3,…:indexnumber,ij,aj,n;5)s1,s2,s3,…→s0:tij,mijajmodn;6)s0→c:ek(v),sigsks0(h(v))。验证阶段的协议2说明如下:1)c生成抽查数u(1≤u≤n)以及挑战密钥k3和k4,对f,u,k3,k4的哈希值做签名;2)s0验证签名和哈希值,然后用伪随机置换函数得到随机抽查的块号ij=pk3(j),用伪随机函数生成混淆系数aj=fk4(j),将c,f,ij,aj发送给s;3)s找到保存在存储目录中客户端c的文件f对应的模数n发送给s0;4)s根据c,f,ij找到被挑战块对应的服务器号s(i)和索引号indexnumber并告知s1,s2,s3,…;5)s1,s2,s3,…根据索引号找到相应的数据块,计算数据块当前信息mijajmodn,连同标签块tijs0;6)s0运行proof息v,c运行verify2.3.2算法设计本节重