学习
实践
活动
工具
TVP
写文章

从“拜占庭将军问题”看区块链共识机制

让人生,让人死,让人痴迷,让人疯狂。

这就是传说中繁华与没落,绝望与救赎并存的东罗马帝国首都——拜占庭。

在遥远的拜占庭时代,有一个富饶的城邦,金银珠宝绫罗绸缎应有尽有,它的领主哆啦A梦独享着这一切奢华与荣耀。而在城邦的外围,四位拜占庭将军大雄、胖虎、小夫和静香都觊觎着哆啦A梦的财富,于是他们决定联手攻占哆啦A梦的城邦。

根据双方的实力对比,必须有超过半数的将军同时发起进攻方能克敌制胜,因此获胜条件就是四人中至少三个人可以就进攻时间达成一致。那么四位将军的胜算有多少呢?

这个问题的答案就要取决于四个人的合作方式了,如果是集中式系统,有一个盟主,比如胖虎(相当于中央服务器),那么他们的胜利是毫无悬念的,因为就进攻时间达成一致非常简单,只要胖虎召集大雄、小夫和静香开个会讨论一下就可以了,即使大家意见有分歧胖虎也可以在最后予以定夺。

下面让我们回到拜占庭将军问题的假设里,在不基于信任的分布式网络中,四位将军的胜算又如何呢?

首先由于四位将军之间缺乏信任,因此聚到小黑屋里开个密谋会的可能性被排除了(一旦在小黑屋里被胖虎绑架了怎么办?);其次由于没有盟主,四个人的意见都会被同等的看重。在这种情况下,四位将军只能通过信使在各自营地之间传递消息,来商定进攻时间了。比如大雄觉得早上七点是发动进攻的好时机,他就会派信使将自己的意见告诉胖虎、小夫和静香,与此同时,胖虎可能认为晚上九点发动突袭更好,小夫更喜欢下午三点出击,而静香希望是上午十点,他们三人也会在同一时间派出自己的信使。这样一来,在第一轮通信结束后,四位将军每个人都有了四个可供选择的进攻时间,他们各自要在下一轮通信中把自己选定的时间告知另外三人。由于四个人的决策都是独立做出的,因此最终的选择结果就有256种可能,而只有当三人以上都恰好选择了同一时间的时候,共识才被达成,而这样的结果才64种,也就是说达成共识的概率仅为1/4。这还只是四位将军的情况,如果将军的人数是10人,100人,1000人呢?我们稍加计算就可以发现随着人数的增加,达成共识的希望会变得越来越渺茫。

如何利用区块链解决这个问题:

我们给每个将军都配一台电脑。大家在电脑上发送信息,这样就不用派通信兵出去给其他将军传令了,先把时间节约下来。

然后我们再设定几个规则:

1.一个时间段内只能发起一个消息。比如 九点到 九 点一刻,只能发出一个签名并盖上时间章的进攻消息,别的将军想要发起别的进攻消息,那对不起,你得 九 点一刻以后才行。

2.消息传递出去以后,收到进攻消息的将军必须也要在消息上签名,确认各自的身份,并盖上时间印章,然后把这个信息拷贝下来传递给其他将军。

3.为防止有将军签假名,信息都加了密。系统中各个将军都有一个公用密码和私人密码,公用密码是公开的。小夫将消息传递给 静香 时,使用 静香 的公用密码加密,而 静香 则要用他的私人密码才能解密。静香 签完名后,所有将军都可以通过她的公用密码来验证他签名的真实性。

4.大家都能从各自的电脑上看到信息的传递进度。

这样做的好处是:

1.信息里每个将军都要签名验证身份,如果有将军篡改了消息,大家就能看到是哪些将军篡改了消息。

2.尽管有不一致的消息。但只要一个消息得到了2 名或 2 名以上将军的同意,那么大家就达成了共识。

这样每个将军都有一个与其他将军实时同步的消息记录,解决了内奸问题,能让大家轻松地达成共识。

生活中有许多类似拜占庭将军的信任问题,将上面的解决方法带进去,这样你对区块链是不是有了更深的了解了呢?

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180906A0PZYB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

扫码关注腾讯云开发者

领取腾讯云代金券