NEO-dBFT共识机制算法的分析与完善

昕阳小编 129 0

当NEO采用dBFT机制实现共识节点之间的拜占庭容错,并且NEO白皮书中描述的恶意共识节点小于1/3时,这种共识机制可以保证系统的安全性和可用性。通过研究,我们发现目前NEO的dBFT机制只能保证诚实的共识节点能够达成共识。但是共识节点之间没有分叉并不意味着整个网络不会有分叉。NEO对目前dBFT共识机制的实现不满意?拜占庭容错特性。

neodbft共识机制简介

NEO区块链是一个分布式智能合约平台。NEO实现了一种委托拜占庭容错共识算法,借鉴了部分PoS的特点(NEO持有者需要对共识节点进行投票),用最少的资源保护网络免受拜占庭故障,同时弥补了PoS的一些问题。对于由n个共识节点组成的共识系统,dBFT提供?的容错能力包括安全性和可用性,适用于任何网络环境。

NEO dBFT共识机制详见NEO官方共识机制白皮书:

http://docs.neo.org/zh-cn/basic/consensus/whitepaper.html?(中文版)

http://docs.neo.org/en-us/basic/consensus/whitepaper.html?

拜占庭一般问题与区块链

拜占庭位于土耳其伊斯坦布尔,是东罗马帝国的首都。由于当时拜占庭罗马帝国疆域辽阔,出于防御目的,各军相隔甚远,将领之间的消息只能通过信使传递。战争期间,拜占庭军队中所有的将军和副官都必须达成共识,决定是否有胜算后,才攻击敌方阵营。但军中可能有汉奸、敌特,将军们的决策会扰乱全军的秩序。达成共识时,结果不代表多数人的意见。这时候拜占庭问题就形成了,其他忠诚的将领在知道部分成员合谋的情况下,在没有叛徒影响的情况下达成协议。PBFT算法是解决拜占庭问题的经典算法。

区块链是一个去中心化的分布式账本系统,可以用来登记和发放数字资产、产权证书、积分等。并以点对点的方式进行转账、支付和交易。区块链技术最早由中本聪在一份加密邮件列表中提出,即比特币。此后,基于区块链技术的各种应用不断涌现,如基于区块链的电子现金系统、基于区块链的股权交易系统、基于区块链的智能合约系统等。与传统的集中式账本系统相比,区块链系统具有完全公开、防篡改和防止多次支付的优点,并且不依赖于任何可信的第三方。然而,和任何分布式系统一样,区块链系统也会面临网络延迟、传输错误、软件错误、安全漏洞、黑客入侵等问题。另外,去中心化的特点决定了这个系统中没有一个参与者是可以信任的,可能会出现恶意节点,以及各方利益不一致导致的数据差异。为了防止这些潜在的错误,区块链系统需要一个有效的共识机制,以确保每个节点都有一个唯一的和公认的全球总账。针对某些特定问题的传统容错方法不能完全解决分布式系统和区块链系统的容错问题。人们需要一个可以容忍任何错误的容错方案。

新区块链共识机制详情

