[区块链] 拜占庭将军问题

  接触区块链的同学,多少都听说过拜占庭将军问题,经常看到或听到某某区块链使用某某算法解决了拜占庭将军问题,那么究竟什么是拜占庭将军问题呢?

什么是拜占庭将军问题:

  “拜占庭将军问题”也被称为“拜占庭容错”。

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

  这个例子大意是这样的:

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

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



通俗分析:

  单从上面的说明可能无法理解这个问题的复杂性,我们来简单分析一下:

  先看在没有叛徒情况下,假如一个将军A提一个进攻提议(如:明日下午1点进攻,你愿意加入吗?)由通信兵通信分别告诉其他的将军,如果幸运中的幸运,他收到了其他6位将军以上的同意,发起进攻。如果不幸,其他的将军也在此时发出不同的进攻提议(如:明日下午2点、3点进攻,你愿意加入吗?),由于时间上的差异,不同的将军收到(并认可)的进攻提议可能是不一样的,这是可能出现A提议有3个支持者,B提议有4个支持者,C提议有2个支持者等等。

  再加一点复杂性,在有叛徒情况下,一个叛徒会向不同的将军发出不同的进攻提议(通知A明日下午1点进攻, 通知B明日下午2点进攻等等),一个叛徒也会可能同意多个进攻提议(即同意下午1点进攻又同意下午2点进攻)。

  叛徒发送前后不一致的进攻提议,被称为“拜占庭错误”,而能够处理拜占庭错误的这种容错性称为「Byzantine fault tolerance」,简称为BFT。



问题抽象:

  求解拜占庭将军问题,隐含要满足以下两个条件:

  1)每个忠诚的将军必须收到相同的命令值vi(vi是第i个将军的命令)。

  2)如果第i个将军是忠诚的,那么他发送的命令和每个忠诚将军收到的vi相同。

  于是,拜占庭将军问题的可以描述为:一个发送命令的将军要发送一个命令给其余n-1个将军,使得:

  IC1.所有忠诚的接收命令的将军遵守相同的命令;

  IC2.如果发送命令的将军是忠诚的,那么所有忠诚的接收命令的将军遵守所接收的命令。

  Lamport对拜占庭将军问题的研究表明,当n>3m时,即叛徒的个数m小于将军总数n的1/3时,通过口头同步通信(假设通信是可靠的),可以构造同时满足IC1和IC2的解决方案,即将军们可以达成一致的命令。但如果通信是可认证、防篡改伪造的(如采用PKI认证,消息签名等),则在任意多的叛徒(至少得有两个忠诚将军)的情况下都可以找到解决方案。

  而在异步通信情况下,情况就没有这么乐观。Fischer-Lynch-Paterson定理证明了,只要有一个叛徒存在,拜占庭将军问题就无解。翻译成分布式计算语言,在一个多进程异步系统中,只要有一个进程不可靠,那么就不存在一个协议,此协议能保证有限时间内使所有进程达成一致。

  由此可见,拜占庭将军问题在一个分布式系统中,是一个非常有挑战性的问题。因为分布式系统不能依靠同步通信,否则性能和效率将非常低。因此寻找一种实用的解决拜占庭将军问题的算法一直是分布式计算领域中的一个重要问题。

  在这里,我们先给出分布式计算中有关拜占庭缺陷和故障的两个定义:

  定义1:拜占庭缺陷(Byzantine Fault):任何观察者从不同角度看,表现出不同症状的缺陷。

  定义2:拜占庭故障(Byzantine Failure):在需要共识的系统中由于拜占庭缺陷导致丧失系统服务。

  在分布式系统中,不是所有的缺陷或故障都能称作拜占庭缺陷或故障。像死机、丢消息等缺陷或故障不能算为拜占庭缺陷或故障。拜占庭缺陷或故障是最严重缺陷或故障,拜占庭缺陷有不可预测、任意性的缺陷,例如遭黑客破坏,中木马的服务器就是一个拜占庭服务器。

  在一个有拜占庭缺陷存在的分布式系统中,所有的进程都有一个初始值。在这种情况下,共识问题(Consensus Problem),就是要寻找一个算法和协议,使得该协议满足以下三个属性。

  1)一致性(Agreement):所有的非缺陷进程都必须同意同一个值。

  2)正确性(Validity):如果所有的非缺陷的进程有相同的初始值,那么所有非缺陷的进程所同意的值必须是同一个初始值。

  3)可结束性(Termination):每个非缺陷的进程必须最终确定一个值。

  根据Fischer-Lynch-Paterson的理论,在异步通信的分布式系统中,只要有一个拜占庭缺陷的进程,就不可能找到一个共识算法,可同时满足上述要求的一致性、正确性和可结束性要求。在实际情况下,根据不同的假设条件,有很多不同的共识算法被设计出来。这些算法各有优势和局限。算法的假设条件有以下几种情况:

  1)故障模型:非拜占庭故障/拜占庭故障。

  2)通信类型:同步/异步。

  3)通信网络连接:节点间直连数。

  4)信息发送者身份:实名/匿名。

  5)通信通道稳定性:通道可靠/不可靠。

  6)消息认证性:认证消息/非认证消息。



