区块链学习笔记7——什么是拜占庭将军问题?

了解过比特币和区块链的人,多少都听说过拜占庭将军问题,或听说过区块链的一个重要成就正是解决了拜占庭将军问题。但真正明白这个问题的人并不多,甚至知道这个问题实质的人都很罕见。

关于拜占庭问题,我学到的是如下几个知识点:

1.拜占庭将军问题(Byzantine Generals Problem)是一个共识问题,它并不是真实存在的历史事件,而是图灵奖得主Leslie Lamport和他的两位同事于1982年在其论文中提出的一个问题。

2.这个问题其中一种描述是这样的:在很久很久以前,有一个强大的帝国叫作拜占庭,它的军队非常强大,周围有10个小国家,饱受拜占庭帝国的欺压,但是,必须同一时间有6个以上的国家进攻才有可能打败拜占庭帝国,否则就一定会战败。

这个时候,问题就出现了,古时候军队之间的通信完全依赖于人,如果一个国家的军队里有奸细,无论是下令的将军还是传信的通信兵,都可能会使得另外9个国家收到假消息,从而造成作战失败。那么,如果你是其中一个小国的国王,你该如何判断一定会有另外5个以上的国家与你并肩作战呢?毕竟一个不小心,你就亡国了。

3.与拜占庭将军问题高度相似的描述是类两军问题:白军驻扎在沟渠里,蓝军则分散在沟渠两边。白军比任何一支蓝军都更为强大,但是蓝军若能同时合力进攻则能够打败白军。他们不能够远程的沟通,只能派遣通信兵穿过沟渠去通知对方蓝军协商进攻时间。是否存在一个能使蓝军必胜的通信协议,这就是两军问题。

看到这里您可能发现拜占庭将军问题(第一种描述)和两军问题(第二种描述)有一定的相似性,但我们必须注意的是,通信兵得经过敌人的沟渠,在这过程中他可能被捕,也就是说,两军问题中信道是不可靠的,并且其中没有叛徒之说,这就是两军问题和拜占庭将军问题的根本性不同。由此可见,大量混淆了拜占庭将军问题和两军问题的文章并没有充分理解两者。

两军问题的根本问题在于信道的不可靠,反过来说,如果传递消息的信道是可靠的,两军问题可解。然而,并不存在这样一种信道,所以两军问题在经典情境下是不可解的,为什么呢?

倘若1号蓝军(简称1)向2号蓝军(简称2)派出了通信兵,若1要知道2是否收到了自己的信息,1必须要求2给自己传输一个回执,说“你的信息我已经收到了,我同意你提议的明天早上10点9分准时进攻”。

然而,就算2已经送出了这条信息,2也不能确定1就一定会在这个时间进攻,因为2发出的回执1并不一定能够收到。所以,1必须再给2发出一个回执说“我收到了”,但是1也不会知道2是否收到了这样一个回执,所以1还会期待一个2的回执。

4.随着技术的发展,解决两军问题的信道问题已经得到解决,比如TCP协议,比如量子纠缠技术。所以回到拜占庭将军问题本身上来,其实质见下一条。

5.拜占庭将军问题的实质是:军中可能有叛徒,却要保证进攻一致,这里“一致性”才是拜占庭将军问题探讨的内容,如果本来叛徒数量就已经多到了问题不可解的地步,这个就是“反叛”的问题了;同时,我们的目标是忠诚的将军能够达成一致,对于这些忠诚的将军来说,进攻或者撤退都是可以的,只要他们能够达成一致就行。

由此引申到计算领域,发展成了一种容错理论。换句话说我们无法保证没有叛徒,关键是我们要保证叛徒在一定的数量之内,否则必败无疑。我们需要达成某种共识,这也是一种共识机制。

拜占庭将军问题是一个共识问题。

推荐阅读更多精彩内容