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

基于小规模委员会的区块链出块方法及PoS协议确认方法

2022-06-11 09:23:43 来源:中国专利 TAG:

基于小规模委员会的区块链出块方法及pos协议确认方法
技术领域
1.本发明属于计算机技术与信息安全技术领域,涉及一种基于小规模委员会的区块链出块方法及pos协议确认方法。


背景技术:

2.股权证明(proof of stake,pos)是区块链协议实现共识的一种机制。与工作量证明(proof of work)相比,pos机制更节约能源,它通过参与者持有的股权随机的选举委员会和领导者节点进行共识。然而对于一个领导者节点来说,其提出一个新的区块的代价也相应的变小了,这使得pos区块链常常面临着多分岔、确认慢的问题。除此之外,pos机制还普遍面临着平衡攻击等,因此这使得pos机制难以得到广泛的推广。
3.为加速pos区块链的确认速度,在减少通信量和轮数方面,pos机制可以采用一个两轮的小规模委员会使区块链上的区块得到快速的确认,然而这种基于小委员会的pos机制面临着两个短板:一,其不安全的出块机制会使得来自委员会成员的投票均等的分布在多条链上,即使在同步网络环境下,敌手仍然可以通过这种方式令链上的区块永久不被确认;二,pos区块链需要保证有足够多的诚实节点已经做出决定,因此基于小规模委员会的pos机制往往需要运行多轮并平均每一轮都达到2/3的票数阈值才可以得到确认,在半同步网络环境下,这可能导致参与者长时间无法达到确认的条件,从而使得区块链的效率大大降低。


技术实现要素:

4.本发明公开了一种基于小规模委员会的区块链出块方法及pos协议确认方法。一方面,本发明利用集中投票的出块方法解决pos区块链协议平衡攻击问题,具体地,集中投票的广播方法使诚实的参与者持续的收集来自网络的投票消息,保证敌手无法利用保留投票进行平衡攻击,与此同时,每个参与者都具有同样的权力,这避免了出块的权力过多的集中在被腐化的领导者节点手中。另一方面,本发明可工作在半同步网络环境下,采用一种类似于拜占庭共识(byzantine agreement)的三阶段广播进行构造。采用周期性的进行广播协议,该广播相对比拜占庭共识可不具备终止性(termination),可以令诚实的参与者在不被阻塞的情况下尽可能的获取其他诚实方对链的选择。具体地,第一阶段所有参与者之间交换各自对链的选择,第二阶段参与者根据第一阶段收到的选择进行投票并聚合形成证书,第三阶段参与者针对证书进行投票,当诚实的参与者收到足够多的第三阶段投票后,即可立即确认包含在证书内的符合要求的区块及其所在的链。
5.为实现上述目的,本发明采用如下技术方案:
6.一种基于小规模委员会的区块链出块方法,其步骤包括:
7.参与者节点生成公私钥对,并广播公钥;
8.进入第i轮时,各委员会节点基于私钥生成主链中特定区块的投票,并广播,以使各参与者节点基于相应的委员会节点公钥,获取所述投票中的合法投票,并将所述合法投
票存储于本地的投票列表,其中委员会节点基于所述参与者节点选举产生;
9.领导者节点检查本地的投票列表,基于未与主链冲突的投票生成区块b,并广播,其中领导者节点通过所述委员会节点选举产生;
10.各参与者节点通过检查所述区块b是否为有效区块,得到更新后的当前视图,以获取各参与者节点的第i轮出块结果。
11.进一步地,所述各委员会节点基于私钥生成主链中特定区块的投票,包括:
12.委员会节点获取当前视图并进行选链;
13.基于选链结果,得到特定区块;
14.使用所述私钥对所述特定区块的相关信息m进行签名,生成签名σ
vote

15.根据特定区块、投票人股权份额、相关信息m与签名σ
vote
,生成投票。
16.进一步地,所述各参与者节点基于相应的委员会节点公钥,获取所述投票中的合法投票,包括:
17.基于所述签名σ
vote
与所述签名σ
vote
的相应公钥,计算相关消息m


18.若所述相关信息m与相关消息m

一致,则该投票是合法投票。
19.进一步地,所述领导者节点检查本地的投票列表,基于未与主链冲突的投票生成区块b,包括:
20.领导者节点获取当前视图并进行选链,选链后得到主链,并输出该当前主链上尾部的最后一个区块b-1

21.对于所述投票列表,将不包含在该当前视图下的其他区块中的所述投票v,作为投票v


22.将与所述当前主链兼容的投票v

,作为投票v