中本聪的解决方案:

  在出现比特币之前,解决分布式系统一致性问题主要是Lamport提出的Paxos算法或其衍生算法。Paxos类算法仅适用于中心化的分布式系统,这样的系统的没有不诚实的节点(不会发送虚假错误消息,但允许出现网络不通或宕机出现的消息延迟)。

  中本聪在比特币中创造性的引入了“工作量证明(POW : Proof of Work)”来解决这个问题,有兴趣可进一步阅读工作量证明(猛击)。

  通过工作量证明就增加了发送信息的成本,降低节点发送消息速率,这样就以保证在一个时间只有一个节点(或是很少)在进行广播,同时在广播时会附上自己的签名。

这个过程就像一位将军A在向其他的将军(B、C、D…)发起一个进攻提议一样,将军B、C、D…看到将军A签过名的进攻提议书,如果是诚实的将军就会立刻同意进攻提议,而不会发起自己新的进攻提议。

  以上就是比特币网络中是单个区块(账本)达成共识的方法(取得一致性)。

  理解了单个区块取得一致性的方法,那么整个区块链(总账本)如果达成一致也好理解。

  我们稍微把将军问题改一下:假设攻下一个城堡需要多次的进攻,每次进攻的提议必须基于之前最多次数的胜利进攻下提出的(只有这样敌方已有损失最大,我方进攻胜利的可能性就更大),这样约定之后,将军A在收到进攻提议时,就会检查一下这个提议是不是基于最多的胜利提出的,如果不是(基于最多的胜利)将军A就不会同意这样的提议,如果是的,将军A就会把这次提议记下来。这就是比特币网络最长链选择 (猛击)



经济学分析

  工作量证明其实相当于提高了做叛徒(发布虚假区块)的成本,在工作量证明下,只有第一个完成证明的节点才能广播区块,竞争难度非常大,需要很高的算力,如果不成功其算力就白白的耗费了(算力是需要成本的),如果有这样的算力作为诚实的节点,同样也可以获得很大的收益(这就是矿工所作的工作),这也实际就不会有做叛徒的动机,整个系统也因此而更稳定。

  矿工挖矿获得比特币奖励以及记账所得的交易费用使得矿工更希望维护网络的正常运行,而任何破坏网络的非诚信行为都会损害矿工自身的利益。因此,即使有些比特币矿池具备强大的算力,它们都没有作恶的动机,反而有动力维护比特币的正常运行,因为这和它们的切实利益相关。

  

  共识算法的核心就是解决拜占庭将军问题(分布式网络一致性问题)。



【时间仓促,如有错误,欢迎指正! 若写得不错,感谢推荐! ||   欢迎留下您的评语!  大家一起探讨、学习区块链!】



REFERENCE

  1. Lamport L,Shostak R,Pease M.The Byzantine generals problem.ACM Trans.on Programming Languages and Systems,1982,4(3):382-401.
  2. Lamport L,Shostak R,Pease M.The Byzantine generals problem.ACM Trans.on Programming Languages and Systems,1982,4(3):382-401.
  3. Fischer,M.J.,Lynch,N.A.,Paterson,M.:Impossibility of distributed consensus with one faulty process.J.ACM 32(2),374-382(1985)
  4. 《区块链技术指南》邹均张海宁唐屹李磊 著

原文地址:https://www.cnblogs.com/X-knight/p/9157533.html

时间: 2024-08-13 17:11:01

[区块链] 拜占庭将军问题的相关文章

区块链概念

一段视频了解一下: 知乎普及:https://www.zhihu.com/question/37290469 首先不要把区块链想的过于高深,他是一个分布在全球各地.能够协同运转的数据库存储系统,区别于传统数据库运作——读写权限掌握在一个公司或者一个集权手上(中心化的特征),区块链认为,任何有能力架设服务器的人都可以参与其中.来自全球各地的掘金者在当地部署了自己的服务器,并连接到区块链网络中,成为这个分布式数据库存储系统中的一个节点:一旦加入,该节点享有同其他所有节点完全一样的权利与义务(去中心化

区块链快速入门(三)——CFT(非拜占庭容错)共识算法

