CN103268460B - 一种云存储数据完整性验证方法 - Google Patents
一种云存储数据完整性验证方法 Download PDFInfo
- Publication number
- CN103268460B CN103268460B CN201310246856.2A CN201310246856A CN103268460B CN 103268460 B CN103268460 B CN 103268460B CN 201310246856 A CN201310246856 A CN 201310246856A CN 103268460 B CN103268460 B CN 103268460B
- Authority
- CN
- China
- Prior art keywords
- rank
- node
- data
- subscription client
- imt
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种云存储数据完整性验证方法。本方法为:1)客户端生成密钥,并根据该密钥和待存储到服务器的数据M,生成M的标识X和元数据;2)该客户端本地保存该元数据,并根据X生成M的莫科尔树IMT,将X和IMT作为M的标签,将标签、M保存到服务器;其中,每一个节点对应一三元组(节点相对于父节点的位置信息,节点控制的叶子节点的数量,节点的哈希值);3)用户向服务器发送完整性验证请求,服务器根据用户的公钥、M及其标签生成证据P发送给该客户端;4)客户端根据元数据对P进行验证,如果验证通过,则判定服务器完整地持有M,否则判定为未完整的持有M。本发明能够使用户准确的验证各个叶子节点的值,交互数据量小。
Description
技术领域
本发明涉及一种支持公开验证和数据动态更新的云存储数据完整性验证方法,它也是一种用于验证存储于云服务器中的用户数据完整性的方法,属于云计算安全领域。
背景技术
云存储是一种在线的存储模式,即用户(客户端)与服务器(云端)通过一定的协议,将自己的外包数据存储于云端,这种新兴的存储方式,具有云计算的灵活性、低成本性、可扩展性。用户可以随时随地接入云端,获取自己的数据;按照“payasyougo”的方式,根据实际使用的存储空间付费,降低了数据的维护和存储设备的成本,并且能够按照存储的需要进行扩展。
与此同时,云存储也存在许多安全问题,其中,云端数据的完整性是用户关注的热点问题之一。用户将数据存储于云端,在物理上失去了对数据的控制。由于网络的攻击,服务器机器故障等原因,存储于云端的数据可能被篡改,删除等。而云服务提供商为了更好的信誉等其他原因,可能隐瞒数据出错的事实。如AmazonS3在收到很多用户投诉之后,才向外界公布服务器数据损坏。
前期研究主要针对静态数据的完整性验证,其中Ateniese等人在发表的文章《ProvableDataPossessionatUntrustedStores》中提出的PDP方案(参考文献:G.Ateniese,R.Burns,R.Curtmola,J.Herring,L.Kissner,Z.Peterson,andD.Song.Provabledatapossessionatuntrustedstores.InACMCCS’07,Fullpaperavailableone-print(2007/202),2007.),采用了数据抽样和RSA同态签名结合的方法进行数据完整性验证,其用户的存储量为O(1),用户的计算量为O(1),服务器的计算量O(c)(c为挑战的数据块),挑战次数不限。支持数据的动态操作的数据完整性验证方案中,C.ChrisErway等人在发表的文章《DynamicProvableDataPossession》中首先提出支持全动态操作(指不仅能够进行修改,删除操作,还能进行添加等操作)的DPDP方案(参考C.Erway,A.Kupcu,C.Papamanthou,andR.Tamassia.Dynamicprovabledatapossession.inProc.ofCCS’09,2009,pp.213–222.);Wangqian等人在发表的文章《EnablingPublicVerifiabilityandDataDynamicsforStorageSecurityinCloudComputing》中基于莫科尔树(MerkleTree,MT)提出了支持公开验证的支持数据动态操作的方案(参考Q.Wang,C.Wang,K.Ren,W.Lou,andJ.Li.Enablingpublicauditabilityanddatadynamicsforstoragesecurityincloudcomputing.IEEETransactionsonParallelandDistributedSystems,vol.22,no.5,pp.847–859,2011.),采用MT和BLS签名(Boneh,Lynn和Shacham提出的短签名方案,简称BLS签名方案)结合的方法进行验证。Haozhuo等人在发表的文章《APrivacy-PreservingRemoteDataIntegrityCheckingProtocolwithDataDynamicsandPublicVerifiability》中提出了保护隐私的支持数据动态操作的完整性验证方案(参考Z.Hao,S.Zhong,N.Yu.APrivacy-PreservingRemoteDataIntegrityCheckingProtocolwithDataDynamicsandPublicVerifiability.IEEETransactionsonKnowledgeandDataEngineering,vol.23,no.9,2011)。
在上述Wangqian文章的方案中,其MT动态更新之后,用户无法获取MT的结构,因而用户在仅有完整性验证路径时,无法有效进行验证叶子节点的值;Haozhuo的方案中,用户的本地存储量较大,为O(n)(n为将要存储数据的大小)。
莫科尔树也称作哈希树,是数据完整性认证的常用方法之一,将所要存储的数据进行分块,树中每个叶子节点与一个数据项对应,每个内部节点的值是该节点的两个子节点的值连接节点的哈希值,其最顶端的节点称为根节点,记为v。如图1所示为一棵典型的哈希树,叶子节点数据项为x1,x2,x3,x4,其中n1=h(x1||x2),n2=h(x3||x4),||表示连接操作,h是一个哈希函数,如SHA-1,SHA-256等。从图1中可以求得根节点的值为v=h(n1||n2)。通过待验证数据的兄弟节点的路径,最后得到莫科尔树根节点的哈希值,从而来判断验证是否通过。
发明内容
针对现有技术中存在的技术问题,本发明的目的是提出一种支持公开验证和数据动态更新的云存储数据完整性验证方法。本发明利用改进的莫科尔树对数据进行完整性验证,同时,用户在数据更新后,能够准确的验证各个叶子节点的值,还能支持第三方进行公开验证。并且我们设计的方案中用户的本地存储量为O(1)。可用于实现用户对存储在云端的数据进行高效的、安全的完整性校验,并且在云端数据进行动态更新后,无需重新进行系统初始化和参数重置就能进行完整性验证。
本发明首先对莫科尔树进行了改进,给出了相关定义,然后利用改进的莫科尔树(如图3)对存储在云端的数据进行完整性验证。下面给出改进的莫科尔树及其相关定义,并对本方法作出说明。
改进的莫科尔树(IMT)
定义1:如图3,对于IMT中的每一个节点vi,我们定义了一个三元组Ai=(p(vi),rank(vi),h(vi))与其对应。p(vi)表示节点vi相对于父节点的位置信息,rank(vi)的值表示每一个节点控制的叶子节点的数量,h(vi)表示节点的哈希值,每个符号的具体含义可以表示为:
其中vil表示节点vi的左子树,vir表示节点vi的右子树,xi表示每个叶子节点的数据项的标识。图3中的各个节点的信息对应如表1:
表1、节点信息表
定义2:任意一个叶子节点vi的完整性路径为从vi到根节点v的路径中所有k个兄弟节点三元组信息所组成的集合Ωi,i.e.Ωi={Ai1,Ai2....Aik}Aik表示完整性路径上第k个节点vik的三元组信息。
数据完整性验证方案
通信双方包括两个实体,用户端(Client)和服务器(Server)。以下将结合附图对所述的持有性验证的技术方案进行阐述,其中图2为本发明数据完整性验证示意图;
数据完整性验证方案分为初始化、挑战-响应和动态更新三个阶段。具体步骤如下:
阶段一(初始化):由客户端执行,包括密钥生成,数据标签的生成,是用户在存储数据之前执行的操作。
步骤1.1(密钥生成):KeyGen(1k)→{sk,pk}是一个概率性的密钥生成算法,其输入为安全参数k,输出为公钥pk和私钥sk,用户保留sk,公开pk。
步骤1.2(标签生成):TagGen(sk,pk,M)→{φ,metadata}是一个标签生成算法,输入为将要存储的数据M和用户的公私钥,输出数据M的标签φ和用户进行完整性验证需要本地保留的元数据metadata,metadata的大小应该为O(1)。此后,用户将数据M和标签φ存入服务器中,metadata本地保存。
阶段二(挑战-响应):挑战-响应是用户与服务器持有性验证交互的一个过程,不管是在数据更新前,还是更新后,用户可以向服务器发起挑战(即完整性验证请求,Chal={gs,Q}),服务器根据挑战,做出相应的回应,用户根据服务器给的回应进行完整性验证。
步骤2.1(用户生成挑战):Challenge(s)→{chal}是用户生成挑战的过程,其输入为用户的用户随机生成的秘钥s,输出挑战信息chal发送给服务器。其中,用户每次挑战都会随机生成一个秘钥s,挑战chal里面的gs是用s生成的。
步骤2.2(服务器做出响应,生成证据):GenProof(pk,M,φ,chal)→{P}是服务器生成持有性证据P的过程,其输入为用户的公钥pk,存储的数据M和对应的标签φ,以及用户发送的挑战chal;输出为持有性证据P,服务器将P发送给用户。
步骤2.3(验证):CheckProof(pk,chal,metadata,P)→{accept,reject}是用户执行验证的过程,输入为用户的公钥pk,用户发送的挑战chal,用户保留的metadata,和服务器返回的证据P。如果验证通过,则输出accept,表示服务器的确完整地持有数据M,如果未通过验证,则输出reject,表示服务器未持有完整的数据M。
阶段三(动态更新):是用户需要对数据进行动态操作时,向服务器发送update信息,服务器做出响应的过程,其具体为:
步骤3.1(执行更新操作):PerfromUpdate(pk,M,φ,update)→{M',φ',Pupdate}这是服务器在收到用户的update信息后执行的操作,其输入为用户的公钥pk,更新前的数据M和标签φ,和用户发送的update信息,输出为动态操作后的数据M'和对应的标签φ',和验证更新的正确性证明Pupdate,之后服务器将Pupdate发送给用户。
步骤3.2(验证):VerifyUpdate(pk,update,metadata,Pupdate)→{(metadata',accept),reject}是用户验证服务器动态操作正确性的过程,其输入为用户的公私钥,数据的更新信息update,用户的元数据metadata,服务器返回的更新证明Pupdate。当服务器动态操作执行无误时,输出的结果为accept,且用户得到新的metadata';当服务器动态操作执行错误时,输出reject。
与现有技术相比,本发明的积极效果为:
本发明是一种支持公开验证和数据动态更新的云存储数据完整性验证方案,该方法涉及数据在云端的存储,数据公开的完整性校验,存于云端数据的动态更新,其优点和功效是:1)我们利用改进的莫科尔树对数据进行完整性验证,用户能够有效的、准确的验证各个叶子节点的值。2)支持公开验证。3)交互数据量小,且用户的本地存储量仅为O(1)。4)用户可发起的持有性验证挑战次数不受限制;5)支持数据的动态更新,包括数据的修改,插入,删除等。
附图说明
图1为传统的莫科尔树示意图;
图2为云存储数据完整性验证系统示意图;
(a)初始化阶段,(b)挑战响应阶段,(c)数据动态更新阶段,
图3为改进的莫科尔树示意图;其中,叶子节点v1,v2,v3,v4存储的是分块数据x1,x2,x3,x4,v7为根节点;
图4为云存储数据完整性验证流程图;
图5为云存储数据完整性验证信息交互示意图;
其中,x1、x2、x3、x4分别代表所要存储数据的分块,M代表存储的数据,φ代表数据M对应的标签,P代表服务器根据用户发起的挑战chal所产生的持有性证据。
具体实施方式
总体来讲,本发明分为初始化、挑战-响应和动态更新三个阶段,下面对应图4和图5将这三个阶段的具体实施步骤做出说明,同时给出具体的数据验证和数据动态更新的算法。
阶段一:初始化
●KeyGen(1k)→{sk,pk},用户选择安全参数k,pk=(N,g),sk=(p,q),其中N=pq,p,q是两个大素数,g是内的二次剩余类QRN的生成元。
●TagGen(sk,pk,M)→{φ,metadata},用户将要存储的数据M分成n份,对于每一份mi(i=1..n),计算mi(i=1..n)的标识对于所有的标识X={x1,x2,...,xn}生成IMT,设根节点的三元组A={(p(v),rank(v),h(v))},用户在本地保存metadata=A和私钥sk,将M和φ={X,IMT}发送给服务器(用户也可以仅发送X,由服务器自己生成IMT)。
阶段二:挑战-响应
●Challenge(sk)→{chal},此步骤可以在数据更新之前,也可以更新之后。用户随机生成秘钥计算gs=gsmodN,从数据M的n份数据中随机选择c组不同数据的序号和对应的加权系数的集合(cy为序号,ay为对应的加权系数)Q={(cy,ay),y=1....c},其中cy∈[1,n]且互不相同,将chal={gs,Q}发送给服务器。
●GenProof(pk,M,φ,chal)→{P},服务器收到chal后,进行计算: 服务器将P={p1,p2}返回给用户,是用户随机选取的c组数据对应叶子节点中第cy个叶子节点的数据项的标识,是的完整性路径中所有兄弟节点的三元组信息的集合。持有性证据P中包括c个数据对应于用户请求验证的第cy个数据项完整性时返回的数据。
●CheckProof(pk,sk,chal,metadata,P)→{accept,reject}用户收到P={p1,p2}时,对于j=1,…,c先调用算法1验证当验证结果全部为accept时,再计算p3为计算的结果,如果则输出accept,否则,输出reject。
阶段三:动态更新
●PerfromUpdate(pk,M,φ,update)→{M',φ',Pupdate}用户需要更新数据时,向服务器发送update请求,服务器执行数据更新方法,输出更新的数据和标签,做出相应的正确性证明。
●VerifyUpdate(sk,pk,update,metadata,Pupdate)→{(metadata',accept),reject}当用户需要对第i个数据项进行动态操作时,例如修改,用户发送请求update,服务器和用户之间运行md(A,xi,Ωi,xi')→newIMT操作,服务器得到更新后的数据{M',φ'},其中φ'={X',newIMT},并将修改后的证据Pupdate={Ai,Ωi}发送给用户,用户通过{xi,Ωi}得到新的metadata'=A',动态操作完成。
算法1:根节点数据验证
用户只拥有根节点v三元组数据A,服务器持有根节点数据项的标识X={x1,x2,...,xn}。用户向服务器发送请求验证第cy个数据项的完整性时,服务器向用户发送为了表述方便,我们用z表示cy。用户执行以下算法1verify(A,xz,Ωz)→{accept,reject}进行认证。
算法1用于验证存于节点vz上的数据项标识xz的完整性,输入为A,xz,Ωz,其中,A为根节点的三元组信息,Ωz={Az1,Az2....Azk}为验证xz的完整性路径,Ωz中含有k个节点,从Az1到Azk,用Azj=(p(vzj),rank(vzj),h(vzj))表示,j=1,2,…,k,用户验证通过时,输出accept,用户验证失败时,输出为reject。具体步骤为:
1.定义临时变量p,rank,h,r,其中,p代表节点的位置信息,rank代表此节点下面包含的叶子节点数,h代表节点的哈希值;p,rank,h用来计算哈希值,r用来计算xz在整棵树中的序号。
2.初始化rank,r,p,h:rank0=1,r0=1,计算h0=h(p0||xz||rank0);
3.由rank0,r0,p0,h0和Az1=(p(vz1),rank(vz1),h(vz1))做运算,得到rank1,r1,p1,h1:rank1=rank0+rank(vz1)、当p1=1时,h1=h(p1||h0||h(vz1)||rank1),r不变;当p=0时,r1=r0+rank(vz1)、h1=h(p1||h(vz1)||h0||rank1)。
4.由上一步得到的rank1,r1,p1,h1,再与Az2=(p(vz2),rank(vz2),h(vz2))相似的运算,得到新的rank2,r2,p2,h2,如此反复,直到算到Azk,得到rankk,rk,hk。
5.将最终算得的结果与根节点的三元组信息A进行对比,如果满足:rankk=rank(v),hk=h(v),rk=z,说明服务器返回的证据是正确的,输出accept,否则输出reject。
算法2:数据标识修改
数据项是mi,数据项对应的标识是IMT中存的是数据项的标识,由于数据项变了,数据项的标识也会变化,因此对数据项的标识进行操作。当用户需要修改第i个数据的标识xi时,假设修改后的数据标识为xi',用户发送修改请求update={i,xi',md}时,md表示数据标识修改命令,服务器向用户发送{xi,Ωi},并且执行修改操作算法2.1md1(Ωi,xi')→newIMT,得到修改后的IMT,其中f(Aij)指节点vij父节点的值。用户执行以下算法2.2md2(A,xi,Ωi,xi')→A',得到修改后根节点的值A',并保存A'。
算法2具体步骤为:
1.首先算出修改数据标识后的第i个节点处的新的三元组信息和新的第i个节点的完整性路径:Ai'=(p(xi),rank(xi),h(p(xi)||xi'||rank(xi)))Ωi'={Ai1,Ai2....Aik}由于是修改数据,所以完整性路径是不变的;并且令A'=NULL
2.调用算法1的步骤1-4,verify(A',xi',Ωi'),以A',xi',Ωi'为输入,来得到xi'完整性路径上节点的rankj,rj,hj,forj=1,..k等中间值;
21):定义临时变量p,rank,h,r,其中,p代表节点的位置信息,rank代表此节点下面包含的叶子节点数,h代表节点的哈希值;p,rank,h用来计算哈希值,r用来计算xi'在整棵树中的序号。
22):初始化rank,r,p,h:rank0=1,r0=1,计算h0=h(p0||xi'||rank0);
23):由rank0,r0,p0,h0和Ai1=(p(vi1),rank(vi1),h(vi1))做运算,得到rank1,r1,p1,h1:rank1=rank0+rank(vi1)、当p1=1时,h1=h(p1||h0||h(vi1)||rank1),r不变;当p=0时,r1=r0+rank(vi1)、h1=h(p1||h(vi1)||h0||rank1)。
24):由上一步得到的rank1,r1,p1,h1,再与Ai2=(p(vi2),rank(vi2),h(vi2))相似的运算,得到新的rank2,r2,p2,h2,如此反复,直到得到rankk,rk,hk。
所以我们就得到了rankj,rj,hj,forj=1,..k等中间值;
3.根据步骤2,通过循环,算出f(Aij)={pj,rankj,hj}forj=1…k,f(Aij)指节点vij父节点的值(因为是修改数据,所以只有完整性路径上的兄弟节点的值以及根节点的值更改,故算出f(Aij)={pj,rankj,hj}forj=1…k即可),直到算出根节点A'=f(Aik)={null,rankk,hk},到此为止,我们已经把修改后的IMT计算完毕了;
4.用户调用算法1verify(A,xi,Ωi)→accept,
41):定义临时变量p,rank,h,r,其中,p代表节点的位置信息,rank代表此节点下面包含的叶子节点数,h代表节点的哈希值;p,rank,h用来计算哈希值,r用来计算xi'在整棵树中的序号。
42):初始化rank,r,p,h:rank0=1,r0=1,计算h0=h(p0||xi'||rank0);
43):由rank0,r0,p0,h0和Ai1=(p(vi1),rank(vi1),h(vi1))做运算,得到rank1,r1,p1,h1:rank1=rank0+rank(vi1)、当p1=1时,h1=h(p1||h0||h(vi1)||rank1),r不变;
当p=0时,r1=r0+rank(vi1)、h1=h(p1||h(vi1)||h0||rank1)。
44):由上一步得到的rank1,r1,p1,h1,再与Ai2=(p(vi2),rank(vi2),h(vi2))相似的运算,得到新的rank2,r2,p2,h2,如此反复,直到得到rankk,rk,hk。
45)将最终算得的结果与根节点的三元组信息A进行对比,如果满足:rankk=rank(v),hk=h(v),rk=i,说明服务器返回的证据是正确的,输出accept,否则输出reject。
如果输出的是accept,则说明服务器返回的是第i个数据标识和其完整性路径。然后用户还是跟服务器进行一样的操作来算出更新后的根节点的值A',然后保存在本地,更新完毕。如果验证输出reject,则操作失败。
算法3:数据标识的插入和删除
当用户需要在IMT第i个数据标识xi之后插入数据标识xi*时,用户发送插入数据请求update={i,xi*,ins},ins表示插入操作命令标识。服务器向用户发送{xi,Ωi},并且执行插入操作算法3.1ins1(xi,Ωi,xi*)→newIMT,得到插入后的IMT,其中f(Aij)指节点vij父节点的值。用户执行以下算法3.2ins2(A,xi,Ωi,xi*)→A',得到修改后根节点的值A',并保存A'。数据的删除和上述的数据的插入的方案类似,假设需要删除第i个数据xi,发送请求update={i,del},del表示删除操作命令标识。服务器执行del(A,xi,Ωi)→newIMT时,只需要令Ωi'={Ai2....Aik},运行verify(A',xi,Ωi')得到新的newIMT。用户执行del(A,xi,Ωi)→A'进行同样的操作。
算法3数据标识的插入方法为:
1.由于第i个节点插入了一个数据标识,所以说现第i个叶子节点变成了两个节点(第i个节点和添加的节点)的父节点,所以Ai*,Ai都要计算。首先算出第i个节点以及新插入节点的三元组信息以及第i个节点的新的完整性路径:Ai*=(1,1,h(1||xi*||1))Ai=(0,1,h(0||xi||1)),由于插入了一个数据,所以完整性路径变成了Ωi'={Ai*,Ai1,Ai2....Aik}
2.调用算法1的步骤1-4,verify(A',xi,Ωi'),以A',xi,Ωi'为输入,来得到xi完整性路径上节点的rankj,rj,hj,forj=1,..k等中间值;
21):定义临时变量p,rank,h,r,其中,p代表节点的位置信息,rank代表此节点下面包含的叶子节点数,h代表节点的哈希值;p,rank,h用来计算哈希值,r用来计算xi在整棵树中的序号。
22):初始化rank,r,p,h:rank0=1,r0=1,计算h0=h(p0||xi||rank0);
23):由rank0,r0,p0,h0和Ai1=(p(vi1),rank(vi1),h(vi1))做运算,得到rank1,r1,p1,h1:rank1=rank0+rank(vi1)、当p1=1时,h1=h(p1||h0||h(vi1)||rank1),r不变;当p=0时,r1=r0+rank(vi1)、h1=h(p1||h(vi1)||h0||rank1)。
24):由上一步得到的rank1,r1,p1,h1,再与Ai2=(p(vi2),rank(vi2),h(vi2))相似的运算,得到新的rank2,r2,p2,h2,如此反复,直到得到rankk,rk,hk。
所以我们就得到了rankj,rj,hj,forj=1,..k等中间值;
3.先算出第i个数据处的三元组信息再由Ωi'和xi根据步骤2,通过循环,算出f(Ai)指节点vi父节点的值,f(Aij)指节点vij父节点的值,(因为是修改数据,所以只有完整性路径上的兄弟节点的值以及根节点的值更改,故算出即可),直到算出根节点A'=f(Aik)={null,rankk+1,hk+1},到此为止,我们已经把修改后的IMT计算完毕了。
4.用户调用算法1verify(A,xi,Ωi)→accept,
41):定义临时变量p,rank,h,r,其中,p代表节点的位置信息,rank代表此节点下面包含的叶子节点数,h代表节点的哈希值;p,rank,h用来计算哈希值,r用来计算xi在整棵树中的序号。
42):初始化rank,r,p,h:rank0=1,r0=1,计算h0=h(p0||xi||rank0);
43):由rank0,r0,p0,h0和Ai1=(p(vi1),rank(vi1),h(vi1))做运算,得到rank1,r1,p1,h1:rank1=rank0+rank(vi1)、当p1=1时,h1=h(p1||h0||h(vi1)||rank1),r不变;
当p=0时,r1=r0+rank(vi1)、h1=h(p1||h(vi1)||h0||rank1)。
44):由上一步得到的rank1,r1,p1,h1,再与Ai2=(p(vi2),rank(vi2),h(vi2))相似的运算,得到新的rank2,r2,p2,h2,如此反复,直到得到rankk,rk,hk。
45)将最终算得的结果与根节点的三元组信息A进行对比,如果满足:rankk=rank(v),hk=h(v),rk=i,说明服务器返回的证据是正确的,输出accept,否则输出reject。
如果输出的是accept,则说明服务器返回的是第i个数据和其完整性路径,然后用户还是跟服务器进行一样的操作来算出更新后的根节点的值A',然后保存在本地,更新完毕。如果验证输出reject,则操作失败。
Claims (10)
1.一种云存储数据完整性验证方法,其步骤为:
1)用户客户端生成密钥,并根据该密钥和待存储到云端服务器的数据M,生成该数据M的标识X和元数据;
2)该用户客户端本地保存该元数据,并根据标识X生成该数据M的莫科尔树IMT,将该标识X和IMT作为数据M的标签φ,然后将标签φ、数据M保存到云端服务器;其中,IMT中的每一个节点vi对应一三元组Ai=(p(vi),rank(vi),h(vi));p(vi)表示节点vi相对于父节点的位置信息,rank(vi)的值表示每一个节点控制的叶子节点的数量,h(vi)表示节点的哈希值;任意一个叶子节点vi的完整性路径为从vi到根节点v的路径中所有k个兄弟节点三元组信息所组成的集合Ωi,Ωi={Ai1,Ai2....Aik};其中Ai1,Ai2,…Aik是节点vi的完整性路径上第1,2,…,k个节点vi1,vi2,…,vik对应的三元组信息;
3)用户向云端服务器发送完整性验证请求,云端服务器根据该完整性验证请求、该用户的公钥、该数据M及其标签φ生成持有性证据P发送给该用户客户端;
4)该用户客户端根据该数据M的元数据对P进行验证,如果验证通过,则判定云端服务器完整地持有该数据M,否则判定为未完整的持有该数据M。
2.如权利要求1所述的方法,其特征在于所述元数据为IMT根节点的三元组A={(p(v),rank(v),h(v))}。
3.如权利要求1或2所述的方法,其特征在于所述IMT中
其中,vil表示节点vi的左子树,vir表示节点vi的右子树,xi表示每个叶子节点的数据项的标识。
4.如权利要求3所述的方法,其特征在于所述标识X的生成方法为:用户客户端将该数据M分为n份,计算每一份mi(i=1..n)的标识xi,生成标识X={x1,x2,...,xn}。
5.如权利要求4所述的方法,其特征在于用户选择安全参数k生成所述密钥,所述密钥包括公钥pk和私钥sk,pk=(N,g),sk=(p,q),N=pq,p,q是两素数,g是内的二次剩余类QRN的生成元,其中为密码学中的常用符号,用户客户端本地保存私钥sk,公开公钥pk。
6.如权利要求5所述的方法,其特征在于所述完整性验证请求为chal={gs,Q};其中,gs=gsmodN,s为用户客户端随机生成一秘钥Q={(cy,ay),y=1....c},cy为从n份数据中随机选择的c组数据的序号,ay为对应的加权系数,cy∈[1,n]且互不相同。
7.如权利要求6所述的方法,其特征在于生成所述持有性证据P的方法为:云端服务器根据
所述完整性验证请求chal={gs,Q},计算 云端服务器将持有性证据P={p1,p2}返回给用户,是随机选取c组数据对应叶子节点中第cy个叶子节点的数据项的标识,是的完整性路径中所有兄弟节点的三元组信息的集合。
8.如权利要求7所述的方法,其特征在于该用户客户端对持有性证据P中的每个进行验证,其方法为:
81)定义临时变量p,rank,h,r;其中,p代表节点的位置信息,rank代表节点包含的叶子节点数,h代表节点的哈希值,r为xi在整棵树IMT中的序号;用z表示cy;
82)初始化rank,r,p,h:rank0=1,r0=1,计算h0=h(p0||xz||rank0);
83)由rank0,r0,p0,h0和Az1=(p(vz1),rank(vz1),h(vz1))做运算,得到rank1,r1,p1,h1:rank1=rank0+rank(vz1)、当p1=1时,h1=h(p1||h0||h(vz1)||rank1),r不变;当p=0时,r1=r0+rank(vz1)、h1=h(p1||h(vz1)||h0||rank1),其中vz1,vz2代表节点vz对应的完整性路径Ωz中第一个和第二个节点;
84)将得到的rank1,r1,p1,h1与Az2=(p(vz2),rank(vz2),h(vz2))进行运算,得到新的rank2,r2,p2,h2,如此反复,直到算到Azk,得到rankk,rk,hk;
85)最终算得的结果与根节点的三元组信息A进行对比,如果满足:rankk=rank(v),hk=h(v),rk=z,则判断为验证通过;否则判断为验证未通过。
9.如权利要求4所述的方法,其特征在于当用户客户端需要将IMT中第i个数据标识xi修改为xi'时,向云端服务器发送数据标识修改请求update={i,xi',md},md表示数据标识修改命令;云端服务器返回{xi,Ωi}给用户客户端并更新IMT,该用户客户端对其进行完整性验证,其方法为:
91)用户客户端计算第i个节点处的新的三元组信息Ai'=(p(xi),rank(xi),h(p(xi)||xi'||rank(xi))),并且令A'=NULL;
92)定义临时变量p,rank,h,r;其中,p代表节点的位置信息,rank代表节点包含的叶子节点数,h代表节点的哈希值,r为xi在整棵树IMT中的序号;
93)初始化rank,r,p,h:rank0=1,r0=1,计算h0=h(p0||xi||rank0);
94)由rank0,r0,p0,h0和Ai1=(p(vi1),rank(vi1),h(vi1))做运算,得到rank1,r1,p1,h1:rank1=rank0+rank(vi1)、当p1=1时,h1=h(p1||h0||h(vi1)||rank1),r不变;当p=0时,r1=r0+rank(vi1)、h1=h(p1||h(vi1)||h0||rank1),其中vi1,vi2中代表节点vi对应的完整性路径Ωi中第一个和第二个节点;
95)将得到的rank1,r1,p1,h1与Ai2=(p(vi2),rank(vi2),h(vi2))进行运算,得到新的rank2,r2,p2,h2,如此反复,直到算到Aik,得到rankk,rk,hk;
96)根据95)的结果循环算出f(Aij)={pj,rankj,hj},j=1…k,f(Aij)指节点vij父节点的值;直到计算出根节点三元组A'=f(Aik)={null,rankk,hk};
97)将96)计算结果与根节点的三元组信息A进行对比,如果满足:rankk=rank(v),hk=h(v),rk=i,则判断为验证通过,然后用户客户端将更新后的根节点的值A'保存在本地;否则判断为验证未通过。
10.如权利要求4所述的方法,其特征在于当用户客户端需要在IMT中第i个数据标识xi之后插入数据标识xi*时,用户发送插入数据请求update={i,xi*,ins},ins表示插入操作命令标识;云端服务器返回{xi,Ωi}给用户客户端并更新IMT,该用户客户端对其进行完整性验证,其方法为:
101)用户客户端计算第i个节点以及新插入节点处的新的三元组信息Ai*=(1,1,h(1||xi*||1))、Ai=(0,1,h(0||xi||1));以及第i个节点的完整性路径:Ωi'={Ai*,Ai1,Ai2....Aik};
102)定义临时变量p,rank,h,r;其中,p代表节点的位置信息,rank代表节点包含的叶子节点数,h代表节点的哈希值,r为xi在整棵树IMT中的序号;
103)初始化rank,r,p,h:rank0=1,r0=1,计算h0=h(p0||xi||rank0);
104)由rank0,r0,p0,h0和Ai1=(p(vi1),rank(vi1),h(vi1))做运算,得到rank1,r1,p1,h1:rank1=rank0+rank(vi1)、当p1=1时,h1=h(p1||h0||h(vi1)||rank1),r不变;当p=0时,r1=r0+rank(vi1)、h1=h(p1||h(vi1)||h0||rank1);
105)将得到的rank1,r1,p1,h1与Ai2=(p(vi2),rank(vi2),h(vi2))进行运算,得到新的rank2,r2,p2,h2,如此反复,直到算到Aik,得到rankk,rk,hk;
106)先算出第i个数据处的三元组信息再由Ωi'和xi根据104)计算结果循环算出j=1…k,f(Ai)指节点vi父节点的值,f(Aij)指节点vij父节点的值;直到算出根节点A'=f(Aik)={null,rankk+1,hk+1};
107)将105)计算结果与根节点的三元组信息A进行对比,如果满足:rankk=rank(v),hk=h(v),rk=i,则判断为验证通过,然后用户客户端算出更新后的根节点的值A',保存在本地;否则判断为验证未通过。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310246856.2A CN103268460B (zh) | 2013-06-20 | 2013-06-20 | 一种云存储数据完整性验证方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310246856.2A CN103268460B (zh) | 2013-06-20 | 2013-06-20 | 一种云存储数据完整性验证方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103268460A CN103268460A (zh) | 2013-08-28 |
CN103268460B true CN103268460B (zh) | 2016-02-10 |
Family
ID=49012088
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310246856.2A Expired - Fee Related CN103268460B (zh) | 2013-06-20 | 2013-06-20 | 一种云存储数据完整性验证方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103268460B (zh) |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103699851B (zh) * | 2013-11-22 | 2016-05-25 | 杭州师范大学 | 一种面向云存储的远程数据完整性验证方法 |
CN105205402A (zh) * | 2014-06-26 | 2015-12-30 | 佘堃 | 一种基于隐私集群元数据分离的云存储隐私保护方法 |
CN104135477B (zh) * | 2014-07-21 | 2017-09-19 | 苏州锐盾信息科技有限公司 | 云计算环境下机密信息的存储方法 |
CN105320899B (zh) * | 2014-07-22 | 2018-01-09 | 北京大学 | 一种面向用户的云存储数据完整性保护方法 |
CN104504346B (zh) * | 2014-12-17 | 2017-08-11 | 清华大学 | 远程数据完整性概率检验方法及系统 |
CN105786931B (zh) * | 2014-12-26 | 2019-06-04 | 北京神州泰岳软件股份有限公司 | 一种树结构资源存储、查询的方法和装置 |
CN104811300B (zh) * | 2015-04-22 | 2017-11-17 | 电子科技大学 | 云存储的密钥更新方法及云数据审计系统的实现方法 |
CN104899525A (zh) * | 2015-06-12 | 2015-09-09 | 电子科技大学 | 改进动态操作的云数据完整性证明方案 |
CN106708648B (zh) * | 2015-07-14 | 2019-11-26 | 阿里巴巴集团控股有限公司 | 一种文本数据的存储校验方法和系统 |
CN105491069B (zh) * | 2016-01-14 | 2018-08-21 | 西安电子科技大学 | 云存储中基于抵抗主动攻击的完整性验证方法 |
KR101772554B1 (ko) * | 2016-02-02 | 2017-08-30 | 주식회사 코인플러그 | 파일에 대한 노터리 서비스를 제공하고 상기 노터리 서비스를 사용하여 기록된 파일에 대한 검증을 수행하는 방법 및 서버 |
KR101735708B1 (ko) * | 2016-02-02 | 2017-05-15 | 주식회사 코인플러그 | 파일에 대한 노터리 서비스를 제공하고 상기 노터리 서비스를 사용하여 기록된 파일에 대한 검증을 수행하는 방법 및 서버 |
CN106845280A (zh) * | 2017-03-14 | 2017-06-13 | 广东工业大学 | 一种Merkle哈希树云数据完整性审计方法及系统 |
CN107451281B (zh) * | 2017-08-08 | 2020-09-29 | 东北大学 | 基于ads的外包数据库sql查询完整性验证系统及方法 |
CN107659654B (zh) * | 2017-09-29 | 2019-08-09 | 清华大学 | 基于信誉的多云数据完整性损坏高效追责方法及装置 |
CN108566278B (zh) * | 2018-03-21 | 2020-04-14 | 北京金堤科技有限公司 | 数据合作的方法及装置 |
CN108737109A (zh) * | 2018-05-11 | 2018-11-02 | 北京奇虎科技有限公司 | 数据持有证明方法、装置及系统 |
CN108629040A (zh) * | 2018-05-11 | 2018-10-09 | 北京奇虎科技有限公司 | 数据持有证明方法、装置及系统 |
US10877957B2 (en) | 2018-06-29 | 2020-12-29 | Wipro Limited | Method and device for data validation using predictive modeling |
CN108923932B (zh) * | 2018-07-10 | 2020-12-11 | 东北大学 | 一种去中心化协同验证系统及验证方法 |
CN111371464B (zh) * | 2018-12-26 | 2023-09-08 | 深圳市海思半导体有限公司 | 一种Polar码的译码方法及装置、设备 |
CN109889505B (zh) * | 2019-01-23 | 2022-05-27 | 平安科技(深圳)有限公司 | 数据持有性验证方法及终端设备 |
CN109951296B (zh) * | 2019-03-05 | 2020-12-08 | 北京邮电大学 | 一种基于短签名的远程数据完整性验证方法 |
CN110147410B (zh) * | 2019-04-18 | 2020-08-04 | 阿里巴巴集团控股有限公司 | 一种块链式账本中的数据验证方法、系统、装置及设备 |
CN110086795A (zh) * | 2019-04-28 | 2019-08-02 | 中国人民解放军战略支援部队信息工程大学 | 认证树构建方法及云平台下基于认证树的流安全交换系统 |
CN111935091A (zh) * | 2020-07-08 | 2020-11-13 | 山东大学 | 抗泄露的前向安全的云数据完整性远程校验方法及系统 |
CN113556322B (zh) * | 2021-06-23 | 2023-08-18 | 北京航空航天大学 | 一个基于区块链的云数据完整性验证方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101170416A (zh) * | 2006-10-26 | 2008-04-30 | 阿里巴巴公司 | 网络数据存储系统及其数据访问方法 |
CN101626392A (zh) * | 2008-07-08 | 2010-01-13 | 中国移动通信集团公司 | 数据存储、查找的方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101582920B (zh) * | 2009-06-09 | 2012-09-05 | 中兴通讯股份有限公司 | 一种分布式文件系统中校验和同步数据块的方法及装置 |
-
2013
- 2013-06-20 CN CN201310246856.2A patent/CN103268460B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101170416A (zh) * | 2006-10-26 | 2008-04-30 | 阿里巴巴公司 | 网络数据存储系统及其数据访问方法 |
CN101626392A (zh) * | 2008-07-08 | 2010-01-13 | 中国移动通信集团公司 | 数据存储、查找的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103268460A (zh) | 2013-08-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103268460B (zh) | 一种云存储数据完整性验证方法 | |
US20210271764A1 (en) | Method for storing data on a storage entity | |
CN110505046B (zh) | 多数据提供方加密数据跨平台零知识校验方法、装置及介质 | |
US20190229911A1 (en) | Blockchain-implemented method and system | |
CN103605784A (zh) | 一种多重云环境下数据完整性验证方法 | |
CN104978239B (zh) | 一种实现多备份数据动态更新的方法、装置及系统 | |
CN110362357A (zh) | 一种应用程序的配置文件管理方法及装置 | |
CN109286490A (zh) | 支持密态数据去重和完整性验证方法及系统 | |
CN111753335A (zh) | 区块内容的编辑方法及装置 | |
CN105072086A (zh) | 一种基于MapReduce的云存储批量审计方法 | |
US20190081783A1 (en) | Method for storing data on a storage entity | |
CN103888262A (zh) | 用于云数据审计的密钥变化和签名更新的方法 | |
CN105007284A (zh) | 多管理者群组共享数据中具有隐私保护的公开审计方法 | |
CN106991148A (zh) | 一种支持全更新操作的数据库验证系统及方法 | |
WO2019057810A1 (en) | SECURE LAUNCH OF CORE MODULES | |
CN106209365A (zh) | 云环境下利用备份数据在用户撤销时重签名的方法 | |
CN104899525A (zh) | 改进动态操作的云数据完整性证明方案 | |
CN114127724A (zh) | 针对多副本存储的完整性审计 | |
CN108768975A (zh) | 支持密钥更新和第三方隐私保护的数据完整性验证方法 | |
CN105306214A (zh) | 一种双线性对安全外包方法 | |
Zhao et al. | Fuzzy identity-based dynamic auditing of big data on cloud storage | |
CN102685092B (zh) | 一种用于证明远程平台安全属性的远程证明方法 | |
Peng et al. | Secure lightweight stream data outsourcing for internet of things | |
Fang et al. | Blockchain‐based privacy‐preserving valet parking for self‐driving vehicles | |
CN104486311B (zh) | 一种支持可扩展性的远程数据完整性检查方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160210 Termination date: 20170620 |
|
CF01 | Termination of patent right due to non-payment of annual fee |