今日分享:拜占庭将军问题

拜占庭将军问题是容错计算中的一个老问题,由莱斯利·兰伯特(Leslie Lamport)等人在1982年提出。拜占庭帝国是5~15世纪的东罗马帝国,即现在的土耳其。拜占庭城邦拥有巨大的财富,使它的十个邻邦垂涎已久。但是拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个城邦的入侵行动都会失败,而入侵者的军队也会被歼灭,使其自身反而容易遭到其他九个城邦的入侵。这十个邻邦之间也互相觊觎对方的财富并经常爆发战争。拜占庭的防御能力如此之强,十个邻邦中的至少一半同时进攻,才能攻破。也就是说,如果六个或者更多的邻邦一起进攻,就会成功并获得拜占庭的财富。然而,如果其中有一个或者更多邻邦发生背叛答应一起入侵但在其他人进攻的时候又不干了,会导致只有五支或者更少的军队在同时进攻,那么所有的进攻军队都会被歼灭,并随后被其他邻邦所劫掠。因此,这是一个由不互相信任的各个邻邦构成的分布式网络,每一方都小心行事,因为稍有不慎,就会给自己带来灾难。为了获取拜占庭的巨额财富,这些邻邦分散在拜占庭的周围,依靠士兵相互通信来协商进攻目标及进攻时间。这些邻邦将军想要攻克拜占庭,都面临着一个困扰,也就是拜占庭将军问题。

邻邦将军不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。在这种状态下,将军们能否找到一种分布式协议进行远程协商,进而赢取拜占庭城堡攻克战役的胜利呢?这就是拜占庭将军问题。

针对拜占庭将军问题的解决方法包括:口头协议算法、书面协议算法等。口头协议算法的核心思想如下:要求每个被发送的消息都能被正确投递,信息接收者知道消息的发送者身份,知道缺少的消息信息。采用口头协议算法,若叛徒数少于1/3,则拜占庭将军问题可解。也就是说,若叛徒数为m,当将军总数n至少为3m+1时,问题可解。然而,口头协议算法存在明显的缺点,那就是消息不能追根溯源。为解决该问题,提出了书面协议算法。该算法要求签名不可伪造,一旦被篡改即可发现,同时任何人都可以验证签名的可靠性。书面协议算法也不能完全解决拜占庭将军问题。因为该算法没有考虑信息传输时延、其签名体系难以实现且签名消息记录的保存难以摆脱中心化机构。

与已有方法相比,区块链技术将是更完美的解决方案。区块链是怎样来解决这个问题的呢?它为发送信息加入了成本,降低了信息传递的速率,并加入了一个随机数以保证在一段时间内只有一个矿工可以进行传播。它加入的成本就是“工作量”,区块链矿工必须完成一个随机哈希算法的计算工作量才能向各城邦传播消息。

当用户向网络输入一笔交易的时候,他们使用内嵌在客户端的标准公钥加密工具为这笔交易签名,这好比拜占庭将军问题中他们用来签名和验证消息时使用的“印章”。因此,哈希计算速率的限制,加上公钥加密,使一个不可信网络变成了一个可信的网络,使所有参与者可以在某些事情上达成一致。拜占庭将军问题的区块链解决方案可以推广到任何在分布式网络上缺乏信任的领域,比如说域名、投票选举或其他需要分布式协议的地方。

猜你喜欢

转载自blog.csdn.net/weixin_42874184/article/details/81509464