【go共识算法】-BFT

BFT介绍

BFT

BFT( Byzantine Fault Tolerance)称为 拜占庭容错。拜占庭容错技术是一类分布式计算领域的容错技术。拜占庭假设是对现实世界的模型化,因为硬件错误、网络拥塞或中断以及遭到恶意攻击等缘由,计算机和网络可能出现不可预料的行为。拜占庭容错技术被设计用来处理这些异常行为,并知足所要解决的问题的规范要求。算法

拜占庭将军问题

拜占庭容错技术来源于拜占庭将军问题。 拜占庭将军问题是Leslie Lamport(2013年的图灵讲得住)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子。安全

拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。这10支军队在分开的包围状态下同时攻击。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队(一半以上)同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通讯兵骑马相互通讯来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不肯定他们中是否有叛徒,叛徒可能擅自变动进攻意向或者进攻时间。在这种状态下,拜占庭将军们才能保证有多于6支军队在同一时间一块儿发起进攻,从而赢取战斗?网络

拜占庭将军问题中并不去考虑通讯兵是否会被截获或没法传达信息等问题,即消息传递的信道绝无问题。Lamport已经证实了在消息可能丢失的不可靠信道上试图经过消息传递的方式达到一致性是不可能的。因此,在研究拜占庭将军问题的时候,已经假定了信道是没有问题的.

咱们将拜占庭将军问题简化成了,全部忠诚的将军都可以让别的将军接收到本身的真实意图,并最终一致行动;而形式化的要求就是,“一致性”与“正确性”。
一致性:每一个忠诚的将军必须收到相同的命令值vi(vi是第i个将军的命令)
正确性:若是第i个将军是忠诚的,那么他发送的命令和每一个忠诚将军收到的vi相同。异步

Lamport 对拜占庭将军的问题的研究代表,当 n > 3m 时,即叛徒的个数 m 小于将军总数的 n 的 1/3 时,经过口头同步通讯(假设通讯是可靠的),能够构造同时知足“一致性”和“正确性”的解决方法,即将军们能够达成一致的命令。分布式

拜占庭容错系统

区块链网络的记帐共识和拜占庭将军的问题是类似的。参与共识记帐的每个节点至关于将军,节点之间的消息传递至关于信使,某些节点可能因为各类缘由而产生错误的信息传递给其余节点。一般这些发生故障的节点被称为拜占庭节点,而正常的节点即为非拜占庭节点。
假设分布式系统拥有n台节点,并假设整个系统拜占庭节点不超过m台(n ≥ 3m + 1),拜占庭容错系统须要知足以下两个条件:区块链

  1. 全部非拜占庭节点使用相同的输入信息,产生一样的结果。在区块链系统中,能够理解为,随机数相同、区块算法相同、原帐本相同的时候,计算结果相同。
  2. 若是输入的信息正确,那么全部非拜占庭节点必须接收这个消息,并计算相应的结果。在区块链系统中,能够理解为,非拜占庭节点须要对客户的请求进行计算并生成区块。

另外,拜占庭容错系统须要达成以下两个指标:设计

  1. 安全性:任何已经完成的请求都不会被更改,它能够在之后请求看到。在区块链系统中,能够理解为,已经生成的帐本不可篡改,而且能够被节点随时查看。
  2. 活性:能够接受而且执行非拜占庭客户端的请求,不会被任何因素影响而致使非拜占庭客户端的请求不能执行。在区块链系统中,能够理解为,系统须要持续生成区块,为用户记帐,这主要靠挖矿的激励机制来保证。

在分析拜占庭问题的时候,假设信道是可信的。拓展开来,在拜占庭容错系统,广泛采用的假设条件包括:code

  • 拜占庭节点的行为能够是任意的,拜占庭节点之间能够共谋;
  • 节点之间的错误是不相关的;
  • 节点之间经过异步网络链接,网络中的消息可能丢失、乱序并延时到达,但大部分协议假设消息在有限的时间里能传达到目的地;
  • 节点之间传递的信息,第三方能够嗅探到,可是不能篡改、伪造信息的内容和破坏信息的完整性。
相关文章
相关标签/搜索