采用拜占庭容错委托(dBFT)作为共识机制(?http://docs.neo.org/en-us/basic/consensus/consensus.html?)。整个网络中的NEO节点分为两种:一种是共识节点,负责与其他共识节点进行共识通信,生成新的块;另一种是普通节点,不参与共识,但可以验证和接受新块。共识节点由全网用户通过投票产生。NEO node的dBFT背后的思想是,PBFT算法可以很好地解决分布式节点的一致性问题,但是参与PBFT一致性的节点数量越大,性能越低。 通过投票选举PBFT共识来选择相对较少的共识尚力财经小编2022节点,生成新的块,然后将新的块发布到全网,达到全网的共识。在NEO共识节点之间,生成新块的正常共识过程如下:

启动共识的节点分为两类,非簿记员和簿记员节点,非簿记员不参与共识,簿记员参与共识过程

并选择发言人。Neo说话人生成机制是根据当前块高和记账人数,通过MOD运算得到的,说话人实际上是按顺序

节点初始化选出的。

满足离块条件后,发言人发送PrepareRequest

成员收到请求后,验证记账节点通过signature

发送PrepareResponse

,节点保存对方签名信息,检查如果超过三分之二,block

节点接收该块。触发PersistCompleted事件后,整个系统将被重新初始化。

为了防止恶意的共识节点或发言者,保证系统的安全性和可靠性,NEO提出了changeview机制,进一步增强dBFT的安全性。当节点?路过?在

的时间间隔后,仍未达成共识,或收到包含非法交易的提案,则启动视图替换流程:

顺序?

节点?发出视图更改请求?

任意节点至少接收?他们来自不同的地方吗?一样的?实现视图更改后,进行?并开始达成共识;NEO-dBFT共识机制算法的分析与完善-第1张图片-昕阳网

如果路过?在的时间间隔后,视图替换仍未实现,则递增并返回步骤2;NEO共识节点的整体流程如下:

DBFT共识机制分析

DBFT的核心思想是通过pBFT协议,通过选举出的共识节点达成共识,从而产生全网共识。这似乎是一个好主意,但是在dBFT和pBFT中,共识节点为非共识节点提供服务的模式是不同的。在pBFT中,非共识节点(客户端节点)需要接收至少f 1个共识节点的相同执行结果才能获得服务结果尚力财经小编2022。在dBFT中,非共识节点需要获得一个由至少2f 1个共识节点签名的块。dBFT的拜占庭容错不能从pBFT想当然。要证明共识协议的安全性,需要严格的证明。

分析网络协议安全性的一个重要前提是,网络是一个复杂的环境,我们无法保证先发的包先到达。这就是网络协议复杂的原因。我们举两个反例证明dBFT无法提供。拜占庭容错。

攻击案例一:[X] [X]假设七个节点A1A2A3A4A5A7。其中,说话人A1和A2为恶意节点(不到1/3的节点),A1为本轮说话人。A1生成block1向A2 A3 A4发送PrepareRequest(block1),生成block2向A5 A6 A7发送PrepareRequest(block2)。当每个人都收到PrepareRequest消息时。A2 A3 A4将返回准备响应的消息(块1),A5 A6 A7将返回准备响应的消息(块2)。此时,Block1和Block2的签名已经公布在网络上。网络尚未达成共识,还需进一步协商,最终共识区块未定。但此时恶意节点A2其实可以生成block2的签名(他自己手里可以有5个block2签名),所以A2有能力生成网络中的一个分叉。在这种攻击情况下,dBFT无法实现拜占庭容错(2个恶意节点)。

攻击案例二:假设有七个节点A1 A2 A3 A4 A5 A6 A7。其中A2是恶意节点(只有一个恶意节点)。假设A1当选本轮发言人,由于大量事务处理或者其他网络原因,A1已经延迟。并且在临界超时的情况下发送block1。其中A5 A6 A7刚好限时收到并完整验证了整块1,回复签名。A2 A3 A4还没有收到这个block1。此时,根据dBFT协议,到了超时时间,每个人都会请求更改视图。碰巧的是,change view的包在Block1之前到达了A2 A3 A4。大家达成了改变看法的共识。然后进入下一个视图阶段。如果在这个阶段,A2 A3 A4接收block1,但是视图和扬声尚力财经小编2022器已经改变,则它们不会接受block1。然后所有人都会进入下一轮 Block2的制作过程一切正常,A3 A4 A5 A6 A7的几个老实节点已经达成共识。但此时A2有五个Block1的签名。它可以构建Block1。因此,A2可以在网络中创建分叉。在这种攻击情况下,dBFT无法实现拜占庭容错(1个恶意节点)。

NEO目前对dBTF的实现是不够的。本质原因是:NEO实现dBTF试图用共识节点间的共识代替全网的共识;然而,这一假设并不严格有效。DBFT只能保证诚实共识节点间的共识,但诚实共识节点间的共识与全网节点间的共识之间没有严格的绑定关系。在上面的例子1中,恶意节点A1 A2不能影响共识节点之间共识Block2的生成,但可以生成Block1,从而造成网络中普通节点的分叉。按照NEO目前的设计,一旦发生分叉,分叉节点无法返回NEO网络。

问题的影响

发现问题的当天,我们就把它发给了NEO的创始人Erik Zhang。Erik当天也回复说他们已经发现了这个问题,并在社区做了相关声明。NEO在github项目上发起了一个Pull请求来处理这个问题,得到了社区成员的积极响应,为这个问题献计献策。目前问题已初步解决,正在测试稳定性。具体联系:https://github.com/neo-project/neo/pull/320。

通过对这个PR实现的具体讨论和研究,我们发现实际上这个PR主要是为了修复NEO目前dBTF中PBFT不完善的实现。目前社区的理解是,由于NEO中的dBFT缺少PBFT的提交阶段,可能是因为共识节点之间的网络延迟或宕机导致共识节点无法达成共识。但是,即使添加了提交过程,也无法阻止恶意的共识节点构造分叉块。NEO团队在此PR下提出了一个新的改进方案来解决这个问题。目前NEO社区正在完善之前的PR来彻底解决这个问题。在解决这一问题的过程中,我们发现NEO团队在处理安全问题方面非常专业和高效,社区的反应也非常热烈和及时。360安全团队将继续与近地天体合作,测试、分析和改进相关问题,推动近地天体和区块链技术的发展。

本文链接:http://blogs.360.cn/post/neo _ dbft.htmlNEO-dBFT共识机制算法的分析与完善-第2张图片-昕阳网

neo fans微博:https://www.weibo.com/neofanscommunity

neo fans电报组。

标签: 达成协议

抱歉,评论功能暂时关闭!

微信号已复制,请打开微信添加咨询详情!