云存储数据的一般完整性验证

最近毕设做的是云存储数据的完整性研究,因而现在对这里有了一点了解,现在把自己的理解写下来,也是为了加深理解吧!

数据的完整性验证是指验证收到的数据和原来的数据是否保持完全一致的证明手段成为完整性验证。完整性验证也分为一般完整性验证和远程完整性验证,一般完整性验证是指从服务器中读出的数据和之前写入的数据是否一致,验证方法是基于用户访问的。最初的一般完整性验证中,就是需要从服务器上面下载数据到本地然后通过Hash算法验证与之前预存在本地的源Hash结果值是否相同,这种验证方法虽然简单,但是缺点显而易见,验证完整性需要将数据全部从服务器上面全部都下载下来,当数据量很大时,对网络流量的消耗和要求就很大了,得不偿失。而云端数据的完整性验证尤其特殊性,因为再大的文件数据在云端都是以一个一个block形式存储的,那么可以吧这些一个一个的block,那么block的集合就是对象的集合,这样我们把存档文件看作是结构化的对象集合S,云端数据的一般完整性验证问题也就是对象集合S的成员验证问题,即验证用户取回的文件块是否是对象集合S的成员。对象集合的成员验证问题可以通过认证数据结构(认证字典)的完整性验证。

认证字典,也可称之为认证数据结构,是将一种查询数据结构和密码学技术相结合,从而将其中的数据可认证化的一种结构。下面介绍几种基于认证字典的一般完整性验证算法

1、基于MHT的数据完整性验证

默克尔哈希树是一种树型的数据结构,其叶子结点是可独立验证的数据块(或者间接数据)的Hash,任一内部结点是其孩子结点数据联接后计算得到的 hash 值。适用于快速验证某一数据块或少数数据块的完整性。通过节点i的值和snop算得根节点的hash值(snop:节点i与MHT根节点之间路径上每个节点的兄弟节点。在图中h3的snop为h4、n3、n2)则根节点hash值为root‘=hash(n2|hash(n3|hash(h3|h4))),比较root’与原来的root节点的hash值即可。相对于传统的完整性检查,Merkel哈希树的时间复杂度大为降低,从0(n)降到为0(logn)。

2.基于跳表的数据完整性验证

跳表是从二叉树扩展出的一种数据结构,它是一种有序的多层次链表,如下图所示

跳表中查找元素x,首先从左上角的头结点s开始,头结点s即为跳表中最左上角的节点,设v为查找到的当前节点,初始时,v=s,查找过程中只需要用到两个方式,右移和下移(跳表中的元素都是有序的),右移为在本行中向右查找直到找到第一个小于或者等于x的最大元素,下移也是同样的道理,那么在该图中查找元素14的过程如下:

本图中有S0-S4五个链,其中我们定义停滞元素为存在于Si-1而不存在与Si中的元素,高塔元素为即存在于Si-1又存在于Si中的元素,另外定义elem(v)为存在在节点v的元素,down(v)Si-1中节点v下面的结点;right(v)为Si中v结点右边的结点,跳表上的验证过程设计如下;

标签值f(v)的计算方法如下: 定义w=right(v),u=down(v),当right(v)=null时,定义f(v)=0。那么:

当u=null时,即v在So上:

(a)当w为高塔节点时,f(v) = h(elem(v),elem(w));

(b) 当 w 停滞节点时,f(v) = h(elem(v), f(w))。

当u不等于null时:

(a)当w为高塔节点, f(v) = f(u);

(b)当w为停滞节点时,f(v) = h(f(u),f(w))

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值