一种具有抗量子特性的区块链工作量证明方法和系统

文档序号:25949227发布日期:2021-07-20 17:04阅读:171来源:国知局
一种具有抗量子特性的区块链工作量证明方法和系统

本发明涉及区块链的技术领域,更具体地,涉及一种具有抗量子特性的区块链工作量证明方法和系统。



背景技术:

区块链的技术具有巨大创新性和应用场景,它主要解决了在一个公开的、不可信、没有中心节点的分布式网络环境下,如何达成共识的问题。构成区块链技术体系中最重要的一环就是共识算法,即在区块链网络中,如何让不同节点达成共识。区块链目前主要有pow、pos、dpo、pbft和基于vrf的共识算法。工作量证明(pow)是第一个也是区块链中应用最为广泛的共识算法,其在大量算力的支持下,具有稳定、安全、去中心化的优良特性。工作量证明是基于cpu挖矿的,使每个人都有平等的权利获取记账权,从而达到去中心化的目的。然而随着gpu、fpga和asic矿机(如比特大陆的蚂蚁矿机s7、s9等)的出现,挖矿计算能力越来越集中,记账的权利也越来越集中在少数计算能力强大的矿工手中,有违去中心化网络的构想。为了解决算力过于集中的问题,后续提出的工作量证明所基于的哈希算法一般都具有内存困难属性,使得构造相关的asic芯片代价高昂。另外,区块链技术具有的透明性、冗余性和问责性的能力是通过公钥加密和哈希函数提供的。但随着量子计算的飞速发展,基于grover和shor(格罗弗和舒尔)算法对公钥密码学和散列函数构成潜在攻击,目前现有的区块链系统还不具有抗量子计算攻击特性,区块链数据的隐私和安全面临重大威胁。

2020年6月12日公开的中国专利cn111275552a提供了一种基于区块链的数据处理方法、装置、计算机设备和存储介质。该方法包括:接收到继承备选区块的继承默克尔根哈希值,并将继承默克尔根哈希值添加到底层链的底层备选区块的区块体的币基交易数据中;根据币基交易数据生成底层链的底层默克尔根哈希值,并将底层默克尔根哈希值添加到底层备选区块的区块头中;根据底层备选区块的区块头进行算账处理,得到底层备选区块对应的哈希结果值;根据所述哈希结果值和所述继承难度阈值确定目标继承区块并进行广播。采用该方法能够实现区块链的算力继承,中小型区块链项目的算力低于大型区块链项目的算力导致的网络安全问题。但是该发明的数据处理方法基于工作量证明和哈希算法,仍具有内存困难属性,无法同时包含节点的计算量和内存;另外该方法仅能使小型区块链面对大型区块链的算力攻击时,保障自身安全,无法面对量子计算攻击。



技术实现要素:

本发明为克服上述现有区块链工作量证明系统无法同时包含节点的计算量和内存、不具有抗量子计算攻击特性的缺陷,提供一种具有抗量子特性的区块链工作量证明方法和系统,使区块链工作量证明系统同时包含节点的计算量和内存,且具有抗量子计算攻击特性,确保了区块链数据的隐私和安全。

为解决上述技术问题,本发明的技术方案如下:

本发明提供一种具有抗量子特性的区块链工作量证明方法,所述方法包括以下步骤:

s1:收集区块链内历史区块的数据,确定当前区块的上一区块的哈希值,利用当前区块的初始nonce值和上一区块的哈希值生成种子数;

s2:利用种子数生成随机数序列,根据随机数序列确定方程组参数;基于所述方程组参数,生成多元二次方程组;

s3:对多元二次方程组求解,获得解输出(x1,x2,…,xn),其中xn表示多元二次方程的第n个解;

s4:基于多元二次方程组的解输出(x1,x2,…,xn),获得该多元二次方程组的哈希函数hash=hsha256(x1,x2,…,xn),其中hsha256(·)表示sha256运算;

s5:利用难度调整算法,根据区块链历史区块的难度值,确定当前区块需要满足的最小难度值d;

s6:利用最小难度值d计算多元二次方程组的哈希函数hash=hsha256(x1,x2,…,xn)的解sha256(x1,x2,…,xn);

s7:验证哈希函数的解sha256(x1,x2,…,xn)是否满足工作量证明条件;若不满足,令初始nonce值加1作为新的初始nonce值代入步骤s1,重复步骤s1-s6,直到计算出的多元二次方程组的哈希函数的解满足工作量证明条件;若满足,将当前nonce值和解输出(x1,x2,…,xn)打包到当前区块,将当前区块向区块链中其他节点广播;

s8:区块链中其他节点收到广播的当前区块后,验证其包含的当前nonce值和解输出是否满足工作量证明,同时验证交易的合法性;若均满足,则将当前区块作为最新区块链接到区块链,否则拒绝当前区块上链。