23.若所述投票v

与所述更新后投票列表中的任一投票v不存在签名者冲突,则将该投票v

加入集合v;
24.生成一区块随机数randi;
25.基于轮数i、区块随机数randi、区块b-1
、投票集合v和交易信息集合txs,生成签名σ
block

26.基于签名σ
block
、轮数i、区块随机数randi、区块b-1
、集合v、交易信息集合txs和领导者节点的公钥pk
leader
,生成区块b。
27.进一步地,广播所述区块b之后,领导者节点在本地投票列表中删除所述集合v中包含的投票。
28.进一步地,所述各参与者节点通过检查所述区块b是否为有效区块,得到更新后的当前视图,包括:
29.分别对所述区块b进行签名检查、区块重复检查及区块投票重用检查;
30.对检查通过的所述区块b,添加在所述当前视图下,并拒绝检查未过的所述区块b。
31.一种基于小规模委员会的pos协议确认方法,其步骤包括:
32.第i轮结束后,各参与者节点确认第i轮之前未确认的区块和通过上述任一方法得到的第i轮出块结果;
33.若i=es*c,则对所述区块链出块结果进行辅助确认,得到相应参与者节点的第i轮最终证书cert
final
,其中c为任意整数,es为两次辅助确认之间时间段的尺寸;
34.若i≠es*c,则重新选举委员会节点,并对得到的第i轮出块结果及第i轮之前未确认的出块结果进行pos协议确认。
35.进一步地,所述确认第i轮之前未确认的区块,包括:
36.获取轮数i

,并计算参数k=i-i

,其中i

<i,轮数i

为得到最新确认区块b的轮数;
37.以区块b为根迭代计算子树的权重,得到一整数ω;
38.若ω≥2kn/3,则计算当前目标区块被更改的概率p,其中n为委员会节点的数量;
39.当所述概率p小于参与者节点定义的安全系数p
*
时,则确认第i

轮出块结果。
40.进一步地,所述辅助确认,包括:
41.获取当前视图,根据当前视图广播关于主链选择的区块提案;
42.收集其他参与者节点的区块提案,聚合区块提案集合中所包含的签名,形成临时证书后广播,其中j为参与者节点的编号;
43.验证参与者节点j

广播的临时证书并对临时证书进行临时证书投票;
44.收集临时证书投票于投票集合v

中,聚合投票集合v

