拜占庭将军问题

Posted 青冬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拜占庭将军问题相关的知识,希望对你有一定的参考价值。

since: 2021年5月7日23:31

auth: Hadi

参考:

https://zhuanlan.zhihu.com/p/33666461

https://www.zhihu.com/question/23167269

https://zhuanlan.zhihu.com/p/65800882

 

前言

上一次我们了解了Paxos,Paxos是为了解决分布式一致性的问题,但这个问题的源头也被抽象成了一个故事,拜占庭将军问题。这个问题名字可能很多接触区块链,喜欢梭哈的朋友,应该都听说过;某某区块链,某某币解决了拜占庭将军问题,那么究竟什么事拜占庭将军问题 The Byzantine Generals Problem 呢?

 

什么是拜占庭将军问题

Leslie Lamport (也是Paxos提出者)为了抽象的描述 分布式系统一致性的问题 在论文中抽象出来的一个著名的例子。

拜占庭帝国想要攻击一个强大的敌人,为此派出了10只军队去包围敌人。虽然敌人已经被包围,但也在驻扎地建立起了坚实的防御工事,拜占庭帝国想要打败他,就必须同时进行6只军队的同时袭击,而10只军队在各自无秩序的攻击都是毫无胜算,必须一半以上的同时袭击才能够战胜敌军。

他们分散在各个方位,只能依靠通讯的骑兵进行协商是否进攻或者进攻时间。在这种状态下,拜占庭帝国要怎么获取胜利?

直接商量出个共同时间发起进攻 或 完全不进攻就可。

但如果将军中有人是叛徒呢?他们给各个其他人的结果并不相同导致其他人获取到了错误情报导致部分发起进攻,部分放弃进攻,部分进攻时间错误。

拜占庭将军问题中,并不去考虑通讯是否会被截获或者篡改等,也就是说消息传递一定没有问题。

这个假设必须存在,如果不存在则一致性是不可能实现。

 

问题分析

单从上面的说明,可能无法理解问题的复杂性,在这里进行一些拆解:

消息差异

假如将军A发起了一个进攻提议【S时刻发起进攻,你们是否愿意假如】由通讯兵分别告诉其他将军。

如果比较幸运,通讯兵收到了包括将军A在内的6名以上的同意,则S时刻就可以发起进攻。

如果不幸运,比如其他将军也在发起进攻提议,S+1时刻发起进攻,覆盖了将军A的请求等等,造成可能不同将军认可的方案不一致,每个人都同意属于自己的方案或某一个人的方案,最终并没有达成一致性。化解为Basic-Paxos。

 

叛徒

当将军中有叛徒的情况出现,可能叛徒会向将军A说S时刻,向将军B说S+1时刻,……这样每个将军接受到的时刻不一致,导致歼灭任务失败。或者叛徒可能接受到各个将军的请求,全部都进行答应,最后不发起进攻。

在叛徒的策略中,很可能少量的叛徒就可以破坏占据多数正常节点一致性的达成,将忠诚的将军们耍得团团转。这种叛徒发送前后不一致的进攻提议,称之为 拜占庭错误,而能够处理拜占庭错误的这种容错性称之为 Byzantine fault tolerance BFT。

 

中本聪的解决方案

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

中本聪在比特币中创造性的引入了 “工作量证明” POW proof of work, 来解决问题。工作量证明,后续会进行讲解。

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

 

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

BTC就通过这样实现了单个区块达成共识的方法。按照这个逻辑可以进行所有区块的推理。

 

如果我们将拜占庭将军问题稍微更改一下:假设攻下一个城堡需要发起多次进攻,那么每次进攻的提议必须基于之前最多次的胜利进攻下进行提出的。这样约定之后,将军A在收到进攻提议的时候,就会先检查一下这个提议是不是基于最多的胜利提出的,如果不是,将军A就不会同意这样的提议;如果是的,将军A才会将这次提议进行记录。

这个也是BTC网络最长链选择。(后续出)

 

 

经济学分析

工作量证明其实相当于提到了做叛徒(发布虚假区块)的成本,在工作量证明下,只有第一个完成证明的节点才能进行广播区块,竞争难度非常大,需要很高的算力,如果不成功其算力就会被白白浪费。如果有这样的算力还不如不进行背叛操作,这样也能够获得巨大的收益,导致实际也不会有做叛徒的动机,让整个系统更加的稳定。

对于拜占庭将军来说,做叛徒和直接攻下城堡,哪个收益更高?是需要进行权衡的。

 

很多人批评POW的方法会造成巨大的店里浪费,促使人们去探索新的解决一致性共识问题的机制:POS 权益证明机制Proof of Stake就是一个代表。

诶,ETH不就从POW转为POS么,19年提出;前几天转了吧?

 

 

 

扩展

对于我来说,个人思考其问题的本质就是,如何创建一个社区,能够使得所有人达成一个共识,并且能够维护这个共识不受破坏者的恶意攻击的方法。从而创建出完全的去中心化的产品,也就是解决拜占庭将军问题。

无论是POW 还是POS,他们都是在进行不断的优化,达成去中心化的自由民主实现罢了。

ps:本人完全的精英制理论坚信者,完全的自由民主只会是被操控的民粹,而由于人的本性和缺陷等原因,只有受到管控的精英制才是最好的制度,没错就是我党制度。

 

后记

我们常常在思考,BTC带来了什么?我个人认为其带来的是一种新的思想,是从无到有的去中心化的分布式系统一致性解决方案。他可以不用创建于金融之中,完全可能用于一个高度自由、崇高思想的建设之中,比如构建科学发展史、共同进化理论等等,而现在只是局限在于金融,发展于金融而已。

在未来,拜占庭将军问题可能是开放理念思想的基础性架构,宣传三观的的得力武器。

以上是关于拜占庭将军问题的主要内容,如果未能解决你的问题,请参考以下文章

易理解的拜占庭将军问题——深入剖析

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

什么是拜占庭将军问题

什么是拜占庭将军问题

什么是拜占庭将军问题

转载文章拜占庭将军问题深入探讨