优选地,所述s1中,历史区块的数据包括时间戳、nonce值、工作量证明方程组解、版本、merkele树根、难度值、哈希值、交易脚本和交易签名;所述时间戳、nonce值、工作量证明方程组解、版本、merkele树根、难度值和哈希值被记录于区块的区块头,所述交易脚本和交易签名被记录于区块的区块体。

优选地,所述s2中,生成多元二次方程组的具体方法为:

设定变量数为n,方程数为m,生成的随机数序列包含的随机数个数为n2/2×m+n×m+m+m,为使方程组有唯一解,令m=n,则随机数个数为n3/2+(n+2)×n,生成的方程组为:

其中,xi表示第i个需要求解的变量向量,i=1,…,n;xj表示第j个需要求解的变量向量,j=1,…,n;ck、dk为对应的多元二次方程组参数,i=1,…,n,j=1,…,n,k=1,…,m。

优选地,所述s3中,利用基于grobner基的f4、f5求解算法对多元二次方程组求解。

优选地,所述s7中,验证哈希函数的解是否满足工作量证明条件具体方法为:设定当前区块需要满足的最小工作量对应的哈希值powlimit,比较哈希函数的解sha256(x1,x2,…,xn)与powlimit/d的大小,若sha256(x1,x2,…,xn)≤powlimit/d,则sha256(x1,x2,…,xn)满足工作量证明条件;若sha256(x1,x2,…,xn)>powlimit/d,则sha256(x1,x2,…,xn)不满足工作量证明条件。

本发明还提供一种具有抗量子特性的区块链工作量证明系统,所述系统包括数据收集及种子生成单元、方程组生成单元、方程组求解单元、哈希函数生成单元、难度生成求解单元和工作量证明单元;

所述数据收集及种子生成单元,用于收集区块链内历史区块的数据,确定当前区块的上一区块的哈希值,利用当前区块的初始nonce值和上一区块的哈希值生成种子数;

所述方程组生成单元,利用种子数生成随机数序列,根据随机数序列确定方程组参数;基于所述方程组参数,生成多元二次方程组;

所述方程组求解单元,用于对多元二次方程组求解,获得解输出;

所述哈希函数生成单元,基于多元二次方程组的解输出,获得该多元二次方程组的哈希函数;

所述难度生成求解单元,利用难度调整算法,根据区块链历史区块的难度值,确定当前区块需要满足的最小难度值,并利用最小难度值计算多元二次方程组的哈希函数的解;

所述工作量证明单元,用于验证哈希函数的解是否满足工作量证明条件。

优选地,所述数据收集及种子生成单元包括区块数据哈希模块、种子生成模块和nonce模块;

所述区块数据哈希模块用于获取历史区块的数据,并将上一区块的哈希值输送至种子生成模块;

所述nonce模块用于生成初始nonce值,并将初始nonce值输送至种子生成模块;

所述种子生成模块根据上一区块的哈希值和初始nonce值生成种子数,并将种子数输送至方程组生成单元。

优选地,所述数据收集及种子生成单元还包括sha哈希模块;

所述sha哈希模块的作用是保证种子生成模块生成的种子数位数与哈希值的位数一致,保障种子生成模块正常工作。

优选地,所述方程组生成单元包括伪随机数生成模块和方程组构建模块;

所述伪随机数生成模块根据种子数生成方程组各个方程的系数,并将所述系数输送至方程组构建模块;

所述方程组构建模块根据方程组各个方程的系数生成多元二次方程组,并将多元二次方程组输送至方程组求解单元。

优选地,所述所述工作量证明单元验证哈希函数的解是否满足工作量证明条件;满足时将当前区块向其他节点广播,不满足时将当前nonce值返回nonce模块;其他节点验证当前区块包含的当前nonce值和解输出是否满足工作量证明和验证交易的合法性,满足时将当前区块作为最新区块链接到区块链,不满足时拒绝当前区块上链。

与现有技术相比,本发明技术方案的有益效果是:

相较于传统工作量证明通过不断随机生成nonce值,找到一个nonce值,使当前区块头的哈希值小于某个指定的值,完成工作量证明的过程,本发明通过当前区块的初始nonce值和上一区块的哈希值生成种子数,利用种子数生成随机数序列,基于随机数序列确定的方程组参数生成多元二次方程组,对多元二次方程组求解并生成解输出的哈希函数,计算哈希函数的解;通过验证哈希函数的解是否满足工作量证明条件,从而更新初始nonce值,直到完成工作量证明;本发明将构建和求解多元二次方程组融入工作量证明,对多元二次方程组求解的特殊性,使区块链工作量证明系统不仅包含节点的计算量,还包含节点的内存;同时,多元二次方程组的求解过程具有抗量子计算攻击特性,使区块链工作量证明系统也具有抗量子计算攻击特性确保了区块链数据的隐私和安全。

