一种面向用户的云存储数据完整性保护方法_3

文档序号:9564821阅读:来源:国知局
进行两种形式的恢复。
[0043] 在文件验证流程结束后,当检测出数据不完整时,我们需要进一步的错误定位。用 户取回有损坏数据的那一个分支树上的数据,通过对这几个数据块的哈希值进行对比从而 定位出错误出现在某些具体的数据块上。如果只定位到某一个数据块有错误以后,则先用 这个分块内部的纠删码对其进行纠错恢复;若数据的损坏率超过了分块内部纠删码的恢复 能力,则用数据块间的纠删码对其进行纠错恢复。
[0044] 与原方案相比,本方案增加了文件恢复阶段,并使用两种粒度的纠删码对文件进 行恢复。
[0045] 下面将详细说明上述创新点:
[0046] 1、基于纠删码的局部动态数据校验方法
[0047] (1)弓丨入纠删码
[0048] ECAS-FDP0R方案中引入纠删码,解决了 FDPOR方案在一个数据块内部使用ECC恢 复能力有限的问题。ECC-次编码能纠正单比特错误和检测双比特错误,但对1比特以上的 错误无法纠正,对2比特以上的错误不保证能检测。纠删码相比ECC有更好的纠错与恢复 能力,只要不多于冗余块数量的数据块损坏都能将其恢复。
[0049] 本文选择柯西RS码作为ECAS-FDP0R方案的纠删码,因为RS码是唯--个可以满 足任意的数据磁盘数目和冗余磁盘数目的MDS编码;同时还是一个横式编码,生成的冗余 校验码独立于数据条块,有很好的可扩展性性,管理方便;另外,柯西RS编码可以将伽罗华 域上的乘法运算转化成仅包含异或的简单运算,效率高。
[0050] 由于使用了纠删码,增加一定的存储开销,存储开销随着纠删码编码率的增加而 加大,但是相比副本方式的冗余保护,纠删码的冗余校验码所占用的存储空间要小的多,另 外,纠删码提供了优良的纠错与恢复能力,其增加的存储开销在可接受范围内。
[0051] (2)应用纠删码
[0052] 为了增强数据受损后的恢复能力,将纠删码应用在一个数据分块的内部,同时也 应用在数据分块之间,在两种场合中应用纠删码能够提供两种粒度的冗余保护。增加应用 在数据块之间的纠删码,目的是加大纠删码分布粒度,好处是当一个数据块内部的数据损 坏过多超过了数据块内恢复的范围时,可以利用数据块之间的冗余校验码将受损数据恢 复。另外一个方面,原始数据与其对应的冗余校验码应分散存储在不同的云存储服务器上, 即使一个服务器发生宕机等故障,还有其他服务器上的数据能够对丢失数据进行恢复。
[0053] 对于纠删码的参数确定,数据块间的纠删码选用RS(3,1)、RS(2,1),原因是为了和 2-3树的树形结构结合,在一个分支上有3个节点时选用RS (3,1),在一个分支上有两个节 点时选用RS (2,1)。选择RS出,2)作为数据块内部纠删码,对于一个数据块内的编码参数不 受树形结构约束,因此无特殊限制,编码率越高则恢复能力越强,但同时占用的存储开销也 越大。通过对纠删码RS (k,m) (k为原始数据,m为冗余数据)进行实验测试,k值保持不变 时,随着m值增大文件的编码速度也越快,当m值一定时,k值越大则编码越快。通过对实 验的测试结果分析,选用柯西RS (6, 2)。
[0054] (3)纠删码支持动态数据局部校验
[0055] 为了能够在引入纠删码的同时还能够支持数据动态更新,将数据块之间的纠删码 应用在一个分支树的粒度,如图3所示,在数据第2层增加的阴影部分节点在逻辑上对应的 是数据块间的冗余校验码,是对树的第2层节点为根节点计算每一个分支树上所有数据块 之间纠删编码得到的。之所以把数据块之间的纠删码应用在一个分支树的粒度而不是整个 文件的粒度是,是为了很好的平衡数据动态更新与纠删码恢复效率之间的矛盾。
[0056] 在改进的情况下,一旦数据更新(数据修改、数据删除、数据插入),最好的情况 是2-3树的结构没有变化(如有三个叶子节点,删除了一个叶子节点;或有两个叶子节点, 插入了一个叶子节点),最坏的情况也只会影响旁边一个分支(如三个叶子节点插入了一 个叶子节点会发生分裂;两个叶子节点,删除一个叶子节点会发生合并),尽管没有做到无 需变动其他任何数据,但能够在引入了块间纠删码的同时最大限度的减少对树形结构的改 变,较好的达到了数据动态更新所带来开销尽量低的要求。
[0057] 对FDPOR进行的上述改进涉及文件上传、文件更新阶段,由于ECAS-FDP0R方案中 加入了纠删码,相比原方案增加了文件恢复阶段,在文件恢复阶段完成的功能是对文件验 证阶段过程中检测发现的损坏数据进行恢复,鉴于文件恢复与文件验证算法的关联较大, 因此将在基于纠删码和代数签名技术的完整性验证方法中详细论述。下面将对应FDPOR方 案中的文件上传、文件更新阶段论述具体改进做法:
[0058] 文件上传阶段
[0059] 在文件上传阶段,首先需要在文件F分成η个数据块,即F= (Fl,"^Fn)之后增 加生成纠删码的冗余校验码的流程并替换原方案中的一些流程:
[0060] 1)对每个数据块Fi内部数据应用纠删码,生成的冗余校验数据为Pi,Fi '为内 部纠删编码后的文件块,i = (1…η);
[0061] 2)对 Fi '计算 hash 值:Hi = h (Fi ');
[0062] 3)生成基于纠删码的范围2-3树:对于η个数据块组成的集合F '= {F1 ',…, Fr^ },我们要构建一棵基于纠删码的范围2-3树。rb2-3树构建方式参考FDP0R,树的节 点用V来表示,每一个节点储存(I (V),r (V),x(v)),I (V)是节点V的高度;r (V)是节点V 的范围值;X (V)是节点V的认证值。
[0063] 改进算法是在每一个节点存储4个值(I (V),r (V),X (V),p (V) ),p (V)存储的是数 据块之间的冗余校验码的哈希值信息。
[0064] ?如果 I (V) = 2,定义 p(v) = c2, C3)) , c2、C3 是内部节点 V 的从左到 右的三个孩子(当节点V只有2个孩子C1, C2时,c3 = null), p (V)表示的意义是对数据块 间的冗余校验码计算哈希值,可以对数据块间的冗余校验码进行验证,看其是否遭到损坏, 作用是在数据完整性验证过程进行出错数据的快速定位。
[0065] ?当I (V)不等于2的时候,定义p (V) = 0。
[0066] 另一个改进是对基于范围的2-3树的改进,增加数据块间的冗余校验码节点(即 图3-4中的阴影节点),把它与树高为2的那层节点在逻辑上对应起来,因为树的第2层节 点是通过叶子节点计算得到,对以第2层节点为跟的分支树对应的数据块间冗余校验码有 相似的逻辑对应关系。在第2层节点中加入数据块间冗余校验码的逻辑-物理映射信息, 目的是方便的检索到数据块间的冗余校验码。
[0067] 4)对每一个分支树(假设分支树有z个)的节点进行数据块间的纠删编码,生成 的校验数据?/由(31化拉用密钥5]进行流置换(」=1,"1),生成?",···,^
[0068] 5)用户将
上传到云存储服务器,P1",… ,Pz"与原始数据要分散存储。
[0069] 文件更新
[0070] 文件更新阶段,用户将要更新的叶子索引发送给云管理节点,由于ECAS-FDP0R方 案中加入了数据块间的冗余校验码,所以需要预先判断用户想要进行的更新操作除了会影 响想要进行更新的节点以外还会影响哪些节点,返回这些节点的索引。增加以下三个函 数:
[0071] rb23Tree. JudgeM(T, i)
[0072] 此函数允许用户判断对一个特定的叶子节点i进行数据更改操作会影响其他哪 些节点的位置,返回叶子节点索引集合I。
[0073] 判断更新节点在2-3树的哪一个分支上,返回该节点所在分支树上的所有节点和 父节点索引。
[0074] rb23Tree. JudgeD (T, i)
[0075] 此函数允许用户判断对一个特定的叶子节点i进行数据删除操作会影响其他哪 些节点的位置,返回叶子节点索集合I。
[0076] 判断更新节点在2-3树的哪一个分支上,
[0077] 1.若该分支具有3个孩子,返回该节点所在分支树上的所有节点和父节点索引。
[0078] 2.若该分支具有2个孩子,则探测其邻居分支
[0079] a)若存在有3个孩子的分支p,则节点i所在分支上的剩余节点优先加入只有3 个孩子的分支,返回更新节点i所在分支上的所有节点与分支P上的节点和他们的父节点 索引。
[0080] b)若只存在2个孩子的分支,节点i所在分支上的剩余节点加入2个孩子的分支, 该分支更新后其父节点将减少1,此时在父节点上需要循环调用JudgeD方法直到其他情形 出现,若最终达到root节点,该树树高-1,循环返回这个分支的节点与父节点索引。
[0081] rb23Tree. JudgeI (T, i)
[0082] 此函数允许用户判断对一个特定的叶子节点i进行数据插入操作会影响其他哪 些节点的位置,返回叶子节点索集合I。
[0083] 判断更新节点在2-3树的哪一个分支上,
[0084] 1,若该分支具有2个孩子,返回该节点所在分支树上的所有节点和父节点索引。
[0085] 2,若该分支具有3个孩子,则该分支更新后会分裂成为2个分支,返回这个分支上 的节点与父节点索引。并且由于会在叶子节点的上一层添加一个节点,需要递归判断上一 层节点是否为本例情况中的1、2.情形,并对2情形做进一步递归调用,直到变为根节点为 止,返回所有更新的分支上的节点索引。
[0086] 对rb23Tree的修改、插入、删除算法做如下修改:
[0087] rb23Tree. M(T, i, e)
[0088] 用户端将节点索引集合I发给云端,云端返回索引对应的数据给用户,用户更新 的时候只更新他想要更新的节点i中的数据,更新完数据以后,节点集合I中其他的节点要 和节点i中的数据一起重新进行纠删码编码;此算法允许用户更改树的第i个节点的值e, 并正确的更新树T,修改步骤如下:
[0089] 1)执行rb23Tree. M(T,i,e):将树的第i个叶子节点替换成一个新的值e,对数据 e进行纠删码的计算,生成数据块内冗余校验码;
[0090] 2)重新计算数据块内与数据块
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1