一种基于秘密共享的区块链分布式存储方法与流程

文档序号:16515710发布日期:2019-01-05 09:37阅读:1157来源:国知局
一种基于秘密共享的区块链分布式存储方法与流程

本发明涉及一种基于秘密共享的区块链分布式存储方法,属于数据存储技术领域。



背景技术:

分布式存储技术是将数据分散存储在多个独立的设备上。分布式网络存储系统采用可扩展的系统结构,利用多台存储设备分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存储效率,还易于扩展。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。区块链技术作为一种分布式账本技术,在一定时间交易就会被打包产生一个新的区块,随着一次次的累加,形成的整个区块链数据是巨大的。网络中的节点需要不断存储这些数据,这将占用大量的存储空间。目前最著名的比特币,在2009年被启动之后,尤其是在2013年交易呈指数增长,目前累计的区块数据已经超过140g,加上索引文件已经突破了170g。这也就意味着每个矿工需要存储超过140g的数据,而这些数据还会不断地增加。因此,研究一种多个节点分散存储整个区块链数据,但可以根据需要任意恢复某个区块数据的方法尤为重要。



技术实现要素:

本发明针对区块链中区块数据存储技术的空缺,提出了一种基于秘密共享的区块链分布式存储方法,该方法将区块链中原始区块的数据分散存储在不同的节点上,网络记录这些节点的位置信息并用密钥加密。然后,全网将该加密信息广播给各个节点,让网络中的节点把该位置信息记录到新的区块中。使用pow共识来选出产生新区块的节点,最终,只要根据目前区块中存储的节点的位置信息就可以找到相应的节点来获取区块数据。

为达到以上目的,本发明采用如下技术方案:

一种基于秘密共享的区块链分布式存储方法,具体操作步骤如下:

1)网络按照相同的概率将每个区块的数据分配给网络中的8%-12%的节点,并记录这些节点的位置信息;

2)为了防止恶意节点的攻击,对这些节点的位置信息用密钥s加密,网络将这些加密后的节点的位置信息向全网中的各个节点广播;为了防止敌手破译密钥,运用shamir门限方法来保护密钥s,即将密钥s分割成t个子秘密分配给网络中的节点;

3)网络中的节点根据pow共识机制获得记账权,从而将这些加密后的节点的位置信息记录在区块链中;

4)恢复某一区块数据时,先收集网络中节点的t个子秘密,根据拉格朗日插值公式恢复出密钥s;用密钥s对加密的节点位置信息进行解密,获得存储了该区块数据的节点的位置信息,只要找出任意一个节点就能够下载区块数据。

所述shamir门限方法来保护密钥s,具体步骤如下:

设t,n(t≤n)是正整数,如果在n个节点中每个节点分发一个秘密数si,则任何大于等于t个节点都能由si计算出密钥s,而其中任何小于等于t-1个节点都不能由si计算出密钥s,其中s为加密位置信息的密钥,si为每个节点持有的秘密份额,即子秘密或者密钥s的碎片,t为门限值,设t=5%×n:

选取大素数p,使其比任何可能的密钥s和节点的个数n都大,所有的计算都会执行模的操作,在有限域gf(p)上构造一个t-1次多项式:

f(x)=a0+a1x+a2x2+……+at-1xt-1modp(1)

其中:秘密a0=s是域gf(p)上的一个数,其他系数a1……at-1是从gf(p)上随机选取的t-1个互异的数;

关于密钥分割:对于n个节点p1,p2,……pn,选取n个不同的整数x1<x2<……<xn,带入(1)式,计算出f(xi),那么(xi,f(xi))就是分割出的子秘密,将其分给每个节点pi;

关于密钥重构:如果已知多项式f(x)的t个值(xi,f(xi))(1≤i≤t),级由t个节点提供的子秘密,能够充当t个插值点,利用拉格朗日插值公式(2):

求出多项式f(x),从而求出密钥s=a0=f(0)。

与现有技术相比,本发明具有如下的优点:

1)利用整个区块链中的节点进行分布式存储,即使有部分节点离线,仍然可以恢复出区块数据,增强了系统的容错性。

2)对节点的位置信息进行加密,可以避免恶意节点的攻击。

3)利用shamir门限方案保护密钥,提高了密钥的安全性,防止了敌手破译密钥。

附图说明

