APP下载

一种基于区块链的安全云存储方案设计

2021-04-15余海波

计算机应用与软件 2021年4期
关键词:哈希结点梅克尔

余海波 陈 洁 张 凯

1(华东师范大学 上海 200062)2(上海电力大学 上海 200090)

0 引 言

过去人们习惯于将文件或数据存储在本地硬盘或磁盘上。但是,随着互联网技术的发展,信息分享和交换变得更加的频繁,需要存储的数据呈现出几何级数的增长形势,本地存储难以满足用户需求。为了处理这些大规模的数据,企业和个人用户都选择借助于云平台来扩大终端的存储能力,即通过云存储方式来存取自己的文件或数据。

云存储[1]相比传统数据存储方式,是基于云计算[2]的发展而衍生出的新兴存储方式。以用户的视角来看,在云服务器中存储数据可以带来以下好处:减少了本地存储、维护和管理的成本;消除了对数据的访问受地理位置的限制;避免了在建设基础设施的大量投资和在人力资源上的巨大成本。

然而,把数据存储到不受信任的第三方服务器上,可能会导致一些数据安全隐患的出现。一方面是云服务器会面临着来自内部和外部的恶意攻击,从而威胁到存储数据的隐私性;另一方面,用户将数据上传到云服务器后,对数据的控制权随之减弱,甚至可能会失去,存储数据是否一直保持完整难以验证。因此,数据的隐私性和完整性是云存储方式的两个关键问题。为了解决数据隐私问题,传统的解决方式是把用户数据在通过特定的加密算法进行加密后,然后再上传到云服务器上[3];为了解决数据完整性的问题,传统的解决方式是在云存储服务架构的框架中引入一个假设的可信第三方(Trusted Third Party,TTP)[4-5]。基于TTP的云存储服务架构如图1所示。TTP的作用就是作为用户与云服务器间的媒介,完成数据的完整性验证。

图1 基于TTP的云存储服务架构

在引入TTP的传统方案中,数据完整性的验证结果将完全依赖于一个假设的可信第三方,而现实应用中几乎不存在完全可信的第三方。因此,如何不依赖任何可信第三方实现云存储中数据的完整性证明成了一个有价值的问题。

区块链作为比特币系统[6]的底层技术,随着比特币的成功而得到人们的广泛关注。区块链也被称为分布式账本数据库,与传统数据库相比,区块链技术的优势在于它提供了去中心化、匿名性、可审计、防篡改的特性。这些特性使得它逐渐被广泛地应用于生活中[7-8]。

本文提出一种基于区块链的云存储方案。其中数据的完整性验证不依赖于任何可信第三方,只要用户客户端和云服务器的多轮互动即可完成,并且验证结果是完全可信的。同时,通过区块链的匿名性和防篡改特性,在创建的交易过程中不会暴露与数据和用户相关的任何隐私信息,攻击者也难以对区块链上的数据进行篡改,从而保证数据的隐私不会受到威胁。

1 相关概念

1.1 区块链结构

区块链中包含有两个重要的数据结构,且它们都是基于哈希值的。一个是哈希链,它是由不同的区块通过指针链接起来所形成的;另一个是梅克尔树,它是树状的数据结构,作用是把每个区块内的不同交易的哈希值存储到叶子结点上,并基于叶子结点的哈希值进行计算,生成根结点哈希值。

区块链中的哈希链是以区块作为结点,各结点间通过指针进行链接。任何结点中的数据修改都不会导致整个链的改变。任何新产生的区块要加入到链上,必须先通过共识机制的验证。也正是这样,才实现了区块链上的数据不可修改和可审计的功能。区块链结构如图2所示。

图2 区块链结构

区块链由创世块开始,下一个块的生成需要对创世块进行哈希计算,得到的结果作为下一个区块的输入,一直这样循环下去,从而形成一条哈希链。

区块头和区块体是区块的两个重要组成部分,每部分保存了不同的基本元素信息[9]。区块的数据结构如表1所示。

表1 区块的数据结构

区块头的字段含义:

(1) 版本号:区块的版本信息。

(2) 上一区块哈希值:基于父区块头进行哈希计算生成的哈希值,存储到当前区块的区块头中。

(3) 梅克尔树:基于一个区块中全部交易生成的256位哈希值。

(4) 时间戳:新区块打包时的时间。

(5) 困难值:表示某个区块的难度级别。

(6) 随机数:调整挖矿难度。

区块体的字段含义:

(1) 交易数量:某区块中存在的交易数目。

(2) 交易列表:具体的交易记录,非空。

1.2 梅克尔树

梅克尔树(Merkle)是区块链中的第二个基于哈希值的数据结构,它通过树状的形式把某个区块中全部交易的哈希值保存着。若要验证某个交易在一个特定的块中,通过树内路径就可以完成验证。

梅克尔树结构:树中最底层的不同叶子结点存储着不同交易对应的哈希值;非叶子结点的值都是基于其相应子结点的哈希值相加再通过哈希算法计算而得到的;沿着树内路径自底向上进行计算,最终计算出的值即是根节点所对应的哈希值。梅克尔树结构的优势就在于只需要验证根节点的哈希值就能完成全部叶子结点的完整性认证。梅克尔树结构如图3所示。

图3 梅克尔树结构

梅克尔树的计算过程如下:

假设某区块共8个交易(T1-T8),每笔交易对应于一个SHA256校验值。要计算父结点的值,需要将其不同子结点的哈希值进行相加,再对相加的结果进行SHA256计算,求出的值即为父结点对应的值。计算过程自底向上进行类推,最终得到的哈希值即为根节点H0的值。按照上面的方式进行计算,便会形成一棵二元梅克尔树。图3中,所有叶子结点(H7-H14)保存着交易(T1-T8)的实际哈希值;内部结点(H1-H6)保存着由孩子结点生成的哈希值。所有内部结点形成的路径组合是验证叶子结点完整性的校验路径可能性,因此它们也被称为路径哈希值。在本文方案中,为了实现对存储数据提供完整性证明,梅克尔树叶子结点保存是对数据块通过SHA256算法进行计算所得到的哈希值。