中所包含的签名,形成最终证书后广播;
45.其他参与者节点收到最终证书,并对最终证书中包含的第i轮出块结果及第i轮之前未确认的出块结果进行确认。
46.一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一所述方法。
47.与现有技术相比,本发明至少具有以下优点:
48.1、在pos的区块链协议中,区块发布者在当前时间段slot处发布区块时,利用上述集中投票的方法进行稳定的两阶段共识,当执行了一定轮数时,所有参与者节点进入辅助确认阶段,选举新的委员会针对链的选择进行共识,保证了参与者尽可能确认更多的区块;
49.2、对于epoch内的区块确认,可使用概率检验等小规模委员会的确认方法,保证了敌手以充分大的概率无法更改区块链的历史;
50.3、对于epoch间的区块确认,当网络状况良好时,可使用概率检验等基于小规模委员会的pos区块链协议的确认方法,当网络状况存在较大延迟时,可以使用辅助确认,通过证书中相应的块达成确认。
51.4、本发明基于laksa协议、集中投票的出块机制以及辅助确认工具,抵抗平衡攻击机制,提供一个高效的确认区块的机制,在网络状况较差的情况下仍可以高效确认区块,具体地包括以下两个重要的方面:
52.1)集中投票的出块机制的构造。本发明由对投票和区块进行进一步检查的两个算法构成,通过锁票和每个人都可以根据自己的视图提出区块,从而避免敌手无法进行平衡攻击。
53.2)辅助确认工具的构造及高效确认的pos协议的构造。本发明由稳定共识vote-propose与epoch辅助确认两部分组成,其安全性基于vote-propose和epoch辅助确认两阶段的安全性。该协议方案具备以下性质:各个参与者在出块阶段拥有的权力是均等的;在半同步网络下可利用短暂的网络同步实现区块的确认;当网络由半同步转为同步时可以快速
实现共识。
附图说明
54.图1是本发明的流程图。
具体实施方式
55.为使本发明的上述特征和优点能更明显易懂,下面通过具体实施例,对本发明的技术方案做进一步说明。
56.一、符号说明
57.n表示委员会规模,i为共识所处轮数,es代表epoch的尺寸,p*代表由客户端自主定义的安全系数,a| |b表示两个字符串a和b的级联。函数h(x)代表抗碰撞的散列函数,{0,1}1→
{0,1}n,所述epoch是两次辅助确认之间的时间段,即每经过一个epoch的时间段,所有参与者节点就运行一次辅助确认。
58.二、椭圆曲线签名
59.本发明使用椭圆曲线签名对通信中的区块和投票进行签名,参与者在参与到共识之前,通过相应算法获得一对公私钥对,并使用该公私钥对参与到共识当中:
60.·
gen(seed):输入一个随机数作为种子,返回一对ecdsa公私钥对。
61.·
sign
sk
(m):输入消息m和私钥sk,返回一个签名。
62.·
verify(pk,σ,m):输入公钥pk、签名的消息m和待验证的签名σ,若签名σ和消息m对应,
63.则返回true,否则,则返回false。
64.三、聚合签名
65.本发明使用聚合签名算法,减少参与者验证签名的次数,节约硬件开销。
66.·
aggregate_sign(sigset):输入待聚合的签名集合sigset,输出对集合内所有签名的聚合签名。
67.·
aggregate_verify(∑,sig,pk):输入一个聚合签名sig、签名集合∑和公钥集合pk,若sig与∑正确对应则输出true,否则输出false。
68.四、集中投票的出块方法
69.设某参与者视图为view,其拥有一对公私钥对pk、sk,集中投票出块方法主要包含领导者选举算法leader_select、投票检查算法check_include、check_target和check_conf以及区块检查算法check_repeat和chech_reuse。
70.·
leader_select(pk,r):输入参与者的公钥pk和一个随机数rand,输出一个整数。
71.·
check_include(view,v):输入参与者的视图view和投票v,若该投票没有被其他区块包含则输出true,否则返回false。
72.·
check_target(view,v):输入参与者的视图view和投票v,若投票的目标与当前主链兼容,则输出true,否则返回false。
73.·
check_conf(view,v,list):输入投票v、参与者的视图view和投票列表list,若list当中已存在一个由同一个发送方签发的投票则返回true,否则返回false。
74.·
check_repeat(view,b):输入当前视图和收到的区块b,若视图内b存在重复的区块则输出true,否则输出false。
75.·
check_reuse(view,b):输入当前视图和收到的区块b,若视图内该b中的投票已在之前的块中出现,则输出true,否则输出false。
76.五、集中投票出块方法用于小规模委员会的高效确认的pos协议中
77.在本发明中,基于小规模委员会的高效确认的pos协议基于集中投票出块的方法和laksa协议。方案描述过程中,假设系统内的参与者节点n是保持不变的,每一个参与者预先设定一个其自身可接受的危险系数p*。
78.高效确认的pos协议主要由参与者投票vote、集中投票的领导者出块propose和epoch辅助确认epoch_finalize算法组成,除此之外,该协议包含随机数生成算法random_beacon、子树权重算法treestake以及确认概率算法hypergeomprob。
79.·
vote(view):输入一个视图,参与者对区块进行投票,输出为空;
80.·
propose(view):输入一个视图,领导者节点提出一个新的区块,返回为空;
81.·
random_beacon(i):输入一个整数i,输出一个随机数rand;
82.·
tree_weight(b):输入一个区块b,算法计算以b为根迭代计算子树的权重,输出一个整数值;
83.·
输入系统内所有节点的数量n、敌手所占比例α、委员会规模n、平均每一轮票数s,算法计算当前目标区块被更改的概率,输出一个小于1的浮点数;
84.·
epoch_finalize(view):输入当前视图,参与者进行辅助确认。
85.本发明的pos协议确认系统,包括若干客户端和服务器,该客户端向网络中输入交易,服务器用作对输入网络的交易进行共识,该服务器使用本发明中的区块链出块方法及上述各指令,并假设委员会规模为n,委员会中恶意节点的数量为f。pos协议确认方法,如图1所示,包括:参与系统的节点注册一对与自己身份绑定的公私钥对(

),通过选举成为具有投票权的委员会节点(

),成为委员会节点后,获取当前视图(

)后选择权重最大的链的链尾进行投票(

),投票后委员会节点进行领导者选举(

,此时node1被选作领导者节点),node1提出自己的新区块并向所有节点进行广播(

),广播完成后每一个节点尝试确认区块(

)与辅助确认(

),结束一轮后,进入下一轮,重新选举委员会节点(

)。
86.在pos的区块链协议中,参与者初始化区块链后,在同一时间进入第0轮,并以相同的时钟运行协议。在参与者进入投票阶段后,推选的委员会成员将对其主链上的最后一个块进行投票。当结束投票阶段后,由委员会成员选举的领导者节点会将其视图下所有未被包含且不与其主链冲突的投票包含在其新的区块中,并与其他信息一同广播给网络中的其他节点,利用该集中投票的方法,投票被锁在区块中的同时,每个参与者都具有同等增加主链权重的权力。在一个epoch内,参与者可依据概率检验进行确认,跨epoch的确认则可以通过epoch辅助确认形成的证书来达成,这可以在一定程度上增加pos区块链协议的效率。
87.具体来说,本发明的pos协议确认方法,包括以下步骤:
88.步骤1:参与者节点生成公私钥对。
89.本发明使用椭圆曲线签名对通信中的区块和投票进行签名,参与者节点在参与到共识之前,通过相应算法获得一对公私钥对,并使用该公私钥对参与到共识当中。
90.在一示例中,输入一个随机数seed
key
作为种子,返回一对ecdsa公私钥对。
91.步骤2:委员会节点选举并投票。
92.2.1:计时器设置。
93.进入i轮时,设置投票计时器t
vote
=δ;
94.2.2:委员会节点选举。
95.本发明使用随机数生成算法random_beacon生成随机数r,并使用委员会选举算法voter_select进行委员会成员选举。
96.进入第i轮时,参与者节点调用该随机数生成算法,输入当前轮数i,生成随机数r

