陈 曦,沈苏彬
(1.南京邮电大学 计算机学院,江苏 南京 210046;2.南京邮电大学 通信与网络技术国家工程研究中心,江苏 南京 210046)
基于云计算概念,诞生了一种新型存储方式即云存储,该存储方式将互联网中各种类型的存储设备联合起来协同工作,主要应用于存储海量数据。随着云计算、物联网、人工智能、大数据等信息技术的飞速发展以及传统产业向数字化转型,全球数据呈现几何级增长,刺激了云存储技术的日臻成熟,用户将已有的数据上传云端以实现数据价值最大化,无疑对云存储服务的安全性、可靠性提出了更高的要求。传统云存储模式依赖于云服务提供商的数据中心,没有充分利用用户闲置存储,存在存储资源浪费的问题。
由于比特币的出现,区块链技术成为研究者们的关注焦点。区块链技术作为一种新兴技术和信息基础设施,近两年得到金融、供应链、能源、医疗、物联网等行业的高度重视,是变革互联网的新力量以及构建未来信任互联网的基石。2014年,以太坊第一次将智能合约与区块链完美契合,这里智能合约是指可以运行在区块链上的模块化、可重用、自动执行的一段程序代码,能够实现价值的存储、传递、控制和管理,智能合约使区块链网络可以实现更加复杂的逻辑,区块链潜藏的巨大价值也被业界渐渐地意识到。2016年12月,区块链与其他重大前沿技术及应用一起被写入 “十三五”国家信息化规划中。
该文提出利用区块链技术的去中心化、不可篡改、基于共识的信任等自身技术特点,将区块链融入到去中心化云存储方案中,实现可信云上存储资源的可信分配。首要解决的问题是如何设计基于区块链的去中心化的可信存储资源可信分配的区块结构,然后需要解决的问题是如何使上述区块形成链,最后需要解决的问题是如何基于区块链实现存储资源的分配。该文提出去中心化结构的云上存储资源的可信分配机制,最终将云上存储资源可信分配过程中涉及到信任管理的关键数据记录到区块链这一无法篡改的公共账本,系统参与方可以根据区块链上的数据记录执行相应操作的解决方案,并在以太坊平台上进行了仿真实验验证方案的可行性与正确性。
早期的去中心化云存储服务如Ocean Store和星际文件系统(Inter-Planetary File System,IPFS)等系统是基于对等网络实现的,由个人用户提供存储空间,但是没有很好地解决存储激励问题从而难以让用户长期提供存储他人数据的服务,造成用户的流失。区块链技术的引用弥补了上述去中心化云存储系统的短板,最为杰出的基于区块链的去中心化云存储平台如结合区块链与星际文件系统的Filecoin、开源的Storj和Sia等,旨在利用区块链的资源管理和经济激励,将用户闲置存储设备整合成数据中心,以提供覆盖面更广的云存储服务平台来满足用户的存储空间共享的需求并能够为云存储服务提供方节省建设或扩建数据中心的成本,同时可以获得相应收益。
上述基于区块链的去中心化云存储系统大多是利用了区块链的激励机制来激励用户的存储资源共享行为,比如Storj的激励机制是出租存储空间以获得Storjcoin(SJCX),但对于如何基于区块链自身技术特点来实现去中心化的可信存储资源可信分配,未展开深入研究以及设计。针对该问题,该文设计了一种利用区块链自身特点的、完全去中心化的存储资源可信分配方法。
基于区块链的去中心化存储资源可信分配的解决方案中,根据传统云存储方案以及现有的基于区块链的去中心化云存储项目中的参与方角色分布,完成了该方案的角色划分,分别包括存储资源提供方、存储资源使用方、管理员三种节点角色,其中提供方根据自身资源情况向网络中广播存储资源提供信息,包括身份标识、存储容量、提供时限、时间戳以及数字签名;使用方在网络收集已发布的存储资源信息并合法地对可用资源发出存储资源使用请求信息,具体是由使用方对带有提供方签名的存储资源及其存储资源请求信息再次签名来完成,其中包括请求存储资源的相关信息、使用方身份标识、请求容量、时间戳以及使用方数字签名,并且在该网络中具备一定能力的任一系统参与方节点都可扮演管理员这一角色,具体将在第3章节进行管理员节点的具体工作阐述。该文基于区块链技术本身实现完全去中心化的存储资源可信分配,根据第2、3章节的研究工作,设计了一种去中心化、可信存储资源分配的智能合约,约定一系列系统参与方之间的既定逻辑规则,最终实现去中心化云存储系统中的可信存储资源分配,并可以规避传统云存储的中心化信任问题带来的风险。
在本章节中类比于比特币系统中区块结构、链结构完成了适用于文中去中心化存储资源可信分配解决方案的区块结构以及链结构的设计。
(1)存储资源可信分配块结构。
该文参考比特币系统中的“块”设计,将比特币系统中的“信任操作”替换成文中存储资源使用请求数据,其中每个区块可分为区块头和区块体,其中区块头中包含三组元数据:一组是引用前一区块的哈希值数据,第二组是与竞争记账权有关的难度值、时间戳、随机数,第三组是区块体中Merkle树的根节点。区块体中存储着已通过验证的交易数据,具体是以Merkle树的形式进行存储的,如图1所示。支持基于区块链进行存储资源可信分配的两个重要部分是Merkle根和时间戳。在区块结构设计中,获得记账权的管理节点在打包区块的时候会在区块头中自动写入时间戳,时间戳是区块产生的凭证,对所设计的方法中避免存储资源的过度分配具有重要作用。而Merkle根值作为已被验证通过的交易的唯一标识,任何对链上交易记录甚至是交易记录的存储顺序的篡改都会使得Merkle根值发生改变,由此导致区块内容发生改变,故区块链极大程度地保证了链上数据不可篡改,随着链的不断延长这个保证也愈来愈强,链上数据篡改难度愈来愈大。
图1 基于区块链的去中心化存储资源分配的区块结构
为了完成存储资源的可信分配,重点之一是要完成节点的身份真实性验证,这是保证可信分配的前提。脱离第三方的身份验证,基于区块链如何实现系统参与者的身份真实性验证?采用以太坊的基于非对称加密算法和数字签名技术的身份验证方案,参与方可以自主地通过生成的密钥对加入网络,并拥有一个对应的地址来标识参与者的身份。当提供方发布的存储资源被请求使用时,会涉及到验证资源提供方的身份真实性;当需求方提交使用请求后,需要对需求方进行身份真实性的验证,以判断其是否具备使用资格。存储资源的可信分配的对应关系通过在智能合约中设计的Request结构表示,其中包括所请求存储资源的相关信息(resourceInfo)、存储资源使用方身份标识(customerId)、请求的资源量(capacity)、时间戳(timestamp)、使用方的数字签名(cSig),具体定义如下:
struct Request{
bytes resourceInfo;
bytes customerId;
uint capacity;
uint256 timestamp;
bytes cSig;
}
(2)存储资源可信分配链结构。
基于区块链的存储资源可信分配实际上是如图1所示的交易数据形成区块的上链过程。区块链源于比特币,其中通过随机散列对交易数据加盖时间戳,将它们合并入一个不断延伸的基于随机散列的工作量证明的链条作为交易记录。区块链技术可以令在决策权高度分散的去中心化网络中的各个节点之间达成共识,运用多方共识机制以保证链上的数据一致性,如比特币使用的工作量证明(Proof of Work,PoW)的共识机制,其较为依赖节点CPU算力,而后研究者们陆续提出了一些不过度依赖CPU算力也可达到全网一致的算法,如权益证明(Proof of Stake,PoS)机制、授权股份证明机制(Delegated Proof of Stake,DPoS)以及实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)机制等。以比特币系统中共识机制—工作量证明机制为例,每个区块在区块头中放入一个随机数,搜索一个目标值,直到使得区块被哈希得到的哈希值不大于该目标值,从而成为一个合法区块。存储资源可信分配的对应关系作为“交易”在网络中广播,并接受其他节点验证,每个区块加入到链上必须得到网络参与方的同意验证。工作量证明的本质就是每个节点一票,“大多数”的决策形成最长的链,若网络中大多数节点为诚实节点,那么诚实节点将以最快的速度延长链条,并超越其他竞争链成为主链,如果恶意节点意图篡改链上数据,那么必须完成重新该区块以及链接在其后的全部区块的工作量证明,最终还要超过目前最长的链,攻击代价巨大,篡改难度随着链上区块的生成数的增加而呈指数级上升。工作量证明机制使下一个区块的创建变得困难,从而阻止了攻击者恶意生成区块链,由此基于共识的信任机制保证了区块链的持久稳定。通过以上的分析明确,区块链本质上是一个公用账本,并且可以通过系统参与节点对公共账本中数据的共同维护来实现云存储服务的去中心化信任管理。
该文采用区块链技术保证存储资源的可信分配,由于区块链网络中节点角色的分布,为了将其映射在存储资源分配系统中,进行网络参与方身份划分以及参与方之间的交互行为设计,如图2所示。这里给出在去中心化系统中存储资源分配的定义,去中心化系统中的需求一方自行对满足己需的存储资源发出使用请求。由此,该方案中对于存储资源可信分配定义为对特定存储资源使用请求的验证和审核操作。有关验证和审核操作,经过研究决定要从至少两个方面来进一步考虑。其一是对于存储资源使用请求消息自身的真实性和合法性的验证,需要确定存储资源的可信标识和验证方法;其二是需要判断当前相应的存储资源的状态是否可以满足此次存储资源使用请求,判断依据包括存储资源的分配策略以及指定存储资源的当前状态。在文中的系统设定中假设每个存储资源的容量可以被简单量化为阿拉伯数字表示形式,而存储资源具体的分配策略不是研究的关键所在,如何维护存储资源的可用状态才是研究的重点。下文将给出确定存储资源的可信标识和验证方法的设计工作,主要是采用了非对称加密算法的思想。
图2 网络参与方以及功能模型图
(1)存储资源的可信标识。
存储资源提供方Provider(以下简称P)的身份信息及其提供的存储资源描述性信息,包括提供方地址、存储资源具体信息,例如存储容量以及服务时限等使用私钥进行数字签名得到对所提供的存储资源的唯一标识ResourcePro,如公式1。
ResourcePro=SigSKPro(Hash(PKPro,tl,sc,timestamp))
(1)
其中,PKPro表示P持有的公钥,tl表示P可提供共享服务时限属性,sc表示可提供的存储容量属性,timestamp是P发布存储资源的时间戳。对上述信息进行Hash计算并使用P持有的私钥SKPro进行签名,最终得到已发布的存储资源的唯一标识信息ResourcePro。
(2)存储资源使用请求的可信标识。
存储资源使用方Customer(以下简称C)在该系统上按自己所需获取到已发布的存储资源ResourcePro并请求分配。此时将使用方的信息与存储资源标识进行绑定,即完成C对存储资源ResourcePro发布使用请求,并对绑定信息进行数字签名得到对存储资源使用请求信息的唯一标识RequestCus,如公式2。
RequestCus=SigSKCus(Hash(PKCus,ResourcePro,req,timestamp))
(2)
其中,PKCus为C所持有的公钥,req表示C的存储需求属性,timestamp表示C在网络上提交请求的时间戳。对以上信息进行Hash计算,并使用C持有的私钥SKCus进行数字签名。然后验证存储资源分配是否合法时,提供方P便可以对这个签名标识进行验证,最终实现存储资源的可信分配。
(3)验证存储资源分配的合法性。
在(1)(2)两个流程顺利执行作为存储资源可信分配的前提下,进一步进行合法性验证,包括管理员验证存储资源分配交易以及提供方验证存储资源使用请求的双层验证流程。管理员节点相当于比特币中的“矿工”角色,收集和验证网络中的存储资源请求使用消息,而存储资源请求使用消息则类似比特币中的“交易”信息,其需要针对网络上已发布的存储资源分配消息进行真实性的验证,通过使用方数字签名来验证使用请求内容消息的真实性,以及通过存储资源信息中所包含的提供方的数字签名验证所请求的存储资源的真实性,根据请求使用消息发布的时间戳和所请求存储资源的提供时限,判断该使用请求的合法性,在服务时限之外提供方无法提供存储服务。具体验证过程如公式3~公式5:通过存储资源中包含的PKPro公钥对存储资源提供信息的数字签名ResourcePro进行解密,以验证存储提供方的身份真实性以及其贡献的存储资源的真实性,根据其中包含的存储资源服务时限来判定该存储资源发布是否合法。
σ
=DecPKPro(ResourcePro)(3)
ω
=Hash(PKPro,tl,sc,timestamp)(4)
{true,false}=Verify(σ
,ω
,tl)(5)
公式3中σ
为使用提供方公钥对ResourcePro进行解密操作Dec的结果,ω
为公式1中的Hash值,tl表示提供方的服务时限属性。通过tl来判定其是否仍在服务提供期内,确保提供方可正常提供服务,通过判断σ
与ω
是否相等来验证提供方的身份真实性,最终完成判定该已发布的存储资源的可信。存储资源提供方对于使用方身份真实性的验证也是达成交易的前提,具体验证流程如公式6~公式8所示:通过存储资源使用方的公钥PKCus对RequestCus进行解密,验证请求分配存储资源的用户的身份真实性,根据其存储需求与存储资源的属性对比情况来判定存储分配是否合法。
σ
=DecPKCus(RequestCus)(6)
ω
=Hash(PKCus,ResourcePro,req,timestamp)(7)
{true,false}=Verify(σ
,ω
,tl,sc,req)(8)
其中,σ
为使用使用方公钥对RequestCus进行解密操作的结果,ω
为公式2中的Hash值,tl表示提供方的服务时限属性,sc表示提供方可提供的存储空间容量属性,req是使用方的存储需求属性。通过判定req与tl以及sc的关系,判定其提供的存储资源是否满足使用方的需求,以确保提供方能够完成本次存储服务获得相应收益,通过判断σ
与ω
是否相等来验证使用方的身份真实性,最终完成判定存储空间分配的可信。以工作量证明为例,管理员节点在收集和验证网络中的交易信息的同时,将通过上文验证流程的交易数据组装成区块,并不断尝试区块头中的随机数,直到达到目标值为止。管理节点将该区块广播,其他节点接收并对该区块相互确认区块的有效性,检查区块中所包含的交易数据的合法性。若确认有效后,则视为该区块已被接受,将该区块作为区块链的新区块加入,并开始竞争下一个区块的记账权,把该区块头哈希作为新区块中代表引用关系的父区块哈希值。至此,区块中包含的所有存储资源使用请求信息(交易数据)成功被记录到区块链上,并被认为该存储分配过程是可信的,这一过程意味着存储资源可信分配的实现。
该方法的研究范围为:从系统参与方发布存储资源可用消息和请求使用存储资源消息到管理员收集验证,将合法性验证通过的存储资源使用请求消息作为 “交易”记录上链,最后存储资源提供方根据链上信息对来自存储资源使用方的使用请求进行合法性验证为止,而具体的存储资源共享及其后数据存储的相关操作属于目录共享和其他研究领域,暂不在该方法的研究范围之内。
设计的去中心化存储资源可信分配的智能合约包括存储资源发布阶段和存储资源请求使用阶段,最终完成供需双方之间的可信的存储资源分配。智能合约中规定了存储资源的发布、存储资源请求使用以及双重验证的执行逻辑,并为系统参与方与区块链进行交互提供调用接口以完成系统功能。
(1)智能合约的运行。
为了验证所提出的方法的正确性和可行性,实验基于MacOS 10.15系统与以太坊区块链平台,采用Truffle框架进行智能合约的开发以及采用Ganache-GUI可视化客户端进行后续测试,使用官方推荐的Solidity语言进行智能合约编写并基于NodeJS进行前端开发。合约编写完成后使用truffle compile命令编译合约代码,此时确保Ganache已快速启动了10个节点的默认开发链网络后,使用truffle migrate命令将智能合约部署至区块链,图3表示去中心化、可信存储资源可信分配的智能合约部署成功,并消耗了一定的gas值。
图3 智能合约部署结果
(2)存储资源的分配。
区块链技术可以安全地在供需双方之间记录交易行为,无需第三方信任机构,同时提供了可变的公钥作为身份标识来进行身份真实性的验证,而区块链自身的安全是通过多方共识机制得到保证。已发布的存储资源信息存储到智能合约中,并且系统会生成一个存储资源唯一标识。图4为存储资源信息发布函数的仿真设计,图5为该函数执行后所产生的交易记录在Ganache-GUI下的可视化显示。系统将使用存储资源唯一标识通过合约中的映射关系检索到相应的存储资源信息,并查询判断其剩余存储容量是否满足该请求以及判断使用请求消息发出的时间是否在存储资源的可提供时限内。在文中方法的设计和实验中,假设用户可以以某种方式获取到已发布的存储资源信息,着重关注于针对已获取到的存储资源的使用请求及请求信息的可信存储。图6为存储资源使用请求信息发布函数的仿真设计,图7为该函数执行后所产生的交易记录在Ganache-GUI下的可视化显示,合法的存储资源使用请求通过第2章节中提出的双层验证过程成功记录上链时,提供方将向使用方开放使用权限。若请求者身份信息造假或者完全不存在该存储资源请求使用信息的记录,则无法通过验证,提供方将有权拒绝向请求方提供存储服务。
图4 存储资源信息发布函数
图5 Ganache GUI所显示的发布存储资源交易记录
图6 存储资源使用请求信息发布函数
图7 Ganache GUI所显示的发布存储资源使用请求信息交易记录
上述仿真实验说明了所提出的基于区块链的存储资源分配方法可以以去中心化方式顺利实现可信存储资源的可信分配,确保有关存储资源可信分配的关键信息的可信存储,由此有效防止请求方对存储资源的错用和滥用。
针对大多传统云存储平台的中心化管理可能发生的单点故障及存在的信任问题,提出了一种基于区块链的去中心化存储资源可信分配的区块设计、区块链结构以及基于区块链的去中心化的存储资源可信分配方法,设计一种去中心化的、可信的智能合约在以太坊平台上进行仿真实验,最终验证了所提出的结构设计、方法设计的可行性和正确性,基于区块链自身的特性实现去中心化的存储资源可信分配过程,对存储资源可信分配过程中所涉及的关键信息进行验证及利用区块链账本进行存储,以及保证了系统参与方节点身份的真实性。下一步准备将针对现有共识算法进行深入研究,选择更加适用于去中心化存储资源分配的共识机制,以更加完善所设计的去中心化的存储资源可信分配方法。