1.一种基于区块链的云存储数据安全去重方法,其特征在于,包括以下步骤:步骤S1、通过构造Merkle哈希树来生成文件标签,并将文件标签发送给云存储服务提供商进行重复性检测;
步骤S2、若结果为文件重复,生成文件重复存储日志,并通过智能合约管理中心执行智能合约来将存储日志整合成交易并上传到区块链上存储,以此安全地保存当前的存储状态信息;
步骤S3、若结果为文件不重复,密钥服务器通过构建角色层次哈希树来生成用户的权限密钥,通过所述该权限密钥对数据执行安全的加密操作,并将密文上传到云存储服务器存储;同时在智能合约管理中心的协助下生成文件未重复存储日志及交易。
2.如权利要求1所述的基于区块链的云存储数据安全去重方法,其特征在于,步骤S1中,将文件F划分为n个数据块F={Bi}(1≤i≤n),将数据块作为叶子节点构造Merkle哈希树,计算出根节点R;将根节点R作为文件F的标签,并发送给云存储服务提供商CSP进行重复性检查;CSP将检查标签是否已经存在,并将检测结果返回给用户。
3.如权利要求1或2所述的基于区块链的云存储数据安全去重方法,其特征在于,如果文件标签存在,则将用户身份标识IDU和云存储服务提供商的身份标识IDCSP上传到区块链,并将文件已存储的请求发送给区块链,区块链会将请求委托给智能合约管理中心SCMC,SCMC将上传的身份标识IDU和IDCSP通过椭圆曲线算法转化成区块链账户EAU和EACSP,并通过执行智能合约I,生成一笔包含文件重复存储日志Data的交易TX=To||From||Value||Data||Sig(TX),SCMC将该笔交易TX提交到区块链;
其中,To为发送方的账户EAU,From为接收方的账EACSP,Value为创建该交易的需要支付的费用,Data为存储在该交易TX中的信息,Sig(TX)为用户U对该交易TX的签名。
4.如权利要求3所述的基于区块链的云存储数据安全去重方法,其特征在于,如果文件标签不存在,则计算出收敛密钥为KCEi=H(Bi),密钥服务器KS将根据角色层次哈希树生成对应的密钥权限KR并发送给用户;用户计算最终的加密密钥 和文件的附加信息I=IDU||IDF||KR||n||T,并将数据Bi和附加信息I加密为密文CI=Encrypt(pk,I)和CBi=Encrypt(KBi,Bi),其中,Encrypt(.)为DES对称加密算法;然后用户计算文件未重复存储日志信息Data=IDU||IDCSP||CI||Sigsk(R)和检测值Y=m·H(Data),并发送信息(H(Data),Y,CBi)给CSP;CSP检测式子e(Y,g)=e(H(Data),pk)是否成立,以此来验证附加信息的正确性;如果式子成立,SCMC接受(IDU,IDCSP,Data)并执行智能合约II,来创建一笔包含日志信息Data的交易为TX=To||From||Value||Data||Sig(TX),其中的日志信息Data=IDU||IDCSP||CI||Sigsk(R);SCMC向区块链提交TX以生成新区块。
5.如权利要求2或4所述的基于区块链的云存储数据安全去重方法,其特征在于,将与区块链共同创建一个存储日志TX,其包括文件重复存储日志和文件未重复存储日志,用于记录文件存储的情况。
6.如权利要求5所述的基于区块链的云存储数据安全去重方法,其特征在于,还包括:当需要对文件的完整性验证时,通过下载该存储日志来执行本地数据审计算法,以此验证下载的文件是否完整。
7.如权利要求6所述的基于区块链的云存储数据安全去重方法,其特征在于,当下载文件F′后,先划分文件F′为n个数据块F′={B′i}1≤i≤n‑1,然后将数据块作为叶子节点构造Merkle哈希树,最后计算出其根节点R′;从区块链中下载存储日志信息Data=IDU||IDCSP||C(I)||Sigsk(R),并检查时间戳T以及数据块数量n的正确性;若正确,使用其公钥pk解密交易签名Sigsk(R),得到文件标签R,最后验证式子R′=R是否成立,若成立,则说明下载的文件为完整的,即F=F′。
8.如权利要求4所述的基于区块链的云存储数据安全去重方法,其特征在于,当数据存储在云服务器时,用户向SCMC发送完整性审核请求,SCMC选择包含c个元素的索引集S={s1,s2,...,sc}和集合Q={(i,vi)},其中,vi是第i个随机值,满足i∈S及 然后BSC将该集合Q={(i,vi)}作为挑战发送给CSP,并输出结果t(t=1表示验证成功,t=0表示验证失败);当t=1时,CSP需要利用集合Q挑选出服务器上对应的数据块序号,并生成对应数据块的证明标签P=GenProof(CBi,Q,Φi),其中,GenProof(.)是证明标签生成函数,CBi是数据块对应的密文及Φi是数据块对应的同态标签,CSP返回证明标签P给用户,用户通过验证P的正确性来确定云端数据的完整性。