random_beacon(i),所有参与者节点使用当前拥有的公钥pk运行s

voter_select(pk,r)进行随机抽样,选举委员会节点。即输入参与者的公钥pk和一个随机数r,若当前节点被选为委员会节点,则输出一个大于0的整数。
97.2.3:委员会投票
98.若参与者节点被选举为委员会节点,则基于获取的当前视图进行选链,得到特定区块,并针对该特定区块进行投票,其中该投票由包含区块、投票人股权份额及其他相关信息的消息m和针对消息m的签名σ
vote
组成,其中签名σ
vote
基于消息m与私钥sk生成。
99.当t
vote
=0,停止投票。
100.步骤3:所有参与者节点持续收集来自网络的投票并将合法的投票存储于投票列表中。
101.在本步骤中,各参与者节点通过下述步骤,获取合法的投票,该步骤持续执行,直至停止运行共识并退出区块链系统:
102.3.1:持续收集来自网络中收集投票;
103.3.2:输入公钥pk、签名的消息m和签名σ
vote
,若签名σ
vote
和消息m对应,则该投票为合法投票,否则,该投票为非法投票,包括:
104.1)根据公钥pk与签名σ
vote
,得到消息m


105.2)若m

=m,则改投票为合法投票,否则为非法投票
106.步骤4:领导者节点选举。
107.所有委员会节点使用领导者节点选举算法leader_select选举领导者,委员会节点使用步骤3生成的随机数r和当前拥有的公钥pk运行s

leader_select(pk,r)进行随机抽样,选举领导者节点。即输入参与者的公钥pk和一个随机数r,若当前节点被选为领导者节点,则输出一个大于0的整数。
108.步骤5:领导者节点检查其投票列表中的投票是否与当前主链冲突,将符合要求的投票包含在其区块中,广播至网络中的其他节点,并将该投票自列表中删除。
109.设置计时器t
propose
=δ,chain为当前时刻节点视图view下的链,其中,view由所有从网络中收到的消息组成,chain则由这些消息中所有的区块消息组成。领导者节点检查其投票列表中的投票是否与当前主链兼容且未被其他区块包含或与其他投票重复,将符合要求的投票随交易、公钥等信息包含在其区块中,广播至网络中的其他节点,并把这些投票在自己的列表中删除,并广播其提出的新区块,直至t
propose
=0。具体包括:
110.5.1:领导者节点使用主链选取算法chain_select选择其所认定的主链并输出该主链上尾部的最后一个区块b-1
,即运行b-1