附图说明

图1为实施例1所述的一种具有抗量子特性的区块链工作量证明方法的流程图;

图2为实施例2所述的一种具有抗量子特性的区块链工作量证明系统的示意图。

具体实施方式

附图仅用于示例性说明,不能理解为对本专利的限制;

对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。

下面结合附图和实施例对本发明的技术方案做进一步的说明。

实施例1

本实施例提供一种具有抗量子特性的区块链工作量证明方法,如图1所示,所述方法包括以下步骤:

s1:收集区块链内历史区块的数据,确定当前区块的上一区块的哈希值,利用当前区块的初始nonce值和上一区块的哈希值生成种子数,初始nonce值为0;

s2:利用种子数生成随机数序列,根据随机数序列确定方程组参数;基于所述方程组参数,生成多元二次方程组;

s3:对多元二次方程组求解,获得解输出(x1,x2,…,xn),其中xn表示多元二次方程的第n个解;

s4:基于多元二次方程组的解输出(x1,x2,…,xn),获得该多元二次方程组的哈希函数hash=hsha256(x1,x2,…,xn),其中hsha256(·)表示sha256运算;

s5:利用难度调整算法,根据区块链历史区块的难度值,确定当前区块需要满足的最小难度值d;

s6:利用最小难度值d计算多元二次方程组的哈希函数hash=hsha256(x1,x2,…,xn)的解sha256(x1,x2,…,xn);

s7:验证哈希函数的解sha256(x1,x2,…,xn)是否满足工作量证明条件;若不满足,令初始nonce值加1作为新的初始nonce值代入步骤s1,重复步骤s1-s6,直到计算出的多元二次方程组的哈希函数的解满足工作量证明条件;若满足,将当前nonce值和解输出(x1,x2,…,xn)打包到当前区块,将区块向区块链中其他节点广播;

s8:区块链中其他节点收到广播的区块后,验证其包含的当前nonce值和解输出是否满足工作量证明,同时验证交易的合法性;若均满足,则将当前区块作为最新区块链接到区块链,否则拒绝当前区块上链。

所述s1中,历史区块的数据包括时间戳、nonce值、工作量证明方程组解、版本、merkele树根、难度值、哈希值、交易脚本和交易签名;所述时间戳、nonce值、工作量证明方程组解、版本、merkele树根、难度值和哈希值被记录于区块的区块头,所述交易脚本和交易签名被记录于区块的区块体。

所述s2中,生成多元二次方程组的具体方法为:

设定变量数为n,方程数为m,确定这一组随机方程,需要的随机系数个数为二次项系数+一次项系数+常量系数+等式右边常量,所以生成的随机数序列包含的随机数个数为n2/2×m+n×m+m+m;为使方程组有唯一解,令m=n,则随机数个数为n3/2+(n+2)×n,生成的方程组为:

其中,xi表示第i个需要求解的变量向量,i=1,…,n;xj表示第j个需要求解的变量向量,j=1,…,n;ck、dk为对应的多元二次方程组参数,i=1,…,n,j=1,…,n,k=1,…,m。

所述s3中,利用基于grobner基的f4、f5求解算法对多元二次方程组求解。基于grobner基的f4、f5求解算法是在有限域上求解随机多元多次方程组的最为高效的算法,既具有计算困难性也具有内存困难性。

所述s7中,验证哈希函数的解是否满足工作量证明条件具体方法为:确定当前区块需要满足的最小工作量对应的哈希值powlimit,比较哈希函数的解sha256(x1,x2,…,xn)与powlimit/d的大小,若sha256(x1,x2,…,xn)≤powlimit/d,则sha256(x1,x2,…,xn)满足工作量证明条件;若sha256(x1,x2,…,xn)>powlimit/d,则sha256(x1,x2,…,xn)不满足工作量证明条件。

在具体实施过程中,当发生一笔交易时,用户会通过普通全节点或轻节点生成一笔交易数据,并向区块链网络广播。区块链其他节点在网络中接收到一笔交易后,会验证交易是否已存在本地区块中,如不存在则验证交易合法性,合法交易存放在本地内存池中,并向其邻节点广播此交易。每笔交易数据中包括账户资金的流向和交易合法性验证数据,如果是负责生成区块的矿工节点,还会将一段时间内接收到的多个交易打包成区块;

矿工节点根据上一区块哈希值,以及当前区块的初始nonce值生成种子数seed,seed=sha256(sha256(blocki-1)|nonce),并根据seed生成一组有限域内随机多元二次方程组,其中|表示字符串的连接操作符,nonce初始值为0,并会随着挖矿的过程不断递增,以生成新的随机方程组,生成seed后,使用seed作为输入,通过伪随机数生成器prng,生成一组有限域内随机数。randomi=prng(seed,i)/q,其中i=0,1,…,n,其中q表示有限域f=gf(q)基的大小,需要生成有限域随机数的个数根据方程组的规模决定;

