很多朋友在找的时候会咨询pbft共识算法和pbft共识算法的改进,可见有些人不';你对这个问题不太了解,是吗?那么pbft共识算法的改进在哪里呢?让';让我们仔细看看边肖的作品!
1。区块链的技术是什么?如果我们假设数据库是一本账本,那么读写数据库就可以看作是一种记账的行为。区块链技术的原理是在一段时间内找出最快最好的记账人,这个人会记账。,然后把账本里的这一页信息发给整个系统的其他所有人。
实用的拜占庭容错算法
BFT是区块链共识算法中需要解决的核心问题。比特币的POW,eos的dpos,共识算法pos,这些公链算法解决了共识节点多的情况下的bft问题。拜占庭一般问题。也称为拜占庭容错。
用于描述分布式系统的一致性问题。
背景如下:
拜占庭帝国想要进攻一个强大的敌人。十支部队被派去包围敌人。虽然这个敌人不比拜占庭帝国强多少,但足以抵挡五支常规拜占庭军队的同时进攻。10军同时进攻,处于分而围之状态。如果任何一支军队单独进攻,他们都没有胜算。除非至少6支军队(超过半数)同时进攻,才能攻占敌国。他们分散在敌国各地,依靠通信兵在马背上相互沟通,商议进攻意图和进攻时间。困扰这些将军的问题是,他们不确定其中是否有叛徒。叛徒可以擅自改变攻击意图或攻击时间。在这种状态下,拜占庭将军能保证六支以上的军队同时一起进攻,从而赢得战斗?
这个问题的复杂程度,光靠上面的描述可能理解不了。让';让我们做一个简单的分析:
让';让我们先看看它。如果一个A将军提出攻击建议(比如明天下午1点攻击),你愿意加入吗?)通信兵分别告诉其他将军,如果那个幸运儿运气好,他得到了其他六名以上将军的同意,发起了进攻。如果它';很不幸,其他将军也会在这个时候提出不同的攻击方案(比如明天下午2点和3点攻击,你愿意加入我们吗?),由于时差原因。不同的将军可能会收到(并认可)不同的进攻方案,这可能会导致方案A有三个支持者,方案B有四个支持者,方案C有两个支持者,以此类推。
增加一点复杂性,在汉奸的情况下。一个叛徒会给不同的将军发送不同的进攻方案(通知A明天下午1点进攻,通知B明天下午2点进攻,等等。),而且一个汉奸也可能同意多个进攻方案(即同意下午1点进攻,同意下午2点进攻)。
它叫"拜占庭错误"叛徒发送不一致的攻击建议,这种可以处理拜占庭错误的容错被称为"拜占庭容错",缩写为BFT。
密码算法用于保证节点间的消息传输不被篡改。通过下面的算法,我们可以保证A将军从B将军那里收到的消息真的是B将军本人的真实要求。
我们使用哈希函数(哈希算法)sha256-从数据(字节)值创建唯一的哈希值,并将其压缩到摘要中以固定数据格式。。数字签名和个人公钥证书由该摘要和个人私钥生成,接收者验证该签名和摘要。如果经过验证,证明摘要内容没有被篡改。
pbft容忍无效或恶意的节点号e,为了保证整个系统的正常运行,需要2f1个正常节点,系统的汇总点是3f1。也就是说,pbft算法容忍不到1/3的恶意或无效节点。。见节点恶的极端情况
pbft是一个状态机拷贝算法,所有拷贝都是在一个视图旋转过程中操作的,哪些是主节点(攻击提议者的将领)。依次)由视图中其他节点(其他将军)给出的编号和节点编号集决定,即主节点p=vmod|R|。v:视图数,|R|节点数,p:主节点数。。关于状态机复制算法和视图改变的意义(主要是防止主节点作恶),详见论文。
基于拜占庭一般问题PBFT算法的一致性主要可以分为三个阶段:预准备、准备和提交。流程如下图所示:
[Image-e3329d-1562488133052]
首先解释以上符号所表达的含义:
Let';下面就用上图来详细说说PBFT的步骤:
按照上面的流程,在N3F1的情况下可以解决一致性问题,其中N为计算机总数,f为出现问题的计算机总数。
以下所有验证过程都省略了对消息内容、签名和身份的验证。也就是说已经保证了节点间的消息传播不可篡改
在上面的算法中,更重要的一点是视图改变,为了恢复之前的请求。在收到消息或发送消息后,每个副本节点将在本地日志记录中记录该消息。当请求被执行时,副本节点需要清除先前请求的记录消息。最简单的方法是在回复消息之后执行当前状态的一致同步。但是为了节省资源,状态同步一般是在多个请求k之后进行一次,这个状态同步就是检查点消息。
为了节省内存,系统需要一种机制来删除日志中的无异议消息记录。为了确保系统的安全性副本节点在删除自己的消息日志之前,需要保证至少有f1个正常副本节点执行了消息对应的请求,并且能够在视图发生变化时向其他副本节点证明。此外,如果一些副本节点丢失了一些消息。然而,这些消息已经被所有正常的副本节点删除,这需要通过传输部分或全部服务状态来同步副本节点。因此,副本节点也需要证明状态的正确性。
在每个操作执行后生成这样的证明是非常耗费资源的。因此,只有当请求序列号能被一个常数整除时(如100),证明过程才会周期性地进行。。我们把这些请求执行后得到的状态称为检查点,有证明的检查点称为稳定检查点。以上情况比较理想。实际上,副本节点I向其他节点发送检查点消息后,其他节点还没有完成k个请求的相互一致,所以不会响应I'的要求。其他节点将根据自己的处理步骤和顺序向前移动并达成共识。。但是,此时我发出的关卡并没有形成稳定。为了防止I太快,超过自己太多,会设置一个高水位H=hL,其中L是我们规定的允许高度差。,等于检查点周期处理数k的整数倍,可以设置为L=2K。当副本节点I处理的请求超过高水位H时,即使副本节点收到请求,也会被视为非法请求。等待稳定检查点发生变化。然后继续前进。
如果主节点作恶,可能会给不同的请求分配相同的序列号,或者不分配序列号,或者使相邻请求的序列号不连续。备份节点(备份主节点)应该有责任主动检查这些序列号的合法性。。如果主节点断开连接或作恶而不广播客户端';的请求,客户机设置一个超时机制,并在超时发生时向所有副本节点广播请求消息。副本节点检测到主节点或离线,并启动视图更改过程。
上面我们讲过。当网络中有F台计算机出现问题时,至少需要3F1台计算机来保证一致性问题。让';让我们在这里讨论一下原因。
我们可以认为,由于有F个节点发生故障或受到攻击。,所以只能从N-F个节点来判断。但由于异步传输,在收到N-F条消息后,并不确定后面是否有新的消息。(目前从N-F个节点收到的消息中有可能有来自被攻击节点的消息。并且由于异步传输而没有接收到好节点的消息。)
我们考虑最坏的情况,就是剩下的f个节点都是好的,收到的有f个被攻击的节点。所以我们需要使接收的好节点数(N-F)-F大于被攻击节点数F,所以有N-2FF,也就是N3F,所以N的最小整数是N=3F1。
pbft由需要参与认证的节点执行。所以一个完整的共识算法包括DPOSPBFT。其速度可以达到1500tps左右。
参考资料:
practicalByzantinefaulttolerance
MiguelCastroandBarbaraLiskovComputerScienceLaboratory,MassachusettsInstituteofTechnology,545ScienceandTechnologyPlaza,Cambridge,Massachusetts,02139castro,Liskov@lcs.mit.edu.
部分论文翻译
对数据序列达成共识是很多共识算法要解决的本质问题
Fabic的pbft算法实现
目前共识算法主要可以分为三类:公链、联盟链、私链
私链。所有节点信任
联盟链,存在等价的不信任节点
。私有链:私有链的一致性算法是区块链概念普及之前传统分布式系统中的一致性算法,比如zookeeper的zab协议,是一种类paxos算法。。私有链的适用环境一般不考虑集群中邪恶节点的存在,只考虑系统或网络原因导致的故障节点。
联盟链:在联盟链中,经典的代表项目是Hyperledger组织下的面料项目。Fabric0.6版使用pbft算法。联盟链的适用环境不仅需要考虑集群中故障节点的存在,还需要考虑集群中邪恶节点的存在。对于联盟链,每个新增加的节点都需要进行验证和审计。
公链:公链不仅要考虑网络中的故障节点,还要考虑恶节点,类似于联盟链。与联盟链最大的区别在于,公链中的节点可以自由加入或退出,无需严格的验证和审核。
公链最常用的是pow算法和pos算法。这些算法与参与者的利益直接相关,通过利益约束节点的诚实工作,解决分布式系统中的拜占庭问题。拜占庭容错算法是一种状态机复制算法。通过节点间的多轮消息传递,网络中的所有诚实节点可以达成共识。
拜占庭容错算法不需要发行加密货币,但只能在私有链或联盟链中使用,需要控制节点的访问;不能用于公共链。因为公链上的所有节点都可以随意加入和退出,所以可以';t抵抗女巫攻击
Raft算法包含三个角色,即:跟随者。,候选人和领导者。集群中的一个节点在某一时刻只能是这三种状态中的一种,并且这三种角色可以随着时间和条件的变化而转换。
raft算法主要有两个过程:一是领袖选举,二是日志复制,其中日志复制过程分为记录日志和提交数据两个阶段。raft算法支持的最大容错节点是(N-1)/2。,其中n是群集中的节点总数。
国外有一个动画把raft算法介绍的非常透彻,链接地址是:这个动画主要包含三个部分。第一部分介绍领导者选举和日志复制过程的简单版本。第二部分详细介绍了首领选举和日志复制的过程,第三部分介绍了如果遇到网络分区(裂脑),raft算法如何恢复网络一致性。
pbft算法主要是为了解决拜占庭一般问题而提出的。
要解决这个问题,有一个很重要的前提,就是渠道必须可靠。如果信道不能保证可靠,那么拜占庭问题就无解。关于通道的可靠性,会引出两军的问题。两军之间问题的结论是在一条不可靠的通信链路上,试图通过通信达成协议,基本上是不可能的,或者说是非常困难的。
拜占庭将军问题最早由莱斯利兰波特和另外两人在1982年发表的论文中提出,《TheByzantineGeneralsProblem》。他证明了当将军总数大于3f,叛徒数为F或更少时,忠诚的将军可以在命令上达成一致,即3F1=n.该算法的复杂度为O(n(f1))。MiguelCastro和BarbaraLiskov在1999年发表的论文《PracticalByzantineFaultTolerance》中首次提出了pbft算法。算法的容错数也满足3f1=n,算法复杂度为O(n2)。
首先,让';s考虑一个问题,为什么pbft算法中容错节点的最大个数是(n-1)/3?而raft算法中容错节点的最大数量是(n-1)/2?
对于raft算法,raft算法的容错只支持容错节点,不支持容错恶节点。什么是故障节点??是指由于系统繁忙、停机或网络问题等其他异常情况导致节点无响应,出现这种情况的节点就是故障节点。那邪恶的节点是什么?除了故意不响应集群中其他节点的请求,邪恶节点还可以故意发送错误的数据。,或者向不同的其他节点发送不同的数据,这样整个集群的节点就可以';Idon’我最终没有达成共识。这样的节点是邪恶的节点。
raft算法只支持容错节点,假设集群中节点总数为n,故障节点为f。根据小数服从多数的原则,集群中的正常节点只需要比F个节点多一个节点,即f1个节点,正确节点的数量就会多于失败节点的数量,那么集群就可以达成共识。。因此,raft算法支持的容错节点数最大为(n-1)/2。
对于pbft算法,既要支持容错的故障节点,也要支持容错的恶节点。假设集群节点的数量是n。,有问题的节点是f,在有问题的节点中,可以既是故障节点又是恶节点,也可以只是故障节点或只是恶节点。那么就会出现以下两种极端情况:
第一种情况,F个有问题的节点都是失效节点。,而且还是恶节点,那么根据小数服从多数的原则,集群中的正常节点只需要比F节点多一个节点,也就是f1节点,确定节点的数量就会多于故障节点的数量,那么集群就可以达成共识。。也就是说,这种情况下支持的最大容错节点数是(n-1)/2。
第二种情况,故障节点和邪恶节点是不同的节点。那么就会有F个问题节点和F个故障节点。当发现该节点是有问题的节点时,,就会被排除出集群,留下F个失败节点,那么根据小数服从多数的原则,集群中的正常节点只需要比F个节点多一个节点,也就是f1个节点,确认节点的数量就会多于失败节点的数量,那么集群就可以达成共识。因此所有类型节点的数量加起来有f1个正确节点、f个失败节点和f个问题节点,即3f1=n
结合以上两种情况,pbft算法支持的容错节点的最大数量为(n-1)/3。
pbft算法的基本流程主要包括以下四个步骤:
客户端向主节点发送请求
主节点向其他节点广播请求,节点实现pbft算法的三阶段一致流程。
节点处理完三阶段流程后,向客户端返回消息。
客户端收到来自f1节点的相同消息后,表示共识已经正确完成。
为什么从f1节点接收到相同的消息后,表示共识已经正确完成?从上一节的推导可以看出,在最好的情况下或者最坏的情况下,如果客户端从f1个节点接收到相同的消息,那么就意味着有足够多的正确节点已经全部达成共识并且已经被处理。
3。算法的核心三阶段流程
算法的核心三阶段是预准备阶段(pre-preparationstage)。、prepare阶段(准备阶段)、commit阶段(提交阶段)
与流程相比,对于领导者选举,raft算法的本质是谁赢谁最快。而pbft算法根据编号轮流做主节点。对于共识过程和重选领袖机制,为了更形象的描述这两种算法。下面将raft和pbft的共识过程与一个团队如何执行命令的过程进行对比,从这个角度理解raft算法和pbft的区别。
一个团队必须有一个老板和普通成员。。对于raft算法,共识的过程是:只要老板还活着,我们(团队的普通成员)就会按照老板说的去做,坚决执行。那你什么时候再当老板?只有老板死了,才重新选老板,否则当老板的人会死老板的鬼。
对于pbft算法,共识过程是,当老板给我发订单的时候,当我觉得老板';的订单有问题,我将拒绝执行。即使我认为老板';的顺序是正确的,我会问团队的其他成员,如果老板';的顺序是对的。只有当大多数人(2f1)认为老板';s的命令是正确的,我将执行它。老板什么时候改选?当然,如果老板死了,我们必须重新选举。如果大多数人认为老板不称职或者有问题,我们会重新选举老板。
四。结论
raft算法和pbft算法是私有链和联盟链中的经典一致性算法。本文主要介绍raft算法和pbft算法的流程和区别。。Raft和pbft算法有两个根本区别:
raft算法从节点不会拒绝主节点的请求,而pbft算法从节点在某些情况下会拒绝主节点的请求;
raft算法只能容忍故障节点,最大容错节点数为(n-1)/2,而pbft算法可以容忍故障节点和邪恶节点,最大容错节点数为(n-1)/3。
pbft算法是通过投票达成共识,可以解决包括分叉在内的问题,同时提高效率。但只适用于联盟链的私有链,因为两个节点之间的流量为O(n2)(流量可以通过优化降低)。一般来说,它不能应用于100个以上的节点。
pbft在信道必须可靠的前提下有解决方案,但存在的问题是扩展性差
一部分来源于:
。区块链是为BFT设计的
";拜占庭将军问题"是一个经典问题,描述如下:拜占庭是东罗马帝国的首都。它的军队分为许多师,每个师由一位将军领导。这些将军通过信使沟通,达成共同的作战计划。一些将军可能是叛徒,想要破坏这一进程,这将导致忠诚的将军们无法达成统一的作战计划。。这个问题就在于如何让忠诚的将领在这样的情况下达成统一的作战计划,避免汉奸对作战计划的误导。
在点对点和分布式区块链中,拜占庭问题经常被用来比较节点如何达成共识的问题。。通用是指对每个节点达成统一的作战计划,即达成共识,正确封装和验证块数据,防止恶意节点(叛徒将军)破坏区块链的运行。
顾名思义,可以解决拜占庭问题,使所有节点达成共识。解决一致性问题的各种机制也称为一致性算法。在各种共识算法中,一直有一个"不可能的三位一体"问题。这个三角形指的是"安全性","分散化"和"速度>;这意味着很难同时保证速度、安全性和分散性。三者之间,往往会顾此失彼。
现在共识算法有几十种,计算机行业一直处于研究阶段,也不是说什么算法都是完美的。
Let';让我们来看看并解释两个算法,pBET和POW。,和他们的"安全性","分散化"和"速度>;
实用拜占庭容错是早期的共识算法。pBFT的原则之一就是少数服从多数。节点互相传递上述文章,这就是决策的消息。谁的决定得到大多数人的赞同,谁的决定就会被采纳。所以在这个系统中,安全性随着诚实节点的数量而增加。诚实节点同意正确的决策,拒绝恶意节点的错误决策。只要恶意节点的数量少于总数的1/3,就可以保证达成共识。
达成共识可以简化为四个步骤:
pBFT采用投票机制,以循环方式选举领导节点。
领导者启动决策并将其广播到辅助节点。
所有节点包括领导节点和辅助节点,都发送响应。
什么时候?当一个节点发送相同的响应时,该响应被视为有效。
如果领导者有恶意行为,可以被大部分节点删除。
根据少数服从多数的原则。理论上只要恶意节点数小于1/2,那么为什么PBFT算法的容错数要满足恶意节点数小于总数的1/3的要求呢?
因为PBFT算法需要支持容错的故障节点,也需要支持容错的邪恶节点。假设集群中的节点数为n,有问题的节点为f,有问题的节点中,既可以是故障节点,也可以是恶节点。,或者只是故障节点或者只是邪恶节点。那么就会出现以下两种极端情况:(1)这F个有问题的节点既是故障节点又是恶节点,所以根据少数服从多数的原则,集群中的正常节点只需要比F个节点多一个节点,即f1个节点,并且正确节点的数量会多于失败节点的数量,那么集群就可以达成一个共识,即节点总数为F(F1)=N。也就是说,这种情况下支持的最大容错节点数是(n-1)/2。
(2)断层节点和邪恶节点是不同的节点。那么就会有f恶节点和f错节点。当发现这些节点是邪恶节点时,,就会被排除在集群之外,留下F个失败节点,那么根据少数服从多数的原则,集群中的正常节点只需要比F个节点多一个节点,也就是f1个节点,确认节点的数量就会多于失败节点的数量,那么集群就可以达成共识。因此所有类型的节点数量加起来有f1个正常节点、f个失效节点和f个邪恶节点,即3f1=n
结合以上两种情况,PBFT算法支持的容错节点数量最大为(n-1)/3,即不到1/3。。
pBFT的优缺点
pBFT系统不需要很高的计算资源,也不需要大量的能量来运行。当节点很少时,PBFT可以很快达成共识,因为所有节点都在不断地相互通信。。一旦节点对决策达成一致,事务就完成了。
但是,pBFT的缺点也很明显:频繁的通信使得它只能在节点数量有限的网络中正常工作。随着每个新节点加入网络,通信开销呈指数增长。响应所需的时间也增加了。
pBFT网络也容易受到Sybil攻击。女巫是由恶意黑客创建的不同节点。黑客可以控制超过三分之一的节点,系统将无法达成正确的共识。
来自不可能的三位一体';s的观点,可见pBFT在节点少的情况下速度快,但安全性差,分散性低;节点太多会导致速度慢。
中本聪设计了POW共识机制来解决上述pBFT经典共识的可扩展性问题。
如上所述,pBFT连续广播,然后统计节点的消息数,耗时太长。。战俘是怎么做到的:我不知道。我不想计算节点数是否超过2/3。我只是选择一个节点,根据它的决策,其他所有节点同步它的决策。这样就省去了在所有节点进行通信,然后计算节点数量的耗时操作。
那么,为哪个节点打包块呢?那';这非常重要。如果它';这是一个恶意节点吗?打包的节点必须是必需的。哪个节点有权打包?那就是解决复杂的数学问题,俗称挖旷。节点必须花费大量的计算能力和电力来赢得一次打包块的权利。。这个成本限制了黑客的女巫攻击。
如果包块权真的被黑客抢了,可能是什么问题?
(1)窃取糖果橙
黑客可以窃取属于另一个用户的东西。不受她控制的地址里的糖橙?答案是否定的。即使这一轮是黑客在区块链打包的下一个区块,她也可以';不要偷别人';的比特币。要做到这一点,黑客需要发起一个有效的交易,将比特币转移到他的地址。。这需要黑客伪造比特币主人的签名,但如果数字签名机制是安全的,她可以';不要这样做。只要背后的加密基础扎实,她就可以';不要轻易盗取比特币。
(2)拒绝服务攻击
让';让我们考虑另一次攻击。假设黑客没有';不喜欢名为鲍勃的用户,黑客可以决定她赢了';不要将Bob发起的任何事务放入她提议的块中。换句话说,她拒绝向鲍勃提供服务。虽然这是黑客可以实施的有效攻击。不过还好,这只是个小问题。如果鲍勃';的事务不放入黑客打包的下一个块中,Bob只需要等到下一个诚实节点发起块,他的事务记录就会放入这个块中。所以这其实不是一个有效的攻击。
也就是说,黑客花了很多钱拿到这个包,但是它可以';我不能发动有效的进攻。由于惩罚恶意节点,奖励诚实节点的机制,已经达成共识。
虽然改进了,但是POW也引入了其他问题。。工作量证明所有节点都需要解决复杂的数学问题,会消耗大量的能量,也就是所谓的挖匡耗电。而且解决复杂的数学问题所需的时间也不短,10分钟左右。
来自不可能三位一体';的观点,POW是高度去中心化的,也是安全的,但还是慢,但至少不会因为像pBFT这样的节点多了而呈指数级增长。
共识算法多种多样,糖橙的POW并没有真正解决分布式共识问题。它可以';不能完美地应用于其他场景。但它解决了糖橙在货币体系这一特定场景下的共识问题。粉末在糖橙中非常有效。
涟漪共识
使一组节点能够基于特殊的节点列表达成共识。最初的特殊节点列表就像一个俱乐部。要接纳一名新成员,必须有51%的俱乐部成员投票赞成。共识遵循这个核心成员51%的权力,外人没有影响力。。既然俱乐部是从集权开始的,那就永远是集权,如果开始腐败,股东也无能为力。
5。PBFT:实用拜占庭容错
PBFT是一个状态机复制算法,也就是说,服务被建模为一个状态机。状态机在分布式系统的不同节点上制作副本。状态机的每个副本保存了服务的状态,也实现了服务的操作。所有副本的集合用大写字母R表示,每个副本用从0到|R|-1的整数表示。为了便于描述假设|R|=3f1,其中f是可能失败的最大副本数。虽然可能存在多于3f1的副本,但是额外的副本除了降低性能之外,并不能提高可靠性。
PBFT算法的主要特点如下:客户端向主节点发送请求,调用服务操作;主节点通过广播向其他副本发送请求;所有副本执行请求并将结果发送回客户端;客户端需要等待f1个不同的副本节点发回相同的结果。作为整个行动的最终结果。
根本目的是为了效率;
通过比较pbft和bft的消息量,我们知道主节点的存在可以大大减少消息量,从而提高效率
。只要你认真阅读了上面的内容,你就已经了解了关于pbft共识算法改进的相关知识。如果你对屏幕前的pbft共识算法有什么好的建议和想法,请在下方评论区评论,我们会及时回复。