一种联盟链共识节点的选择方法技术

技术编号:27096198 阅读:75 留言:0更新日期:2021-01-25 18:34
本发明专利技术涉及区块链节点识别技术领域,特别是一种联盟链共识节点的选择方法,主要为联盟链系统提供了安全而不可预测的随机数,并且基于该随机数提出了一种节点选取的方法,能够让区块链每一轮的共识节点的选择都随机,从而规避了拜占庭节点串通作恶的可能性。本发明专利技术能保证每一轮共识节点的选举结果不可事先预知,从而能够防止攻击者串通,并且在某一轮获得该轮共识的出块权。并且为联盟链系统引入了不可预知的随机数,这个随机数可以在合约中读取,为合约作者提供更多的可能性。合约作者提供更多的可能性。

【技术实现步骤摘要】
一种联盟链共识节点的选择方法


[0001]本专利技术涉及区块链节点识别
,特别是一种联盟链共识节点的选择方法,主要为联盟链系统提供了安全而不可预测的随机数,并且基于该随机数提出了一种节点选取的方法,能够让区块链每一轮的共识节点的选择都随机,从而规避了拜占庭节点串通作恶的可能性。

技术介绍

[0002]在联盟链系统中,PBFT 和 Raft 是最常用的共识算法。比起公链所用算法,PBFT 和 Raft 都不会导致链分叉,不用担心链的回滚,不需要等待块确认时间,同时能提供相对更高的性能,因此更符合联盟链的应用场景。但是这两种算法的时间复杂度都比较高,比如 PBFT 算法,时间复杂度是,其中的 n 代表参与共识的节点数。简单来说,节点规模每扩大 10 倍,花费的时间就要扩大 100 倍,这也意味着吞吐量减少 100 倍。对于联盟链,这样的性能损失是不可接受的。
[0003]通常的方案是,从全部节点中选举出一个较小的集合,以下称为共识节点。共识节点的共识结果被认为是全部节点达成的共识结果。目前急需一种算法能够进行这样的选举,并且这个算法应该保证选举结果公平。
[0004]目前,在我们开发的区块链中,使用了一种叫做 RPBFT 的算法:算法通过把节点分为共识节点和验证节点,共识节点负责达成共识,验证节点只观察并同步共识结果,共识节点从验证节点中选举。RPBFT限制节点规模为一个固定值,每隔一段时间,按照顺序剔除掉一个共识节点,并使用一个验证节点代替。
[0005]RPBFT算法的问题在于:因为验证节点的顺序是确定的,所以能提前确定未来任意一段时间的共识节点组成。如果攻击者确定了未来一段时间内共识节点,就可以针对性地提前腐蚀或者串通多数节点,然后在攻击者掌握记账权利的轮次上,让恶意的块通过,以此破坏系统的共识,危害系统的安全性。

技术实现思路

