井英俱乐部

曾经无法解决的拜占庭将军问题

2019-04-26  本文已影响41人  爬来爬去的小蚂蚁

在互联网里有个很麻烦的问题,叫拜占庭将军问题。它提出了一个疑问,在所有平等的通信节点中,如果发生信息丢失、或被篡改,整个网络怎么维持工作。

为了方便大家理解,它的提出人兰伯特先生用中世纪活跃在地中海东岸的拜占庭帝国的模拟场景来举例说明,因此这个互联网世界的论点被称为拜占庭问题。

假设有十个拜占庭将军分别率领十支军队包围了敌人的一个城市,他们分散在敌城周边,随时准备进攻。

由于敌人也不是吃干饭的,必须有六支以上的拜占庭军队联合行动才能击败敌军占领城市。

这时候拜占庭将军们就将面临一个问题了。

比如一号将军决定在明天下午一点发动进攻,为保证胜利,他必须把行动时间和地点通知其余九位将军,让他们和自己同时发起攻击。

这个信息是要靠通信兵来传达的,通信兵是不是可靠,或者是不是傻子记性特别差,都不能保证,而且一号将军也不能确定其余九位将军中,有没有人已经被敌军收买叛变了。

一个看似简单的战役,在这里由于出现这些问题,变得复杂起来。

比如去二号将军那里的通信兵已经被敌军收买了,本来明天下午一点的总攻时间,被他擅自更改到后天下午一点。

这就等于二号将军已经退出了这次行动,如果到明天下午一点,收到正确信息的将军只有五个,那么拜占庭大军就会被敌人击败。

这里可能大家还会说,哪有那么傻的将军,二号将军再派个传令兵去一号将军哪里核实一下就可以了嘛。

对不起,提出这个问题的科学家真不是傻子,拜占庭将军问题,是在信息通道绝对没问题的情况下的假设,也就是说不管收到的是正确的、还是错误的信息,对方肯定能收到信息。

要是你说派人核实,那就是另一个事了,这个叫作“二军问题”。也很复杂,稍微说一下:

比如一号将军和二号将军之间,有敌军驻扎或者频繁巡逻,为了安全起见,二位将军不能冒险去对方那里开会商量,免得在路上被敌军干掉。那就得派通信兵来负责联系。

于是,这个看似简单的事情,在这种通信通道里就会出现一个很无聊循环,具体如下:话说二号将军接到了错误的指令信息后,派出一个通信兵去一号将军那里核实:“我家将军叫我来问问,您是不是叫我们后天下午一点一起进攻?”

一号将军一听,气的暴跳如雷,跟二号将军的通信兵说:“犊瘪子玩意儿,老子非宰了那个通信兵不可,我说的是明天下午一点。”

二号通信兵回去和二号将军一说,二号将军一听,还好还好,幸亏我聪明,派了个人核实一下。赶紧再派一个人去一号将军那里通知一声,我同意明天下午一点和你一起进攻。

好了,无聊的循环开始了。

一号将军也学聪明了,也派了个通信兵去二号将军那里回答:“我知道你同意明天下午一点一起进攻了。”

二号将军不放心,于是又派了一个通信兵去一号将军哪里说:“OK,我知道你知道我同意明天下午一起进攻了。”

一号又派通信兵去二号,“好的,我知道你知道我知道你同意明天下午一起进攻了。”

二号又来,“行,我知道你知道我知道你知道我明天下午一起进攻了”

一号再来:“我知道你知道我知道你知道我知道……”

二号:“我知道你知道我知道………………………”

一号:“我知道………………………………………………”

二号:“……………………………………………………………”

一号……………………………………………………………………

怎么感觉有点混字数的嫌疑。

看起来网络通信是个没法确认的大麻烦,要是通信成了这个样子,我们就没法干活了。不过我们这里就先不说“二军问题”的解决办法了,大概知道这事挺麻烦就行。

那么怎么解决拜占庭问题呢?

拜占庭将军问题在现实里是不可能发生的,将军和通信兵的家属们都在国内呢,谁敢叛变或者不负责任的瞎传消息,导致大军惨败,拜占庭皇帝可以杀了他全家。

在区块链技术出现之前,这个问题在互联网中又是无法解决的。你不可能说为了保证各个节点的忠实性,让他们交押金,谁敢乱传信息就扣谁的钱吧。

