回想上面的實例,四只豺狼想要實現同時進攻或者同時撤退,必須達成共識。針對這種情況,科學家們想出了兩個解決方案。
第一個是口頭協議。在口頭協議中需要注意以下三點是默認條件。
1.每個信息都能夠被準確接收
2.接收者知道是誰發送給他的
3.誰沒有發送消息大家都知道
口頭協議的算法原理比較簡單,為方便大家理解,舉個例子。
假如一共有10個節點,節點1對其他9個節點都發送了消息,然后節點2-10將消息進行轉達,每個節點都是信息的發送者和轉達者,這樣一輪下來,每個節點手上都會有10條信息(包括自己手里的信息)。
接下來每個節點根據自己手中的信息,選擇多數人的投票結果行動即可,這個時候即便有間諜,因為少數服從多數的原則,只要聽大多數好節點的話就是正確的。
但是這種算法有著很大的缺陷,首先是計算工作量大,每一個節點都需要去和其他節點進行溝通,隨著節點數量增加,工作量成幾何增長。
再者就是無法查出哪個節點是壞節點,無法排除故障。因為口頭協議無法將歷史消息進行記錄,也就是我們常說的不可追溯,即便間諜發送不一致的消息,也無法追查到。
第二個就是書面協議。這里同樣隱含了一些條件。
節點可以進行簽字,并且大家都能夠識別出這個簽字是否是本人,換種說法就是如果有人篡改簽字大家可以知道。
這樣就簡單多了,就好比這10個節點是通過書信來聯系的,假設節點1建議明天上午10點進攻。
同意節點1的就簽個字,然后再給后面的,以此類推,直至所有人手里堆滿了10封信,這個時候情況就與口頭協議類似了。
書面協議相對比口頭協議就是增加了一個認證機制,所有的消息都有記錄。一旦發現有人所給出的信息不一致,就是追查間諜。
但是書面協議也面臨諸多問題,首先就是簽名的不可偽造,真實情況復雜多變,連價值上億的名畫都可以偽造,區區一個簽名不足以保證真實性。
再者,現實中需要協商的內容更加復雜,協商成本太大,想要大規模應用困難重重。