区块链快速入门(三)--CFT(非拜占庭容错)共识算法 一.CFT简介 CFT(Crash Fault Tolerance),即故障容错,是非拜占庭问题的容错技术.Paxos 问题是指分布式的系统中存在故障(crash fault),但不存在恶意(corrupt)节点的场景(即可能消息丢失或重复,但无错误消息)下的共识达成问题,是分布式共识领域最为常见的问题.最早由Leslie Lamport用 Paxon 岛的故事模型来进行描述而得以命名.解决Paxos问题的算法主要有Paxos系列算法和Ra

区块链快速入门(四)——BFT(拜占庭容错)共识算法

区块链快速入门(四)--BFT(拜占庭容错)共识算法 一.BFT简介 1.拜占庭将军问题简介 拜占庭将军问题(Byzantine Generals Problem)是Leslie Lamport(2013年的图灵奖得主)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子.拜占庭将军问题简易的非正式描述如下:拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人.这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击

01-区块链入门之 区块链介绍一-大叔思维

1.区块链技术是什么? 总的来说,区块链是一套协议,一组规范,而不是具体代码.项目. 理解了这套协议,你可以基于现有的技术,以不同的语言去实现它.我们也无法用一句简单的话去概况什么是区块链,站的角度不同,得到的结论也不一样. 金融业: 区块链是一个分布式的账本,是一个分布式的银行记账系统. 密码学者:区块链是使用密码学构建的去信任网络. 码农:区块链就是一个确保最终一致性的分布式数据库. 维基百科:区块链(Blockchain)是一种分布式数据库,起源自比特币.区块链是一串使用密码学方法相关联产

《区块链研究》目录

区块链研究 引言——拜占庭将军问题 第一部分 区块链扫盲 第1章 比特币和区块链的前世今生 历史 现状 Bitcoin工具及使用 挖矿原理 第2章 比特币原理 l   搭建比特币开发环境 l   JSON-RPC l   账户.公钥.私钥.地址.伪随机.多重签名.椭圆算法.WIF等 l   交易 l   挖矿与共识 l   钱包 l   P2P l   通知 l   一致性检查Consenous l   Consenous l   使用LevelDB l   智能脚本 第3章 区块链原理 l  

区块链上的共识机制

前言 区块链上的共识机制有多种,没有一种共识机制是完美无缺的,同时也意味着没有一种共识机制是适合所有应用场景的. PoW:Proof of Work,工作量证明 依赖机器进行数学运算来获取记账权,资源消耗相比其他共识机制高.可监管性弱,同时每次达成共识需要全网共同参与运算,性能效率比较低,容错性方面允许全网50%节点出错1. 优缺点2: 优点:完全去中心化,节点自由进出: 缺点:目前bitcoin已经吸引全球大部分的算力,其它再用Pow共识机制的区块链应用很难获得相同的算力来保障自身的安全:挖矿

比特币与区块链

早上看到一则新闻,说比特币可能要分裂比特币现金,很多持有者可能会凭空多出很多财富,又联想到前端时间微信群中讨论的很火热的区块链的话题,记得当时有人曾说这可能是影响未来几年最重要的技术之一,觉得为看懂未来趋势,有必要再深入的了解一下区块链. 印象中区块链就是一个去中心化的分布式数据库,没有中心权威代理,就要解决信息点对点传递的真实有效性问题.下面转载一下刚看到的一篇不错的解释. 作者:maxdeath 代尔夫特理工大学 (TU Delft) 博士后区块链博士后,共识算法专家 链接:https://

技术演进:区块链是怎么来的

1982年 拜占庭将军问题 Leslie Lamport等人提出拜占庭将军问题(Byzantine Generals Problem),把军中各地军队彼此取得共识.决定是否出兵的过程,延伸至运算领域,设法建立具容错性的分散式系统,即使部分节点失效仍可确保系统正常运行,可让多个基于零信任基础的节点达成共识,并确保资讯传递的一致性,而2008年出现的比特币区块链便解决了此问题. David Chaum提出密码学网路支付系统 David Chaum提出注重隐私安全的密码学网路支付系统,具有不可追踪的特

从零开始学区块链(3)

转自 区块链大师 区块链的定义.特征与发展 一.定义 区块链(Blockchain)是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案.该技术方案主要让参与系统中的任意多个节点,通过一串使用密码学方法相关联产生的数据块(block),每个数据块中包含了一定时间内的系统全部信息交流数据,并且生成数据指纹用于验证其信息的有效性和链接(chain)下一个数据库块. 区块链是一种类似于NoSQL(非关系型数据库)这样的技术解决方案统称,并不是某种特定技术,能够通过很多编程语言和架构来实现区块