美文网首页比特币&区块链研究
拜占庭将军问题通俗讲解——教你从高大上的视角解释比特币和区块链

拜占庭将军问题通俗讲解——教你从高大上的视角解释比特币和区块链

作者: 1a8661c5a646 | 来源:发表于2018-02-24 08:57 被阅读435次

    第0章 引言

    要想真正深刻了解比特币和区块链,拜占庭将军问题是一个绕不过去的知识点。这篇文章让你秒懂啥时是这个奇怪的将军问题,以及它和比特币区块链的关系。

    第1章 先讲一个在我身上真实发生过的丢人的拜占庭将军事故案例

    你们有没有遇到过那种事,先说好一起做一件事,但你干了,其他人却临阵脱逃,导致你身败名裂的事情。

    我遇到过。

    那是在2010年,我刚加入一家私有企业不久,在这之前我是在国有企业上班的。在这家私有企业我遇到了一个在国有企业经常会遇到的问题。

    有一个同事——很老的同事,从国企退休返聘到这家私企——很坏。有多坏呢?具体干了啥坏事就不讲了,反正很坏,到了我们部门6个人,5个人都恨死他了。但是领导层不知道,因为他在领导面前表现的很好,领导还多次发邮件给all表扬他呢。我呢就很奇怪,因为不服这种欺下瞒上的傻X——国企有的是,几次和他的工作配合都让我非常不爽,他明摆着要阻碍我工作。我决定向上级通报这个坏同事的行为,一定要解决掉这种人渣,不然我就离职。

    我和另外三个和我同级别的同事商量好,我来挑头,在公司会议上陈述这个坏同事的种种坏事,这三个同事到时候附和我就好了。我们说的好好的,我挑头,他们三个附和我就行了,让上层领导知道我们这位同事的真实情况。

    我大张旗鼓地书面写好了这位坏同事的9条罪证,然后在一个会议上读出来。会议一共7个人,我们部门6个人,还有公司总经理的旁听。哈哈。我真读出来了。

    结果。。。。。。。。Fxxkkkkkkk &^*^*$&#$&^@*$$&&&*@(()@&^#

    他们三个人全部背叛了我,他们都这么说,哎呀,大家和气点吧,不要紧了,体谅下老同志啊,都是为了公司好,只是做事方式不一样罢了。。。。。。

    他们这几个傻逼,怂包,叛徒,王八蛋。

    事后,我可就倒霉了,这位坏同事在接下来的两周的周会上,给我准备了五条罪证,隔着会议桌,喷我一脸吐沫。别的同事在两次会议上都强摁着我说,让人家说完。。。。

    上面这个故事,就是一个经典的拜占庭将军问题。

    第2章 现在将上面的悲剧抽象出来

    上面这个故事有以下特点。

    第一,我的敌人是很强大的,这位坏同事在领导层的声誉很好。除非弹劾他的人数众多,否则就不可能成功的。

    第二,我希望获得的支持,也就是我的三个同事,我们四个人,都是相互独立的。没有谁是领导,我们地位都是平等的,没有权威。

    第三,如果我们四个人合力,共同弹劾这位坏同事,我的目标是可以达成的。

    第四,如果我们四个人人心不齐,我挑头,他们不跟进,我是要被骂死的。

    我们对上述描述进行抽象成一句话来表达,就是

    多个完全平等的人(没有中心化权威),达成一致性的行动,则行动成功,如果达不成一致性行动,则失败。

    我们再升华一下

    如何让众多完全平等的节点针对某一个状态达成统一的共识。

    这就是拜占庭将军问题的本质。

    第3章 拜占庭将军问题

    拜占庭帝国派出10支军队包围了一个城市。城市里有很多金银财宝,拜占庭要去抢这些钱。基于地形的原因,这10支军队不可能集合在一起单点突破,必须在分开包围状态下同时攻击。

    城市守军非常强大,务必至少有6支军队同时前往攻大,拜占庭一方才能获胜。任何少于6支军队数量的进攻都会失败。

    这10支军队依赖于通信兵来协商进攻意向。但问题是,这10支军队有可能出现叛徒,被这个城市里的敌军收买。

    拜占庭将军们能否找到一种办法让他们能够远程协商,从而攻破这座城市,抢劫里面的财产呢?

    这就是著名的拜占庭将军问题。

    这个问题是非常重要的,这是互联网诞生后技术进化上的一个重要障碍。在互联网上就是一群完全平等的节点,只能通过通信来协调,如何在没有权威,不能相互信任的基础上,对某个事情(状态)达成一致性意见,这是非常有意义的。

    这是一个很难的问题(要不我也不会被我那三个同事耍了),这个问题是1982年提出来的,历经近30多年,没有人找到答案(也有,但影响力不大),直到中本聪在2009年给出了一个完美的答案。这就答案就是比特币。

    第4章 一个拜占庭将军问题的解法

    现在我们假设这10个将军就是互联网上的10台电脑,可以相互通信。大家定义一个通信格式,内容就是分两块,第一是『进攻』; 第二是『署名』。

    将军1将决定进攻,他写好通信内容,『进攻,将军1』,然后广播出去。所有其他将军都可以验证这确实是将军1的署名,因为可以追踪到这位将军的身份,所以我们认定他最终条件成熟是一定会进攻的,否则他在拜占庭的亲戚就会被皇帝杀全家。这就是目前的公私钥签名机制,这是解决拜占庭将军问题的重要知识。

    如果将军2决定也进攻,那他就可以在将军1的通信内容后面也附上自己的信,写『进攻,将军2』。然后广播。

    如果将军3决定也进攻,就在将军2的广播信后面再附上自己的信,写『进攻,将军3』。

    。。。。

    如果一当这条广播的信累积到了六个将军的附信和签名,那就进攻。最终就可以攻破敌军城市,抢到财宝。

    以上解题的办法还有一个缺陷,就是如何保证在一个时间点上只有一个将军在信后面附上自己的内容。如果将军1发起广播后,其他将军都在将军1的信后面附上自己的内容,然后广播给别人,这样容易乱。可能你觉得才10个将军嘛,大家数一数不就知道够不够6个了吗?但真实的互联网世界是,你不知道到底有多少个节点在线,而那些突然从下线状态重新上线的节点又如何去寻找最新的『共识』呢?

    比特币的出现,就弥补了这个问题,将拜占庭将军问题的最后一个环节解决了。比特币使用的叫工作量证明。

    第5章 比特币的共识机制

    比特币是一个公开的账本,记录的就是持有比特币的人之间相互的转账记录。这套账本是要实时更新的,但是这套账本是如何让全球各地那么多相互不认识的人达成一个统一的共识,为什么这么多人都认可这一套账本?

    这就是一个拜占庭将军问题。

    全世界各地的人,如何才能就某一个记录着所有比特币历史交易记录的账本达成『统一的共识』?

    解决这个问题的办法就叫共识机制,比特币使用的叫工作量证明机制。

    这个机制简单描述是这样的,

    第一,任何人都可以参与到维护(读取、验证、更新)这套账本,只要你遵守相应的规则;

    第二,只要你完成了一定的『工作量』,那你就可以在这套账本上更新一页,将当时和之前还未入账的所有比特币交易记录在这一页上。并且通过互联网广播给其他人。我们先不用管这个工作量是什么,反正就是一个工作;

    第三,其他人都可以验证你的更新页,如果他们都认可你的更新,就会在你这一页的基础上再做『工作量』,以博取记下一页的权力。

    就这样,所有人都试图找到这条『最长链』,并且在这条最长链后面做『工作量』,以博取下一页记账权,而这条『最长链』就是一个共识。在『最长链』后面做『工作量』,就是表达『共识的方式』。而找出最长链是很简单的工作,数一个数就好了。所以寻找共识变得很容易。

    其实就是这么简单。所有的区块链都有类似的共识机制,所有的区块链产品都针对拜占庭将军问题的一种模拟,并提供一种解法。

    但这么描述是一个最简化的描述,这是可以供您向他人解释区块链时的一个简化版本。如果您想详细知识里面的细节,你还需要补充比特币的交易、区块、时间戳、哈希、工作量、区块链、随机数。。。。。。这些知识,反正很多,写不完。

    第6章 结束语

    过年了,明天你表弟、表妹来你家时,拿这个去装X吧。

    如果你去外婆家做空,听到表哥表姐吹牛比特币和区块链,就拿我那个丢人的案例教育他们。不用客气,我不怕丢人。

    另请阅读:

    《比特币基础课程七——比特币系统由谁来记账:工作量证明机制》

    《比特币基础课程一——从基础概念搭建理解比特币》

    ..................................................................................................................................................

    (如果您觉得好,欢迎关注我的公众号: 闪电HSL,也欢迎加我微信号:HSL13116885)

    相关文章

      网友评论

      • 编程灯塔2:内容深入浅出,很棒。还有 把同事当朋友,会死的很惨,有过类似的经历。

      本文标题:拜占庭将军问题通俗讲解——教你从高大上的视角解释比特币和区块链

      本文链接:https://www.haomeiwen.com/subject/xqzfxftx.html