拜占庭将军问题使用区块链解答详解

逍遥 6379

很久很久以前,东欧大陆上有个繁华的拜占庭帝国。


拜占庭帝国派出了 10 支军队去包围另一个帝国。这个敌国的军事实力不如拜占庭,但也能够同时抵御 5 支军队的围攻。


拜占庭的军队想要获胜,就必须有 6 支或 6 支以上的军队同时参与进攻。为了信息一致,拜占庭的 10 支军队要靠通信骑兵骑马相互通信来协商进攻定向和时间。


微信图片_20200106101502.jpg


然而,有个问题却深深地困扰着拜占庭军队的首脑们。因为他们不确定 10 支军队里有没有敌国的内鬼?而内鬼则可能擅自改动进攻意向和进攻时间,在这种情况下,拜占庭的军队要如何确保有 6 支或 6 支以上的军队同时发起进攻?

 

这就存在以下可能性:


1.在没有内鬼的情况下,如果 A 将军提议早晨 10 点进攻,并将这个消息依次传递给其他将军。再如果他幸运地收到了其他 5 位将军的同意,那这事儿就好办了。


2.在没有内鬼的情况下,如果 A 将军提议早晨 10 点进攻,并将这个消息传递给其他将军。但同时,B 将军也发出消息说上午 11 点进攻,C 将军又提议中午 12 点发起进攻。这样,将军们会收到不同的进攻消息。这时就可能 A 将军的提议得到了 3 个支持,B 将军的提议得到了 4 个支持,C 将军的提议也得到了 4 个支持,结果达不成 6 支或 6 支以上军队的一致,拜占庭肯定会失败。总之,发起提议的将军越多,造成的结果越乱。


3.如果有内鬼,内鬼就可能向不同的将军发出不同的进攻提议,例如给 A 说 13 点,给B 14 点,给 C  15 点,他也可能既同意 10 点的进攻提议,也同意 11点、12 点的提议,或者是他将别人的提议进行篡改后再往下传递,总之内鬼会想法促成一个不是 6 支以上军队都同意的决定,那么拜占庭的军队就只会失败。

 

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


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

 

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

 

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

 

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


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


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

 

这样做的好处是:


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


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

 

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


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


标签: 区块链科技

请进入“Zblog后台” -> “畅言” 登陆你的畅言账号。