2 基于区块链的云存储方案

2.1 系统框架

基于区块链的云存储方案的框架如图4所示。

图4 系统框架图

基于区块链的云存储方案框架图中存在如下几个实体:

(1) 用户:用户实体,负责将本地文件或数据上传到云服务器上。

(2) 区块链:记录交易的实体。

(3) 云服务器:存储文件块的实体。存储用户上传的数据块。

在图4的框架下,首先需要将用户的文件或数据在本地进行划分,文件或数据块的大小保持相同,再对生成的块通过加密算法进行加密,最后上传这些块到云服务器中。利用区块链技术,作为用户和云存储服务提供商的交易机制,保存存储数据块的位置索引和一些额外信息到交易中。我们在此架构中选择使用随机文件块放置策略[10],而不是选择多文件副本放置策略[11-12],这不仅能够减少存储的压力,也方便用户可以从云服务器中快速检索文件并减少分布式存储网络的负担。另外,通过梅克尔树验证存储文件的数据完整性时,先利用云服务器上存储的梅克尔树结构生成新的树根root,将其发送到区块链上进行比较,这与文献[13]不同,后者是在区块链上通过执行预设的智能合约生成root再进行对比,前者进一步减少了云服务器与区块链间的通信,从而更加高效。

2.2 上传文件

用户上传文件到云服务器可以分为:

(1) 将文件划分成大小相等的块(不足的用0进行填充),对文件和所有文件块进行加密。

(2) 对加密文件和全部加密文件块根据SHA256算法进行计算得到相应的哈希值。

(3) 利用步骤(2)中的所有加密文件块的哈希值构造梅克尔树。

(4) 存储步骤(3)中的梅克尔树的树根哈希值root到区块链上。

(5) 用户客户端上传所有加密文件块以及公共梅克尔哈希树到云存储服务器中。

(6) 云存储服务器返回所有文件块位置索引URL给用户客户端。

文件上传的流程设计如图5所示。

图5 文件上传流程设计

2.3 创建交易

创建交易就是为了将关于文件的信息(而不是文件本身)永久保存在区块链上,也便于对文件的完整性进行验证。创建的交易中保存的相关信息如图6所示。

图6 区块体中的交易信息

可以看出,存储用户ID、用户IP、文件哈希值、所有文件块的URLs等信息到创建的交易中,而不是将文件块本身存储到区块链中。值得注意的是,每个用户客户端都会拥有区块链中所有交易的副本,并且这些交易信息的字节大小相对于用户客户端的硬盘存储空间来讲完全可以忽略不计,因此这样既可以为用户节约大量的存储空间,也使得攻击者几乎不可能对区块链上的存储信息进行任何的篡改。另一方面,因为只有文件块URLs和哈希值存储在区块链上,攻击者无法从区块链上获得有关存储数据和用户的任何其他信息,从而对数据和用户进行了良好的隐私保护。

2.4 文件完整性验证

文件完整性验证流程设计如图7所示。

图7 完整性验证流程设计

为了实现文件完整性的检测,需要进行以下几个步骤:

(1) 用户客户端发送挑战数si到云服务器(表示对第i文件块进行验证)。

(2) 云服务器对文件块i和si挑战数进行SHA256计算,生成哈希摘要j。

(3) 云服务器根据哈希摘要j,利用服务器上存储的梅克尔树结构生成新的梅克尔树根值root’。

(4) 云服务器发送新的梅克尔树根值root’到区块链上。

(5) 比较root’和区块链上存储的root。若相等,则存储的文件完整;反之,则文件已经被破坏。

(6) 区块链将步骤(5)得到的验证结果返回给用户客户端。

3 实验及分析

为了验证研究方案的可行性及高效性,通过实验模拟了客户端和云服务器,区块链系统由以太坊实现。在实验中,将4 GB大小的文件划分成不同数量的块,且保持每个文件块大小一致。然后,对梅克尔树生成时间和完整性验证时间与文件块数量之间的关系进行测验。相应的实验结果分别对应于图8和图9。

图8 梅克尔树生成时间与文件块数量之间的关系

图9 数据完整性验证时间与文件块数量之间的关系

由图8可以看出,随着对相同文件划分的文件块越来越多,梅克尔树的叶子结点相应增加,梅克尔树的生成时间也增加。从图9可知,文件块数量增加,数据完整性的验证时间也随之增加,但是仍然能在较短时间内完成数据验证,这是可以接受的。

4 结 语

随着云存储的广泛应用,如何确保数据的完整性和隐私性得到了广泛的关注。本文将区块链技术引入到云存储系统中,对传统的云存储架构进行改进,提出一种基于区块链的云存储方案,有效地解决了这两个问题。首先,利用区块链中的梅克尔树属性对存储数据的完整性进行验证,使得验证过程不经过任何可信第三方,解决了数据完整性问题。其次,由于区块链的匿名性,并在数据存储的过程对文件或数据进行加密并进行分块,将所有分块存储到云服务器上,有效保证数据的隐私性。同时,通过文件块的冗余存储也有助于对已破坏的文件或数据进行恢复。

猜你喜欢

哈希结点梅克尔
LEACH 算法应用于矿井无线通信的路由算法研究
哈希值处理 功能全面更易用
Windows哈希值处理不犯难
文件哈希值处理一条龙
巧用哈希数值传递文件