一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

结合Fabric和IPFS的去中心化存储系统及其数据存储方法与流程

2021-10-30 01:57:00 来源:中国专利 TAG:
结合fabric和ipfs的去中心化存储系统及其数据存储方法
技术领域
:1.本发明涉及分布式存储
技术领域
:,特别是涉及结合fabric和ipfs的去中心化存储系统及其数据存储方法。
背景技术
::2.随着数据的爆发性增长,存储的安全和效率变得尤为重要,近两年流行的区块链技术为数据存储方式提供了一个新的思路。在国内外学者的探索实践下,将区块链技术应用到数据存储领域,主要包括两种方式:3.(1)数据直接写入区块,区块头包含前一个区块的哈希、随机值、数据哈希等内容,区块体装入要保存的数据,区块得到共识验证之后,可以同步到链上的所有节点。这保证了数据的不可篡改性,但是因为是全冗余备份,如果数据过大会造成存储资源的浪费,同时数据同步速度也会变慢。这种方式仅适用于数据量小且重要的场合,比如信息溯源等场景;4.(2)数据不直接写入区块,而是把文件摘要哈希、文件位置等信息写进区块,真实数据存放在文件系统,通过哈希函数的计算可以验证文件数据的完整性。将区块链与文件存储系统相结合,区块链通过智能合约管理文件,达成一系列关于文件上传下载的操作,这种方式具有普适性,不拘泥于文件的大小和重要性,可以应用于大部分的关于存储方面的场景。5.从上面可以看出,目前的去中心化存储研究关于存储资源的保护通常停留在一层保护上面,即密钥加密,这使资源长期暴露于威胁之下。例如,如果加密密钥被暴露,或者恶意节点没有根据所有者的请求删除它们的碎片,尝试重新构建整个资源,那么资源仍然是脆弱的。而且关于存储文件的可用性方面没有太多的研究,资源在上传到网络之后丢失的概率有多大,无法得到保证。技术实现要素:6.有鉴于此,本发明的发明目的在于提供一种结合fabric和ipfs的去中心化存储系统及其数据存储方法,使用ipfs协议构成一个底层的分布式存储系统,采用hyperledgerfabric作为区块链平台,真实数据存储在ipfs网络中的节点上,存储数据的哈希等信息存储在fabric区块链上,设计数据的加密方案,保障存储数据的安全。7.为此,本发明提供了以下技术方案:8.一方面,本发明提供了一种结合fabric和ipfs的去中心化存储系统,所述系统包括:9.用于注册用户的用户层;10.用于数据文件的上传、下载、加密以及分片的数据处理层;11.用于存储所述数据处理层分片后得到的加密碎片的存储网络层;所述存储网络层的底层采用ipfs网络协议;12.用于通过智能合约与外界交互,将文件的元数据上链的区块链层;所述区块链底层采用fabric网络。13.进一步地,所述数据处理层采用双重加密算法进行数据文件的加密。14.进一步地,所述双重加密算法包括:15.使用高级加密标准加密算法加密数据文件本身,使用公钥加密算法加密所述高级加密标准加密算法的密钥。16.进一步地,所述数据处理层对加密后的数据文件进行分片,包括:17.将加密后的数据文件分割成大小为n的碎片,不足n的部分用0填满。18.进一步地,所述存储网络层存储所述数据处理层分片后得到的加密碎片,包括:19.基于哈希算法计算加入网络的各个节点的身份id;20.对各个加密碎片分别计算哈希值;21.按照kademlia协议,在与加密碎片的哈希值距离最近的节点存储所述加密碎片;加密碎片的哈希值与节点的身份id之间的距离通过异或算法得到。22.进一步地,加入网络的每个节点维护一个k桶,保存与自己节点的身份id相近的节点信息;每个节点构建k桶的过程如下:将所述节点作为基础节点,将与所述基础节点的身份id距离为1的节点归为第一桶;将与所述基础节点的身份id距离为i的节点归为第i桶;如果x≤k,x为与基础节点距离为i的节点数量,则在第i桶里存放x个节点的信息,如果x>k,则只在第i桶里存放k个节点的信息。23.进一步地,fabric网络中,联盟链成员组成至少包括两个组织机构,每个组织结构的节点都由各自的fabricca节点颁发证书;每个组织机构都设置两个节点peer0和peer1,这两个节点主要负责背书和记账;24.排序服务集群包括五个orderer节点,用于对预定时间段内的任务进行排序,同时负责管理通道;25.通道上安装有系统链码cscc和lscc,主要负责通道配置和管理普通链码,通道上还安装有普通链码storage,主要负责存储相关信息的上链和查询。26.进一步地,所述区块链层采取etcdraft作为共识机制。27.又一方面,本发明还提供了一种基于上述结合fabric和ipfs的去中心化存储系统的数据存储方法,所述方法包括:28.获取用户上传的待存储的数据文件;29.将所述待存储的数据文件使用双重加密算法进行加密;30.将加密后的文件按照预定规则进行分片,得到若干个加密碎片;31.将各个加密碎片存储至ipfs网络的节点,所述ipfs网络生成所述待存储的数据文件的文件哈希;32.将文件元数据存储到fabric区块链;所述文件元数据至少包括文件哈希、文件名和文件拥有者。33.进一步地,所述ipfs网络生成所述待存储的数据文件的文件哈希,包括:34.计算各个加密碎片的哈希值;35.将各个加密碎片的哈希值构成默克尔树;36.将所述默克尔树作为所述待存储的数据文件的文件哈希,并保存至本地节点。37.传统分布式存储系统存在大量弊端,数据集中、第三方机构不可信等原因导致存储数据缺乏安全性和隐私性。本发明旨在应用区块链技术本身的特性,结合点对点的分布式存储网络,设计一个去中心化的存储方案,文件哈希存储在区块链上,文件内容存储在ipfs网络中,以保障存储数据的安全。附图说明38.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做以简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。39.图1为本发明实施例中去中心化存储方案运行流程图;40.图2为本发明实施例中加密流程图;41.图3为本发明实施例中数据分片示意图;42.图4为本发明实施例中构建k桶流程图;43.图5为本发明实施例中fabric网络设计图;44.图6为本发明实施例中共识节点状态转换流程图;45.图7为本发明实施例中网络拓扑设计图;46.图8为本发明实施例中测试流程图。具体实施方式47.术语释义:48.ipfs,interplanetaryfilesystem,星际文件系统,是一个分布式的web,点到点超媒体协议,可以让互联网速度更快,更加安全,并且更加开放。49.hyperledgerfabric,是一个模块化的分布式账本解决方案支撑平台,提供高度的保密性、弹性、灵活性与可扩展性。它的目的是支持不同组件的可插入实现,并适应经济系统中存在的复杂性。hyperledgerfabric提出了一个独特的高弹性且可扩展的体系结构,此结构使fabric区别于其他区块链解决方案。在fabric对企业级区块链的未来规划中,它的架构允许被全面审查且开源。50.为了使本
技术领域
:的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。51.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。52.本发明从去中心化存储方案的安全性和可用性角度出发,研究存储数据的分割和节点分配方案。53.下面对本发明实施例中去中心化存储系统的总体设计进行说明:54.本发明设计的结合fabric和ipfs的去中心化存储系统总体分为四个部分,分别为用户层、数据处理层、存储网络层和区块链层。其中,用户层主要是注册用户,用户身份分为普通用户和管理员。系统初始化时生成管理员用户,区块链底层采用联盟链,所以系统有准入制度,只有管理员同意才可以申请注册成为普通用户。数据处理层主要是负责数据的上传、下载、加密、分片等功能。存储网络层的底层采用ipfs网络协议,负责将加入网络的各个节点通过p2p(互联网金融点对点借贷平台)技术连接起来,存储处理过后的数据碎片。区块链层底层采用fabric平台,主要是通过智能合约与外界交互,负责将文件的哈希、文件名、拥有者等元数据上链,用户可以随时在链上查找所存储文件的元数据,进而找回自己的文件。55.该去中心化存储系统的运行流程如图1所示。在用户存储数据时,需要先将待存储的数据文件使用aes(advancedencryptionstandard,高级加密标准) rsa(公钥加密算法)双重加密算法进行加密,然后将加密后的文件按照一定的规则进行分片操作,将文件碎片上传到ipfs网络的节点上,ipfs网络会生成上传文件的哈希,最后将文件的哈希、文件名、拥有者以json(javascriptobjectnotation,javascript对象表示法)文件形式存储到fabric链上。用户下载数据时,需要先获得文件的存储地址,ipfs网络是根据内容寻址的,所以只需找到文件哈希(文件哈希是对文件内容进行哈希计算得来的值)。用户需要先从fabric链上查询数据的哈希值,通过哈希值在ipfs网络上拿到加密数据,最后对加密数据进行解密获得原始数据。56.下面对去中心化存储系统中的主要部分进行具体说明:57.1、数据处理层58.数据处理层主要对需要上传下载的数据在本地进行一个加密和分片的功能,对于数据加密,本发明设计了一种结合rsa和aes加密算法的双重加密策略,以实现最大的安全性。双重加密策略使用aes加密算法加密文件本身,rsa算法加密aes的密钥,采用双重加密方案不仅提高了文件的安全性,在只有一个加密密钥(公钥)的情况下可以为用户生成很多对rsa解密密钥(私钥),不需要与所有用户共享一个密钥。59.参见图2,双重加密方案的加解密过程包括以下步骤:60.(1)加密时,首先随机生成一个16字节的aes密钥x和8个字节的初始向量iv值(用于密钥偏移);61.(2)使用第一步的密钥对原始文件进行aes加密,生成文件的密文和初始向量iv值;62.(3)随机生成一对公私钥,使用公钥对aes密钥x进行rsa加密,生成x的密文;63.(4)将文件密文、初始向量iv值和x的密文一同打包上传到ipfs网络;64.(5)解密时,从ipfs网络下载之前上传的数据块;65.(6)用本地保存好的rsa私钥对x的密文执行解密操作,得到x;66.(7)用得到的aes密钥x和初始向量iv值对文件执行aes加密的逆向过程,得到原始文件。67.文件在加密之后需要进行分片才能上传,分片有很多好处。第一,能够保障文件的安全性,文件被分割成很对小分片分散存储在不同的节点上,就不会有单独的节点拥有完整的文件;第二,能够加快下载速度,在p2p网络中,每个节点既能上传也能下载,下载时可以从不同的节点同时下载不同的分片,比单独从某个节点下载完整的文件要快很多;第三,把大文件进行分割,方便更好管理;第四,分片之后,进行冗余备份更加安全、方便。68.数据分片是对加密之后的数据分割成大小为n(默认为256kb)的碎片,剩下不足n的部分用0填满,然后将这些碎片分散存储到各个节点上,最后将这些碎片取哈希之后的哈希值构成merkle树(默克尔树),如图3所示。图中加密过后的文件密文x一共被分为四个碎片,对这四个数据碎片分别计算哈希值,生成c、d、e、f节点,再把c、d节点组合在一起计算哈希值生成a节点,同理根据e和f生成b节点,再根据上一步骤得到的a、b节点的值生成这个树的根节点哈希值,这个目录结构需要保存到本地节点上,根据ipfs网络的哈希寻址功能可以很容易还原成原始数据,同时根哈希值需要保存到区块链层以便数据完整性的验证。69.2、存储网络层70.存储网络层主要是解决分布式存储中解决数据碎片的分发问题。本发明采用了基于ipfs的底层网络协议,用kademlia协议(p2p重叠网络传输协议)构建了一个分布式的松散哈希表,即dht(distributedhashtable,分布式哈希表)。每个节点加入网络的时候都会基于哈希算法(sha1)获得一个160位的身份id,基于这个身份id去存储这个网络里的文件碎片。kademlia协议采取了“节点id和文件哈希同构”的思想,即对文件碎片也同样用哈希算法生成一个160位的哈希值,称为key,节点的身份id作为value,全网维护一个巨大的文件索引哈希表,这个哈希表的条目就是<key,value>键值对。因为节点id和文件哈希都是160位,每个节点会保存文件哈希和自己节点id距离相近的文件,距离用异或算法求出,相同为0,不同为1。例如,节点id1100与文件哈希0101进行异或运算,结果为1001,也就是这个节点和文件的距离为9。所以,想找到某个文件,只需要找到与此文件哈希相近的节点,这个节点必定存储着要找的这个文件。71.然后通过路由表快速找到对应的节点。每个节点需要维护一个路由表,保存与自己节点id相近的节点信息,这个路由表称之为k桶。以节点id为0000110为例,拆分过程如图4所示,构建k桶的过程如下。72.(1)以0000110为基础节点,如果一个节点id为0000111,前六位都相同,只有最后一位不同,那么这个节点与基础节点的异或值为0000001,,即距离为1,对于基础节点而言,这个节点应该归为“k‑bucket1”。73.(2)同理,如果一个节点id前五位与基础节点相同,从倒数第二位开始不同,可知这样的节点只有两个,即0000100和0000101,这两个节点与基础节点的距离分别为2和3,对于基础节点而言,这两个节点归为“k‑bucket2”。74.(3)如果一个节点id与基础节点从倒数第i位开始不同,前面相同,那么这样的节点只有2i‑1个,这些节点与基础节点的距离范围为[2i‑1,2i],对于基础节点而言,这些节点就被归为“k‑bucketi”。[0075]在第(3)步的i值上升的时候,相对应的与基础节点距离为i的节点数量x会越来越多,k桶的意思就是如果x≤k,在“bucketi”里存放n个节点的信息,如果x>k,只在“bucketi”里存放k个节点的信息(k的取值一般为8)。在网络中的节点构建k桶之后,对于n个节点的网络查找文件的速度为logn。例如,对于id值为00000110的a节点,查找哈希为00010000的文件,只需要找到id值为00010000的b节点或者相近节点,a节点和b节点的异或距离为00010110,距离范围在[24,25],所以节点b可能会在节点a的“k‑bucket5”中。节点a查看自己的“k‑bucket5”中有没有b节点,如果存在b节点,结束寻找,否则在a节点的“k‑bucket5”里随机找一个节点c,c节点与b节点的id第五位肯定相同,所以节点c与节点b的异或距离肯定会小于24,距离缩短了一半。节点c重复节点a的操作,直到找到节点b为止。[0076]3、区块链层[0077]本发明实施例中采用fabric平台作为区块链底层。fabric网络设计主要包括节点设计、fabricca管理服务和智能合约设计。在分布式网络中,联盟链成员组成至少有两个组织机构org1和org2,每个组织的节点都由各自的fabricca节点颁发证书,同一个组织机构的节点的身份证书具有相似性。每个组织都设置两个节点peer0和peer1,因为peer节点较少,所以这两个节点会担任背书、记账等多种身份,除此之外,有五个orderer节点组成一个排序服务集群,对于一段时间内的任务进行排序,同时负责管理通道mychannel,包括交易和区块等。链码安装在mychannel上,系统链码包括cscc、lscc等,主要负责通道配置和管理普通链码等。storage是在mychannel上安装的普通链码,主要负责存储相关信息的上链、查询等功能。fabric网络设计图如图5所示。[0078]本发明实施例的场景中,节点加入网络都会生成身份证书,节点间具有一定的信任,在考虑共识算法的时候,可以先不考虑恶意节点的存在,只考虑节点故障或不在线的情况。fabric的共识模块是一个可插拔的设计,目前有solo、kafka和etcdraft三种共识算法可供选择。solo是单节点产生区块,是中心化的算法。kafka是对交易排序,然后推送给orderer节点,交易排序依赖于zookeeper集群,是半中心化算法。etcdraft底层基于raft算法来保证数据的强一致性,orderer节点之间直接连接,不依赖于其他集群。每个组织的orderer节点都有机会参与排序服务,是接近于去中心化的算法。因此本发明实施例中采取etcdraft作为区块链层的共识机制。[0079]本发明实施例设计的fabric网络中,参与共识的节点状态转换流程如图6所示。在raft算法里,一个任期为一个单位。每个任期都会在所有的orderer节点中选出一个领导节点(用l表示),其余为跟随节点(用f表示)。l负责处理来自客户端的交易指令,f只需和l保持数据一致。如果l因为网络原因发生故障,则通过投票重新选举领导节点,进入了一个新的任期。其余跟随者即使某段时间退出了网络,在重新进入网络时可以从当前任期的l那里同步数据,fabric网络具备容错性。[0080]因为raft算法基于选举,所以orderer节点的个数必须为奇数n,每个任期至少得到n/2 1个orderer节点投票的节点当选为领导节点。本方案设计了5个orderer节点,可以容许的故障节点为2个,网络拓扑设计如下图7所示。[0081]orderer节点通过broadcastrpc(广播rpc(remoteprocedurecallprotocol,远程过程调用协议))接收如添加用户、添加文件元数据等交易,如果当前的orderer节点不是领导节点,则通过submitrrc(提交rpc)传递到通道内当前任期的领导节点。领导者节点收到一半以上节点的消息确认后就会将该日志序列提交到自己的状态机上,所有的跟随者同时会更新自己的状态机,与领导者保持一致。领导者节点创建候选区块,并且请求跟随者节点执行日志序列,领导者节点提交候选区块,并广播给其他节点。[0082]本发明的技术方案在vmvare虚拟机上实现的,操作系统是ubuntu18.04。具体的软硬件运行环境及配置如表1所示。[0083]表1[0084][0085][0086]fabric网络的性能决定了方案的存储交易性能,因此在对存储方案的性能指标进行测试之前,应先对设计的fabric集群网络的交易吞吐量进行测试。本发明实施例中使用测试工具caliper,caliper是最常用的区块链网络测试工具,可以对区块链网络的交易吞吐量、交易吞吐量(tps)、交易延迟等性能进行测试。测试的流程总共分为四步,如图8所示。[0087]为避免不必要因素的影响,压力测试设计为16轮,第一到第八轮为用户创建测试,每轮测试1000次交易,目的是测试区块链网络的写入性能。交易的的写入速度以初始值50tps,间隔50tps设置梯度。第九到第十六轮为用户查询测试,每轮测试5000次,目的是测试区块链网络的读取性能。交易的的写入速度以初始值100tps,间隔100tps设置梯度。[0088]caliper测试工具可以检测网络的交易成功率、交易延迟时间(最大延迟时间、最小延迟时间和平均值)、交易吞吐量,本次测试结果如下表所示。从结果图中可以观察到,本发明实施例中的fabric网络一直稳定运行,其交易成功率为100%,丢失交易的情形没有出现。从表2中也可以看到,随着交易写入速度的提高,fabric网络的吞吐量会受到影响。[0089]表2[0090][0091][0092]加入网络的用户可以上传文件到ipfs网络,文件的元数据信息上传到fabric链上,上传成功会返回文件的哈希给用户。[0093]用户可以下载自己上传过的文件,只需要输入自己的用户名和文件名,系统会自动去fabric链上查询文件的哈希,然后通过文件哈希从ipfs网络下载文件到本地,完成下载功能。[0094]在本发明所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。[0095]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0096]另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。[0097]所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read‑onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。[0098]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