一种基于区块链对文件实现分布式存储的方法与流程

文档序号:17322454发布日期:2019-04-05 21:36阅读:247来源:国知局
一种基于区块链对文件实现分布式存储的方法与流程

本发明属于文件存储领域,具体涉及一种基于区块链对文件实现分布式存储的方法。



背景技术:

随着互联网的快速发展,数据文件也迎来了爆发式的增长,用户对文件的存储安全也越来越关心,迎面而来的主要有两个问题,一个是本地存储容量问题,第二个问题是存储在第三方服务器的不安全性,在现有的技术中,文件存储有中心化存储和去中心化存储方案两种,目前中心化存储方案有各种第三方网盘或者云盘,如腾讯微云、华云云盘、百度云盘、google云等等,去中心化存储方案比较出名的有storj、sia。而采用中心化存储方案,这些大型存储商拥有全部的数据副本以及用户信息,非常容易受到各种安全威胁,因此采用去中心化的分布式存储可以改善这种情况,结合密码学相关原理可以保证存储与传输安全性。

随着比特币为代表的数字货币进入人们眼前,人们也开始关注这些数字货币底层核心技术——区块链,区块链是一种分布式账本,区块链中每个节点都能查看这个分布式账本,该账本只能新增不能删除。

因此,在此基础上本文提出了一种基于区块链的分布式文件系统方法,可以解决上述两个问题,将用户的文件数据进行分片,将每一个分片与其副本离散的存储在区块链的存储节点中,若想获得完整的该文件,需要包含该文件组成分片的存储节点达成一致,这对于攻击者而言,所需要的成本远大于购买的成本。

在区块链的分布式文件系统中,文件链中每个矿工为一个存储节点,存储文件的分片数据或者分片数据备份,通过存储链记录者的协调,使得用户可以安心的上传文件,使得文件分散存储,文件的上传与下载为基于数字资产的智能合约交易提供了强有力的支持。



技术实现要素:

针对上述传统的分布式文件系统以中心化方式存储文件而导致的用户不信任,本发明提供了一种基于区块链对文件实现分布式存储的方法。

为实现上述目的,本发明的解决方案为:

一种基于区块链对文件实现分布式存储的方法,实现该方法的系统包括含有中心节点的私有链,和包括多个联盟成员的联盟链;

所述对文件实现分布式存储的方法包括以下步骤:

上传者将存储文件分成多个文件分片,并计算获得存储文件对应的总hash值和文件分片对应的分片hash值,并生成一个包含总hash值、文件分片属性、分片hash值以及上传者属性的文件表格;

上传者与私有链的中心节点签订智能合约,并上传文件表格至中心节点,中心节点将签订智能合约的消息发布到私有链中;

中心节点根据文件表格在联盟链中查找,选择分片存储联盟成员以及分片存储备份节点,根据分片存储成员和备份节点制成文件存储表与私有链签名后,将文件存储表和私有链签名发送至上传者;

上传者根据接收的文件存储表和私有链签名,按照文件存储表将文件分片点对点传输至相应的联盟成员,实现文件的分布式存储。

优选地,对文件字节流进行偏移读取,起始偏移量为0,以67108864个字节为一个读取单元,按照读取单元,将存储文件读取成多个文件分片;

每读取一个文件分片,对文件分片的数据字节流进行md5摘要加密,得到32位16进制的字符串在尾部加上文件分片索引index生成超过32位的字符串,该字符串为分片hash值。

其中,中心节点根据文件表格在联盟链中查找时,针对存储剩余空间大于分片字节的存储节点,按照0.4,0.3,0.3,-0.1,-0.3对存储节点进行排序,取排序靠前的n个存储节点作为分片存储联盟成员和分片存储备份节点,其中,n为分片文件个数*备份数,将分片文件的hash值与存储联盟成员和分片存储备份节点对应关联,生成一个分片文件的hash值与存储地址的文件存储表,文件存储表中的每个对应关联信息对应一个时间戳签名。

当联盟链中存储剩余空间大于分片字节的存储节点的个数小于n时,在存储剩余空间大于分片字节的存储节点中采用循序存储链路。

上传者接受到文件存储表和私有链签名后,首先分析文件分片hash值,根据文件分片hash值后几位获得分片文件的本地位置,从分片文件的本地位置读取分片文件字节流;然后,根据文件存储表中该文件分片hash值对应的存储节点的ip地址,与存储节点建立通信,将文件分片传输至对应的存储节点。

与存储节点建立通信后,上传者先输出分片文件对应的时间戳签名至存储节点,然后再传输分片文件;

存储节点根据存储节点与中心节点建立的公约对时间戳签名进行校验,成功后,接收分片文件,并根据时间戳签名中的hash值对接收的分片文件进行完整性验证,并反馈接收成功确认值上传者。

上传者在收到接收成功确认后,向中心节点发送存储成功消息,中心节点在文件存储表中标记该分片文件已存储,待该分片文件备份成功后,会向区块中添加存储消息,等待下一次共识时刻将存储消息添加区块链中。

中心节点在确定文件存储表中的多有数据全部存储标记完成,向上传者发布记录完毕消息,上传者通过查找联盟链验证消息的准确性,上传者验证完毕后,智能合约执行完毕;

智能合约执行完毕后,中心节点会生成订单,该订单被广播到私有链上,私有链矿工将订单消息记录在区块中,等待下一次共识时刻将订单消息添加区块链中。

文件下载时,用户通过中心节点查找文件分片hash值,通过联盟成员根据文件分片hash值查找该文件分片的存储位置;然后,与存储位置建立通信,从存储位置下载该文件分片,对获得的所有分片进行一致性校验和拼装后,得到完整文件。