矿工节点使用grobner基求解算法(f4、f5)对多元二次方程组求解,获得解输出(x1,x2,…,xn)=grobnerbasis(f1,…,fn),并基于多元二次方程组的解输出(x1,x2,…,xn),获得该多元二次方程组的哈希函数hash=hsha256(x1,x2,…,xn);

矿工节点接收到一段时间内全网的交易并打包成区块后,根据历史区块的挖矿难度值(di-1,di-4,di-3...),来决定当前区块需要满足的难度值d,其中i为当前区块高度;具体需要多少过去区块的难度值,根据难度调整算法的具体情况来确定,如比特币的挖矿难度值是基于过去2016区块的平均权值确定;但是,当前区块需要满足的难度值d不能小于1,若d小于1,则给d赋值为1;利用最小难度值d计算多元二次方程组的哈希函数hash=hsha256(x1,x2,…,xn)的解sha256(x1,x2,…,xn);

矿工节点验证哈希函数的解是否满足工作量证明条件,若sha256(x1,x2,…,xn)≤powlimit/d,则将当前nonce值和解输出(x1,x2,…,xn)打包到当前区块,将区块向区块链中其他节点广播;若sha256(x1,x2,…,xn)>powlimit/d,令初始nonce值+1,生成新的种子数,进而生成新的有限域随机二次多元方程组,并进一步求解。循环进行上述过程,直到求解出满足工作量证明的解为止;powlimit表示当前区块需要满足的最小工作量对应的哈希值,用一个256位的无符号大整数表示,属于区块链共识的一个参数,不可更改。

网络中其他节点收到矿工节点广播的区块后,根据该区块的哈希值和当前nonce生成种子数,根据种子数生成有限域随机二次多元方程组:

将解输出(x1,x2,…,xn)的值代入上述有限域随机二次多元方程组中验证,如果i=1,…,n时,等式均满足,则进入下一步验证,否则拒绝当前区块;下一步验证交易的合法性,如是否有重复输入,签名的合法性等,若交易均合法,则将当前区块作为最新区块链接到区块链,并对其进行广播,否则,拒绝此区块。

实施例2

本实施例提供一种基于实施例1所述方法的具有抗量子特性的区块链工作量证明系统,如图2所示,所述系统包括数据收集及种子生成单元、方程组生成单元、方程组求解单元、哈希函数生成单元、难度生成求解单元和工作量证明单元;

所述数据收集及种子生成单元,用于收集区块链内历史区块的数据,确定当前区块的上一区块的哈希值,利用当前区块的初始nonce值和上一区块的哈希值生成种子数;

所述方程组生成单元,利用种子数生成随机数序列,根据随机数序列确定方程组参数;基于所述方程组参数,生成多元二次方程组;

所述方程组求解单元,用于对多元二次方程组求解,获得解输出;

所述哈希函数生成单元,基于多元二次方程组的解输出,获得该多元二次方程组的哈希函数;

所述难度生成求解单元,利用难度调整算法,根据区块链历史区块的难度值,确定当前区块需要满足的最小难度值,并利用最小难度值计算多元二次方程组的哈希函数的解;

所述工作量证明单元,用于验证哈希函数的解是否满足工作量证明条件。

所述数据收集及种子生成单元包括区块数据哈希模块、种子生成模块和nonce模块;

所述区块数据哈希模块用于获取历史区块的数据,并将上一区块的哈希值输送至种子生成模块;

所述nonce模块用于生成初始nonce值,并将初始nonce值输送至种子生成模块;

所述种子生成模块根据上一区块的哈希值和初始nonce值生成种子数,并将种子数输送至方程组生成单元。

所述数据收集及种子生成单元还包括sha哈希模块;

所述sha哈希模块的作用是保证种子生成模块生成的种子数位数与哈希值的位数一致,保障种子生成模块正常工作。

所述方程组生成单元包括伪随机数生成模块和方程组构建模块;

所述伪随机数生成模块根据种子数生成方程组各个方程的系数,并将所述系数输送至方程组构建模块;

所述方程组构建模块根据方程组各个方程的系数生成多元二次方程组,并将多元二次方程组输送至方程组求解单元。

所述工作量证明单元验证哈希函数的解是否满足工作量证明条件;满足时将当前区块向其他节点广播,不满足时将当前nonce值返回nonce模块;其他节点验证当前区块包含的当前nonce值和解输出是否满足工作量证明和验证交易的合法性,满足时将当前区块作为最新区块链接到区块链,不满足时拒绝当前区块上链。

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

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