[0006]本专利技术公开一种联盟链共识节点的选择方法,应用可验证随机函数到联盟链上,并基于此划分共识节点组。
[0007]一种联盟链共识节点的选择方法,其特征在于包括如下步骤:(1)可验证随机函数:可验证随机函数选用 Keygen 方法,使用节点本身的公钥作为验证密钥VK,节点本身的私钥作为私钥SK,节点不能随时改变公私钥对,避免频繁更换并广播会占用区块链系统吞吐量,可验证随机函数基于现有的 draft-irtf-cfrg-vrf-version3 规范实现;(2)选举过程:定义 SIZE 为共识节点集合的大小,选举间隔为 Epoch:每隔固定的块数即 Epoch,所有参与节点进行选举;
irtf-cfrg-vrf-version3 规范实现。
[0011]详细选举流程如下,定义 SIZE 为共识节点集合的大小,选举间隔为 Epoch:每隔固定的块数即 Epoch,所有参与节点进行选举。选举之前需要已经同步到最新的区块高度,并且对自己的区块进行打包,得到区块的哈希值 Hash。获取到上一个区块的随机数 PrevRandom,这个值对于所有节点都是一样的。把 Hash 和 PrevRandom拼接后,作为消息 X,与自己的私钥(SK) 作为VRF 的输入,得到结果 R和证明 P。广播自己的R 和 P,同时接收其他人发布的 R 和 P,验证其他人发布的 R 的正确性。如果收集齐了所有人的 R 和 P,对 R 做一次由小到大的排序,选择前 SIZE 个节点,标记为当前 Epoch 的共识节点集,并广播。如果所有节点在共识节点集上达成了共识,那么共识节点就绪,开始正常出块。共识节点出块的顺序按照 R 由小到大的顺序,每一次出块,块中都会附带上该节点这一次计算出的 R 和 P。
[0012]区块链在刚启动的时候,R 为空,所以需要在配置中指定一个初始的随机数和初始的引导节点。创世区块的 R 由这个引导节点计算初始随机数而来。
[0013] 以之前使用的联盟链为例,它使用了 RPBFT 的共识算法。假设目前选举出来的验证者集合为 V = [, , , ],如果该轮
ꢀꢀ
已经出块,那么按照 RPBFT 算法,我们可以知道,之后一轮
ꢀꢀ
会进行出块,再之后是
ꢀꢀ
。我们甚至能计算和推断,未来某一个时间,比如两个小时过后,验证者集合会变成[, , , ]。
[0014]假设有一个攻击者,他控制了 ,
ꢀꢀ
,并且知道,两个小时之后,他的节点会占据所有验证节点的多数(他控制了 5 个节点中的 3 个),这就意味着在那个时间点,他可以伪造虚假的交易,比如让 Alice 的所有资产转给自己,并且强制写入链上;或者更改交易的顺序,让正确的交易错误。比如 Bob 账户上余额为 0,Alice 发起了一条交易 Tx1:Alice 转给 Bob 20 的资产,这时候 Bob 账户余额为 20。然后 Bob 发起一条交易 Tx2:Bob 转给 Carol 10 的资产。结果是 Bob 余额现在是 10。但是如果 Tx2 和 Tx1 的顺序发生了改变,那么 Tx2 会直接失败,导致 Bob 余额最终变成 20。
[0015]这个案例说明,如果验证集合可预测,那么攻击者可以用很少的代价,达成攻击的目的。
[0016]那么如果使用了基于 VRF 的 PBFT 共识算法,在任意一个轮次,验证者身份都是未知的,因为所有节点都在出块,而只有所有节点的随机数被公布并且相互验证之后,才能知道到底是哪个节点的块会被采用。并且,这个身份未知的节点对上一轮的随机数又进行了一些修改,导致下一轮的节点依旧无法预测。这样攻击者根本无法通过控制特定个数的节点来获取出块权利,也无法决定自己的节点会在何时出块,从而保证了安全性。
[0017]本专利技术的核心是引入随机数。对这个随机数要求强随机的,这就要求有真正的随机数种子。一般计算机中强随机数需要硬件支持,得到一些无法预测的事件,比如读取特定硬件中断的时间间隔,或者鼠标位置变化等。在通常的区块链系统方案,比如比特币以及以太坊中,因为所有的输入都是确定的,所以无法实现随机数。对此,我们引入了可验证随机函数。
[0018]但是这并不是说,因为引入可验证随机函数就能在区块链系统中使用随机数。可
验证随机函数只是保证,任何人都无法预测其他人将会产生的值,因为可验证随机函数中需要使用到私钥。同时,任何人都可以验证其他人产生的随机数没有作弊,因为在其他输入确定的情况下,可以通过对方的公钥验证随机数是否正确。
[0019]如果对非对称加密比较熟悉,那么可以直接看出,上文可以抽象成为一个两次提交的非对称加密过程:用户生成自己的密文 S,通过自己的私钥 Priv 加密之后得到 M,并连带自己的公钥 Pub 发送给其他人。当用户揭示自己密文 S 的时候,其他人需要通过 Pub 验证用户发送的 M,如果解密出的信息正好是 S,那么说明用户的确以 S 为自己的密文。否则,如果用户欺骗了其他人,那么经 Pub 解密出的 M 一定不等于 S。
[0020]实本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种联盟链共识节点的选择方法,其特征在于包括如下步骤:(1)可验证随机函数:可验证随机函数选用 Keygen 方法,使用节点本身的公钥作为验证密钥VK,节点本身的私钥作为私钥SK,节点不能随时改变公私钥对,避免频繁更换并广播会占用区块链系统吞吐量,可验证随机函数基于现有的 draft-irtf-cfrg-vrf-version3 规范实现;(2)选举过程:定义 SIZE 为共识节点集合的大小,选举间隔为 Epoch:每隔固定的块数即 Epoch,所有参与节点进行选举;选举之前需要已经同步到最新的区块高度,并且对自己的区块进行打包,得到区块的哈希值 Hash;获取到上一个区块的随机数 PrevRandom,这个值对于所有...

【专利技术属性】
技术研发人员:雷坤东王志鹏朱西华曾理
申请(专利权)人:中电万维信息技术有限责任公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1