这里要注意一下,我们说的是在所有节点平等的互联网里无法解决这个拜占庭将军问题。大家都是将军,都是平等的,没有谁是权威或者主将。

上面所举得例子还只是十个拜占庭将军的通信兵不靠谱,还没说这十个平等的将军搞在一起,能搞出多少幺蛾子来呢。

比如二号将军平时就是看不惯一号将军,凭啥你说明天下午一点进攻,我就得屁颠屁颠的跟着你卖命啊,我偏不,你明天自己去吧。

好了,这种人在十个将军里,只要有五个,拜占庭大军就必败无疑。

现实中的互联网节点是不平等的,所以不存在这个问题。比如一个新闻网站的主编发个邮件给下面的编辑,让他发篇文章,说明天会下雨。结果编辑不知道哪根筋搭错了,像那个叛变的通信兵一样,昧着良心说:明天晴空万里,后天会下雨。

现实世界里的互联网公司处理这种事很简单,把这个编辑开除了事,杀鸡儆猴,看谁以后还敢乱发新闻,就跟现实中的拜占庭皇帝一样。

于是,所有的互联网公司都是中心化而非去中心化分布式的,因为在没有区块链技术之前,没有人能解决拜占庭问题,也就是没人能想出办法来,让一群平等的、互不相识的人(节点)为了共同的一个社区或者公司分工协作,共同发展。

区块链是怎么做到解决拜占庭将军问题的呢?怎么能够让一群互不相识、从未谋面的人,在一个体系里以平等的身份,共同努力维护这个系统呢?

靠价值共识,以前的文章说过一些比特币的问题。大家都知道比特币是有价值的,一个比特币好几万人民币呢。

如果现在你是一个比特币的矿工,我相信你是绝对不会故意自己去在这个系统里为非作歹、故意捣乱的,而且你一个人也不可能有这个能力。

但是,如果像你这样的人多了,超过了比特币网络节点的百分之五十一,你们这帮捣乱份子神经病发了,一起决定要毁掉比特币,那我也没办法。

不过那你就是在跟自己过不去,自己让自己花大价钱买来的矿机、耗时耗电的辛辛苦苦挖来的比特币变成一串毫无价值的代码,对你有什么好处?

因此在比特币的系统里,是没有拜占庭将军问题的,没有哪个通信节点会传出不实的信息,做出不利于自己、不利于比特币系统的决定。就算有疯子这么干了,比特币的系统也不会承认他发出区块,大家只认正常人维护的最长链。

当然,就像现在的公司竞争一样,如果有一个公司或者个人,想出钱收买足够的比特币叛徒,来搞垮比特币,那也不是不行。

截止2018年2月,比特币的全网算力为:22.7EH/s(1EH=1000PH=1000000TH),按照比特大陆蚂蚁S9型矿机的13.5T的算力计算:22.7*1000*1000T /13.5=1680000台全球约有168万台蚂蚁S9矿机在运行,

考虑到还有很多矿工用的是老型号的矿机,保守估计吧,全网共有200万台矿机。

要改变比特币区块链的记录,需要超过51%的节点达成共识,那你就需要收买102万台矿机。

现在比特币大约挖出了80%,约1600万枚。也就是每个矿机平均每人8个比特币。

现在可以核算成本了,蚂蚁S9矿机大约14万一台,比特币一个大约是42000元人民币,8个336000元,一台矿机你得先陪人家48万。102万台就是4896亿人民币。

还没计算人家挖矿过程中的电费,所有矿机一年的电费和挪威全国一年的电费相当。102万台矿机,挖了几年赔几年,自己去算吧。

这还只是你赔给人矿工的本钱,102万矿工总得有利可图才会跟着你干这事吧,不然谁谁疯了,把自己挣钱的系统摧毁掉?那这个数字还得翻几番才有诱惑力吧,翻五倍就是二万五千亿。

算到这里,你觉得代价已经够大了吧,还没完呢。还没有计算拥有大量比特币的大佬们,在受到攻击时的反击力量,这就不知道还得往上翻多少倍,你才能击败他们了,因为他们背后还有98万没被收买的矿工,这个力量无法估算。

而且就算你成功了,那剩下的98万矿工每人都保留了那条正确的区块链,完全可以另起炉灶,继续他们的游戏,这在区块链技术里,叫做分叉。

有没有一种“抽刀断水水更流”的感觉?

现在,你觉得谁有这个本钱和动力去破坏这条区块链?

上一篇下一篇

猜你喜欢

热点阅读