与现有技术相比,本发明具有的有益效果为:

该方法将文件分片存储在区块链的矿工文件系统中,区块链账本记录文件组成,分片存储位置,以及文件的上传下载记录,保证了存储文件的安全性,同时结合密码学相关技术可以回避以中心化方式存储文件而导致的用户不信任。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动前提下,还可以根据这些附图获得其他附图。

图1是实施例提供的基于区块链的分布式文件系统架构图;

图2是实施例提供的用户上传至区块链中的示意图;

图3是实施例提供的用户从系统中下载的示意图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例对本发明进行进一步的详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不限定本发明的保护范围。

参见图1~图3,本实施例提供了基于区块链对文件实现分布式存储的方法,实现该方法的系统包括两个私有链和联盟链,其中,私有链主要用于记录文件分片存储位置,其中包括多个私有链节点,其中一个私有链节点作为中心节点,主要用于与上传者建立智能合约,并记录文件分片存储位置,该中心节点还具有向区块链中写区块的功能,其他私有链节点智能读取区块。联盟链主要用于记录文件基本信息以及文件分片信息,包括多个联盟成员,每个联盟成员作为存储节点用于存储分片文件基本信息和文件分片信息,每个联盟成员负责向区块写数据。

利用上述系统对文件实现分布式存储的方法包括文件上传存储和文件下载两个阶段。

针对文件上传存储阶段,包括以下过程:

(1)首先将需要上传的文件以及文件描述属性hash运算,得到文件唯一标识总hash总;

(2)分片与广播:若文件大小大于默认分片大小(64m),本地进行分片运算,对每一个文件分片进行hash运算得到一个标识,将文件描述属性,唯一标识总hash值以及唯一标识文件分片hash封装成信息包,申请一个智能合约订单,合约方为上传者与中心节点,中心节点将智能合约订单在私有链中广播。

具体地,对文件字节流进行偏移读取,起始偏移量为0,长度为67108864个字节,若小于则保存在一个分片中,若超过,下次的起始偏移量为67108864开始,依次读取,直至文件读取完毕;每读完一个分片,先对分片的数据字节流进行md5摘要加密,得到32位16进制的字符串在尾部加上-index生成超过32位的字符串,index为第几个分片,将该hash保存起来,循环保存文件分片hash值。将文件总hash以及文件分片hash与文件描述信息(作者信息)建立智能合约订单,通知中心节点。

(3)中心节点收到智能合约的消息,根据存储路况与文件分片hash,生成一份文件存储表,将其通知智能合约的上传者;

智能合约约定上传者将基本信息发送给中心节点,中心节点(联盟链记录方)将存储节点与对应hash的文件以及token密串发送给上传者,上传者通过密串与文件存储方进行点对点传输,传输完成后,将结果告知中心节点,中心节点进行记录区块,记录完成后,双方同意完成合约,合约完成。

中心节点本地根据存储链信息,拥有一份各文件上传者的表格,表格上由文件上传者的当前带宽,链路情况,文件系统大小,文件分片存储份数,断电次数,针对剩余空间大小大于分片的存储节点,按照0.4,0.3,0.3,-0.1,-0.3的进行排序,取前面分片数*备份数(记为n)个文件存储节点,若文件存储节点数目少于n,则将形成循环链路存储服务器(ababab),将分片hash与对应的服务器关联起来,生成分片hash与服务器对应表,每一行同时有一个有效的时间戳签名,将对应表发送至上传者。

(4)上传者收到文件存储表,将对应的文件分片点对点的与联盟链矿工(也就是被选择的联盟成员)的文件系统进行传输,传输完毕后告知中心节点记录消息。

上传者根据文件分片hash与服务器对应表关系,首先分析文件分片hash根据文件分片hash的最后几位判断分片位置,从文件中分片位置读取分片字节流,根据表中存储服务器的ip地址,建立点对点的通信,采用http2.0传输(支持断点续传),先传输每一个分片的时间戳签名(包含hash值与有效时间),服务器通过验证后,在传输分片字节流。

文件存储服务器接受文件分片签名,通过中心节点的公约进行校验,通过验证后,接受数据,数据接受完毕后,会通过签名中的hash值进行完整性验证,通过后告知上传者,本地将其存储分布式文件系统中,本地会维护一张存储数据位置与hash的表格。

双方确认后,向中心节点发送确认接受该数据的消息,中心节点在该行标记为已存储,待该分片备份也完成时,会向区块中添加该信息,等待下一次共识的时候将其添加区块链中。

(5)双方完成智能合约,通知私有链矿工记录文件基本信息,将其广播同步至其他私有节点。

中心节点若对应表中数据全部标记完成,会向上传者发送文件存储记录完毕消息,上传者通过查找联盟链可验证消息的准确性,双方达成共识后,会确认智能合约的完成。

智能合约完成后,会生成订单在私有链上广播,私有链矿工收到消息会记录进区块中,等待下一次共识向区块链中写数据。

至此,文件上传存储阶段已经完毕。

针对文件下载两个阶段:

用户通过文件链查询文件组成hash,通过存储链查询该组成hash的存储位置,通过点对点的下载,下载完毕通过一致性校验并拼装,可以得到完整的文件。

该方法将文件分片存储在区块链的矿工文件系统中,区块链账本记录文件组成,分片存储位置,以及文件的上传下载记录,保证了存储文件的安全性,同时结合密码学相关技术可以回避以中心化方式存储文件而导致的用户不信任。

以上所述的具体实施方式对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的最优选实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。

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