图1为本发明基于秘密共享的区块链分布式存储方法的流程图。

图2为本发明实施例中的区块的连接图。

具体实施方式

本发明优选实施例结合附图详述如下:

假定整个区块链中有m个区块,n个节点,每个区块数据以相同的概率被分配给网络中10%的节点,假定节点个数为100个,每个区块的数据都被10个节点存储,全网记录下这些节点的位置信息,并用密钥加密该位置信息,网络将该信息公布给所有节点,让全网节点将该信息记录记录在区块链中。在对位置信息加密时,运用了shamir秘密共享方案,实现全网只要大于5%的节点结合就可以恢复出密钥,那么只要网络中10个节点中的一个正常工作,就可以恢复出该区块的数据。

如图1所示,一种基于秘密共享的区块链分布式存储方法,具体操作步骤如下:

1)网络按照相同的概率将每个区块的数据分配给网络中的10%的节点,并记录这些节点的位置信息;

2)为了防止恶意节点的攻击,对这些节点的位置信息用密钥s加密(假设全网节点数为100,则加密后的位置信息为ek(id1,id2...id10)),网络将这些加密后的节点的位置信息向全网中的各个节点广播;为了防止敌手破译密钥,运用shamir门限方法来保护密钥s,即将密钥s分割成t个子秘密分配给网络中的节点;

3)网络中的节点根据pow共识机制获得ek(id1,id2...id10)的记账权,从而将这些加密后的节点的位置信息记录在区块链中;

4)恢复某一区块数据时,先收集网络中节点的t个子秘密,根据拉格朗日插值公式恢复出密钥s;用密钥s对加密的节点位置信息ek(id1,id2...id10)进行解密,获得存储了该区块数据的节点的位置信息id1,id2...id10,只要找出任意一个节点就能够下载区块数据。

本实施例中,一个完整的区块结构主要包括以下几个部分:神奇数、区块大小、区块头、加密后的节点位置信息和出块者的签名。其中,神奇数为区块间的分隔符,区块大小记录了当前区块的大小。区块头即图2中的区块头an,它由两个区块元数据组成,首先是一组引用父区块哈希值的数据,这组数据用于将该区块与区块链中前一区块相连接。第二组元数据,即难度,时间戳和nonce,与挖矿竞争有关。加密后的节点位置信息记录了被加密的存储该区块原始数据的节点的位置信息。如图2所示,第n个区块中的加密后的节点位置信息用en=ek(id″1,id″2…id″10)表示。在图2中,假定网络中有100个节点,则一个区块的数据同时被10个节点存储,故图中标注了10个节点的id。出块者的签名为sig(h(an,en)),是出块者对区块头an和加密后的位置信息en哈希后的签名,用于标注身份,供其他节点验证。

所述shamir门限方法来保护密钥s,具体步骤如下:

设t,n(t≤n)是正整数,如果在n个节点中每个节点分发一个秘密数si,则任何大于等于t个节点都能由si计算出密钥s,而其中任何小于等于t-1个节点都不能由si计算出密钥s,其中s为加密位置信息的密钥,si为每个节点持有的秘密份额,即子秘密或者密钥s的碎片,t为门限值,设t=5%×n:

选取大素数p,使其比任何可能的密钥s和节点的个数n都大,所有的计算都会执行模的操作,在有限域gf(p)上构造一个t-1次多项式:

f(x)=a0+a1x+a2x2+……+at-1xt-1modp(1)

其中:秘密a0=s是域gf(p)上的一个数,其他系数a1……at-1是从gf(p)上随机选取的t-1个互异的数;

关于密钥分割:对于n个节点p1,p2,……pn,选取n个不同的整数x1<x2<……<xn,带入(1)式,计算出f(xi),那么(xi,f(xi))就是分割出的子秘密,将其分给每个节点pi;

关于密钥重构:如果已知多项式f(x)的t个值(xi,f(xi))(1≤i≤t),级由t个节点提供的子秘密,能够充当t个插值点,利用拉格朗日插值公式(2):

求出多项式f(x),从而求出密钥s=a0=f(0)。只要获得全网n个节点中,任意大于或等于5%个节点的子秘密,就可以恢复出密钥s,从而解密出存储原始区块数据的10%个节点的位置信息;只要这10%个节点中的任意一个在线,就可以获得原始区块数据。

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