chain_select(chain)选出其视图下主链上的
尾部区块;
111.5.2:取存储在投票列表中的投票v,并令签名正确的票组成的投票集合为v,运行检查算法check_include(view,v),检查v是否已被包含在当前视图下的其他区块中,是则忽略该投票继续检查下一个投票,否则继续运行下一步检查;运行check_target(view,v)检查v的投票对象是否为b-1
,是则运行下一步检查,否则忽略该投票继续检查下一个投票;运行check_conf(view,v,list)检查v中所包含的签名者是否存在冲突的票,其中view为参与者的视图,是则忽略该投票继续检查下一个投票,否则将该投票加入到集合v中;
112.5.3:运行randi←
random()得到区块随机数,计算签名σ
block
=sign
sk
(i||randi||h(b-1
)||v||txs),其中txs为节点从内存池中获取的交易信息集合,令区块b=(i,randi,h(b-1
),v,txs,pk
leader
,σ
block
),其中pk
leader
为该领导者节点的公钥,将b广播给网络中的其他参与者;
113.5.4:将符合要求的投票自投票列表中删除。
114.步骤6:参与者节点检查收到的区块是否未有效区块,若是,则添加在当前视图下,以获取各参与者节点的第i轮出块结果,否则,则拒绝该区块。
115.6.1:首先检查收到的区块中,若verify(pk
leader
,σ
block
,b)=false,则拒绝该区块,其中pk
leader
为包含在区块中的、提出该区块的领导者节点的公钥,否则继续进行以下步骤;
116.6.2:执行区块检查重复算法check_repeat(view,b),若其返回false,则拒绝该区块,否则继续进行以下步骤;
117.6.3:执行区块投票重用检查算法check_reuse(view,b),若返回false,则拒绝该区块。
118.步骤7:确认区块链出块结果。
119.在本步骤中,参与者对区块链的出块结果进行确认,可每次检查多个区块,若符合则全部确认,具体包括:
120.7.1:首先基于节点当前所收到的所有区块及投票消息得到最新确认的区块b的轮数i

(即上一次确认区块的轮数),当前轮数为i(即算法当前运行轮数),i>i

,令k=i-i

121.7.2:执行ω

tree_weight(b),tree_weight(b)为输入一个区块b,算法计算以b为根迭代计算子树的权重,输出一个整数值ω;
122.7.3:若ω<2kn/3,则结束;否则运行确认概率算法计算当前目标区块被更改的概率p,若p<p
*
,则确认区块b,其中n表示委员会规模,n表示输入系统内所有节点的数量、α表示敌手所占比例,s表示平均每一轮票数,p
*
代表由客户端自主定义的安全系数。
123.步骤8:对区块链出块结果进行辅助确认。
124.若i=es*c,其中c为任意整数,则执行辅助确认epoch_finalize(view),若收到有效的最终证书cert
final
,则确认cert
final
当中包含提案的第n-f个区块及其对应的链;若r≠es*c,则重新回到步骤2。
125.优选地,步骤8中的辅助确认epoch_finalize(view)具体包括:
126.1)首先设置计时t1=δ1,运行main

chain_select(view)得到委员会节点的主链,并将主链尾端的块作为其最新认可的区块b,且当前所处epoch为e(e>0),公私钥分别为sk、pk,计算σ
propose
=sign
sk
(b,e,pk,propose),其中,propose为提案阶段的字符串标识,
令区块提案为prop=(b,e,pk,propose,σ
propose
),广播prop;
127.2)收集来自其他参与者的propose消息,并对其进行验证,直至t1=0,若收到不少于n-f个兼容的propose消息,令该集合为propj,令pkj={pk|p∈prop},计算聚合签名σ
temp,j
=aggregate_sign(prop),令临时证书=aggregate_sign(prop),令临时证书广播其中agregate_sign()为聚合签名算法,temp为该消息是临时证书消息的字符串标识,j为参与者节点的编号;
128.3)设置t2=δ2,若收到一个聚合证书执行聚合签名验证若返回true,则转发直至t2=0。若已收到n-f个兼容的令该集合为ctmpj,选取集合ctmpj中包含的第n-f个区块轮数最高的临时证书作为投票目标c,计算σ
tempvote
=sign
sk
(c,e,pk),令临时证书投票v=(c,e,pk,σ
tempvote
),广播v;
129.4)直至t2=0,设置t3=δ3,若收到n-f个合法的投票消息,该集合为v

,令c

为该集合所包含的证书中第n-f个区块轮数最高的证书,pk为所有投票中所包含的公钥pk,计算聚合签名σ
final
=aggraget_sign(v

),final为消息是最终证书消息的字符串标识,令最终证书广播确认c

中所包含的第n-f个区块。若未收到n-f个合法的投票消息且无法聚合形成此时,若收到执行聚合签名验证若返回true,则确认c

中所包含的第n-f个区块;
130.5)若t3=0,退出辅助确认过程。
131.步骤9:令i=i 1,重复执行步骤2-8,直到停止运行共识并退出区块链系统。
132.以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,本发明的保护范围应以权利要求所述为准。
再多了解一些

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

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

相关文献