区块链技术公司谈什么是拜占庭将军问题

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

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

  拜占庭帝国是5~15世纪的东罗马帝国,即现在的土耳其伊斯坦布尔。拜占庭城邦拥有巨大的财富,令它的十个邻邦垂涎已久。但是拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个城邦的入侵行动都会失败,而入侵者的军队也会被歼灭,使得其自身反而容易遭到其他九个城邦的入侵。这十个城邦之间也互相觊觎对方的财富并经常爆发战争。拜占庭的防御能力如此之强,十个邻邦中的至少一半同时进攻,才能攻破。也就是说,如果六个或者更多的邻邦一起进攻,他们就会成功并获得拜占庭的财富。然而,如果其中有一个或者更多邻邦发生背叛,答应一起入侵但在其他人进攻的时候又不干了,会导致只有五支或者更少的军队在同时进攻,那么所有的进攻军队都会被歼灭,并随后被其他邻邦所劫掠。

  因此,这是一个由不互相信任的各个邻邦构成的分布式网络,每一方都小心行事,因为稍有不慎,就会给自己带来灾难。为了获取拜占庭的巨额财富,这些邻邦分散在拜占庭的周围,依靠士兵相互通信来协商进攻目的及进攻时间。这些邻邦将军想要攻克拜占庭,面临着一个困扰,也就是拜占庭将军问题:邻邦将军不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。在这种状态下,将军们能否找到一种分布式协议来进行远程协商,达成统一共识机制,进而赢取拜占庭城堡攻克战役的胜利呢,这就是拜占庭将军问题。

  这个例子大意是这样的:

  拜占庭帝国想要进攻一个强大的敌人,为此派出了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。

猜你喜欢

转载自blog.csdn.net/yy_dreamer/article/details/81115056
今日推荐