拜占庭将军问题可以用区块链解决?

拜占庭将军问题,是由莱斯利·兰波特在其同名论文中提出的分散式对等网络

通讯容错问题。

这是用来解释一致性问题的一个虚构模型。

这个故事起源于古代东罗马帝国的帝都,一组拜占庭将军分别各带领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻,而另一部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。

因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将会选择进攻或是撤退,相应的资讯通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的资讯就可以知道共同的投票结果而决定行动策略。不过由于这些将军中可能存在叛徒,而这些叛徒又努力地尝试向不同将军发送不同的消息,扰乱大家达成一致的决定。

那么,向不同的将军发送不同的消息又怎么扰乱将军们达成一致的决定呢?

将军们不仅可能向较为糟糕的策略投票,还可能选择性地传送投票资讯。假设有9位将军投票,其中1名叛徒。8名忠诚的将军中出现了4人投进攻,4人投撤离的情况。这时候叛徒可能故意给4名投进攻的将军送信表示投票进攻,而给4名投撤离的将军送信表示投撤离。这样一来在4名投进攻的将领看来,投票结果是5人投进攻,从而发起进攻;而在4名投撤离的将军看来则是5人投撤离。这样各支军队的一致协同就遭到了破坏。

由于将军之间需要通过信使通讯,叛变将军可能通过伪造信件来以其他将军的身份传送假投票。而即使在保证所有将军忠诚的情况下,也不能排除信使被敌人截杀,甚至被敌人间谍替换等情况。因此很难通过保证人员可靠性及通讯可靠性来解决问题。这就是拜占庭将军的故事。

那这个故事和现实之间有什么联系呢?

上述的故事对映到电脑系统里,将军便成了电脑,而信使就是通讯系统。虽然上述的问题涉及了电子化的决策支援与资讯安全,却没办法单纯的用密码学与数码签章来解决。因为电路错误仍可能影响整个加密过程,这不是密码学与数码签章演算法在解决的问题。因此电脑就有可能将错误的结果送出去,亦可能导致错误的决策。

在出现比特币之前,认为在「拜占庭将军」的问题可以在「将军与士官的问题」里解决,以降低将军问题的发生。而所谓的「将军与士官的问题」,就是探讨将军与他的士官是否能忠实实行命令。

其中一个解决方案认为即使出现了伪造或错误的讯息。只要有问题的将军的数量不到三分之一,仍可以达到「拜占庭容错」。原因是把同样的标准下放到「将军与士官的问题」时,在背叛的将军与士官不足三分之一的情况下,有问题的将军与士官可以很容易的被纠出来。比如当其中一位将军,分别向手下的士官下达了进攻与撤退的命令。即使手下的士官们交换所收到的命令,却仍不能确定将军是否有问题,因为士官们可能将窜改了的讯息传给对方。以函数来表示,若将军与士官的总数为n,n里面背叛者的数量为t,则只要n > 3 t就

可以达到所谓的「拜占庭容错」。

那么在现实中是怎么解决拜占庭容错的问题的呢?

1999年,卡斯托(Miguel Castro)与李斯克夫(Barbara Liskov)提出了实用拜占庭容错(PBFT)演算法。该演算法能提供高效能的运算,使得系统

可以每秒处理成千的请求,比起旧式系统快了一些。

区块链在这个问题上有什么更好的解决方案吗?

区块链的共识算法的核心就是解决拜占庭将军问题也就是分布式网络一致性问题。在实际的区块链系统中,解决拜占庭问题所采用的共识机制有好几方

法,提供了将军们投票顺序的不同解决方法。

以比特币为例,各节点与终端都运算着区块链来达成工作量证明(PoW)。工作量证明的连结是解决比特币系统中拜占庭问题的关键,避免有问题的结点(即之前提到的「将军里的叛徒」)破坏数码货币系统里交易账单的正确性,工作量证明就是按照将军们平时的勤劳程度决定投票顺序,这对整个系统的正常运作有着重要的意义。

又以夸克区块链为例,夸克区块链的网络采用了权益证明机制(PoS),按照将军们各自的财富所有程度决定投票顺序,也能够达到拜占庭容错。

总结:

拜占庭问题其实就是:所有将军如何才能达成共识去攻打或撤退的问题。那么在我们现实生活中就是一个信息系统如何解决延迟问题,一致性问题,以及身份确认问题。

互联网技术的存在,让信息在传输过程中,基本没有延迟(或说延迟很小小到可以基本忽略),从而解决了通讯延迟的问题。区块链使用共识算法使得作假的成本随着时间的增长呈指数上升,解决了一致性问题。同时各种非对称密钥的密码学,也解决了身份确认的问题。

至少这个系统解决的问题不仅仅是信息领域,同时在一些飞行器(如波音777)的系统中,也有使用拜占庭容错。而且由于飞机是即时系统,容错的功能也要能尽快回复,比如即使系统中有错误发生,容错系统也只能做出一微秒以内的延迟。

一些航天飞船的飞行系统甚至将容错功能放到整个系统的设计之中。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();