一种存储数据完整性验证及恢复方法与流程

文档序号:11063657阅读:5308来源:国知局

本发明涉及计算机存储、云存储中数据完整性的验证;篡改、损坏数据的恢复领域。



背景技术:

随着云技术的发展,企业和个人愈来愈倾向于将数据存储在云端,以便节省移动存储空间和方便随时随地访问;同时,数据也可在云端实现共享、方便他人下载。但是,由此也引起了数据的安全问题,数据存储在云端,脱离了数据所有者的控制,或因云服务商系统不稳定、云空间被恶意攻击,造成数据丢失和损坏。用户在不知情的情况下,或将因为数据不完整而造成各种损失;那么如何确定云端数据的完整性?数据在存储空间内被破坏后,数据不再完整,如何根据现有数据精确恢复被修改的部分?都是值得探讨的问题。

随着技术和分布式存储系统的发展,研究者们对数据可检索证明和数据持有证明方案进行了许多的改进和扩展,使其能够支持动态更新、降低通信开销以及支持无限验证用户,不仅要检测出数据是否出错,更重要的是出错数据能否有效地恢复。当前云存储系统使用副本和纠删码两种方法对用户数据进行冗余存储来保证系统的可靠性,修复时都需要传输整个文件,占用大量网络资源,给分布式系统数据中心增加了巨大的压力,造成的网络拥堵也严重降低了用户对数据读取性能。

再生码因其极小的修复带宽而受到研究者们的关注,并被广泛应用到分布式系统的研究中。针对再生码的特点,设计不同的存储方案和数据完整性验证方案,对于验证分布式系统数据安全性是很有意义的。因此,利用再生码进行数据完整性验证成为当前研究的热点。



技术实现要素:

针对现有技术的上述不足,本发明提出了一种存储数据完整性验证及恢复方法。

本发明的技术方案是:一种存储数据完整性验证及恢复方法,其涉及的算法的具体步骤如下:

步骤1:再生码(RC)对文件进行分块

步骤2:数据加密,生成数据指纹标签

步骤3:两次随机映射保存指纹标签

步骤4:数据验证

(1)获取每个数据块存储的两个指纹标签,并生成挑战块的位置。

(2)重新计算指纹标签值。

(3)对两次计算的指纹标签进行对比。

步骤5:数据恢复

本发明的有益效果是:

1、花费少量资源即可检查数据是否完整,是否被攻击篡改。

2、数据二次伪随机放置存储,数据块之间存在关联,可以通过未被损坏的部分数据块,精确恢复所有数据。

3、存储开销和通信开销较小、抗攻击性强。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下将结合算法流程图进行具体详细说明。

一、算法基本思想

首先将信息按照再生码最小存储方案把文件数据分割成数据块,然后对数据块哈希(MD5算法,后文所述哈希没有特别说明,一律采用MD5准则),生成数据证据;随后将数据证据利用伪随机存储算法映射到存储服务器节点上,将数据证据二次伪随机放置,保存到两个密文数据块上;用户保存私钥和证据密钥,当收到用户验证请求时,首先验证用户的权限,然后将存储的数据块和对应的证据标签返回给用户,通过私钥和证据密钥计算对比信息的一致性,实现验证;如果数据被攻击或者篡改,当检测到系统中有节点失效或出错时,系统返回出错节点的位置,依据二次伪随机放置存储和再生码对小于源文件的数据块进行线性处理,用当前未失效的节点迭代运算,精确恢复数据原文。

二、具体实施步骤

步骤1:再生码(RC)对文件进行分块

设文件F的大小为B,其分块参数表示为:{[n,k,d],(α,β,B)},表示大小为B的文件编码存储在n个节点上,每个节点存储α个数据量,d表示数据完整的节点,k为待修复的节点数,β为每个节点的下载量,令β=t,d=2k-2,t为常数,则B=k×(k-1)×t,α=(k-1)×t。按照参数计算文件F,分成的文件块为b,即:B={bi}=[b1,b2,...,bm]。

步骤2:数据加密,生成数据指纹标签

对数据块bi对称加密,生成密钥对称k,然后保存在服务器节点上;同时对数据bi进行哈希,生成散列值并对散列值进行加密,生成指纹密钥gm,然后计算:

其中,Mi表示数据块bi对应的指纹标签,

G(f)=G(fileName||N),N为文件的分块数目,Sig(·)函数表示{0,1}*→M,完成后,输出M=[M1,M2,...,MN]。

步骤3:两次随机映射保存指纹标签

本发明利用伪随机函数将标签数据映射到服务器节点上,并保存在文件的数据块上;标签生成算法得到标签Mi后,每一个Mi随机映射到两个存储bi加密文件块的节点上。这样的话,可以防止标签数据被破坏,同时抵制了服务器相互欺骗的风险,在保存之前,还需要对数据进行处理:

T(Mi)=T(Index||Mi)

数据指纹生成并存储完毕,将整个数据分片存储元数据发送给元数据服务器,而用户只需要保存k和gm等加密参数,方便后期的数据验证。

步骤4:数据验证

当用户希望验证数据完整性,或者验证数据有没有被非法访问和篡改时,可根据自己保存的加密参数对存储在云中的数据完整性进行验证。用户服务器发送要验证的文件和数据块索引的挑战信息s(f,Ref),云服务器接收到s后,首先验证用户的权限,通过权限验证后,将存储的指纹标签值与对该数据块重新计算的指纹标签值一并返回给用户,用户通过保存的k和gm计算对比指纹标签值的一致性,从而实现了对文件数据的验证。

(1)获取每个数据块存储的两个指纹标签,并生成挑战块的位置

s(f)=s(file Name||ref)

(2)重新计算指纹标签值

T(Mi)=T(Index||Mi)

(3)对两次计算的指纹标签进行对比

当用户输入的挑战块参数ref为0时,对所有的块都进行完整性验证。循环访问数据块,计算数据块的指纹标签、取回保存在数据块中的其它证据标签,并将其按照其所对应的块索引号写入相应的对比数组中,如果一致,则说明数据没有被篡改,是完整的,安全的,如果不一致,则说明数据被非法访问和篡改过,返回不一致数据对应的节点位置。

步骤5:数据恢复

当用户检测到存储在云端的数据出错时,最关心的就是数据能不能恢复,恢复效率有多高,是否能精确修复。当检测到系统中有节点失效或出错时,系统返回出错节点的位置,依靠再生码的特点,在节约带宽的情况下精确修复损坏数据块,在修复失效数据节点时,需要连接d个帮助节点,其中d=2α。每个节点上存储的编码向量与数据矩阵中的向量相关,修复失效节点f时,利用数据矩阵秩rank(R)=2α的特性对数据块f进行精确修复。过程为:

(1)从剩余完整节点中任取d个节点{h1,h2,...,hd},每个节点的编码向量为

(2)节点f对应的数据矩阵为将每个节点的编码向量与在节点节点内运算偶,将结果上传给需要修复的数据节点Q

(3)新节点fnew,接收到d个节点上传的修复信息,将他们组成(d×1)的矩阵W:

由于D(b)=[XY]T

所以有:

rank(R)=2α可知矩阵R中任意2α行线性无关,即R2α×2α可逆,所以:

X,Y为对称矩阵,所以有:

至此,新节点fnew对损坏节点f修复完成。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1