(三)拜占庭將軍問題

2021-10-02 14:40:11 字數 2231 閱讀 4301

拜占庭將軍問題

拜占庭將軍問題是leslie lamport(2023年的圖靈獎得主)用來為描述分布式系統一致性問題(distributed consensus)在**中抽象出來乙個著名的例子。

這個例子大意是這樣的:

拜占庭帝國想要進攻乙個強大的敵人,為此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵禦5支常規拜占庭軍隊的同時襲擊。他們任一支軍隊單獨進攻都毫無勝算,除非有至少6支軍隊(一半以上)同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通訊兵騎馬相互通訊來協商進攻意向及進攻時間。困擾這些將軍的問題是,他們不確定他們中是否有叛徒,叛徒可能擅自變更進攻意向或者進攻時間。在這種狀態下,拜占庭將軍們怎麼才能保證有多於6支軍隊在同一時間一起發起進攻,從而贏取戰鬥?

在拜占庭問題裡,各軍隊最重要的事情是:所有將軍如何能過達成共識去攻打敵國或者都不進攻以避免損失。

達成共識並非坐下來開個會那麼簡單,有的將軍心機深不可測,口是心非,如果有叛徒,可能會出現各種問題:

叛徒可能欺騙某些將軍自己將採取進攻行動。

叛徒可能慫恿其他將軍行動。

叛徒可能迷惑其他將軍,使他們接受不一致的資訊,從而感到迷惑。

針對拜占庭問題的深入研究,科學家們得出乙個結論: 若叛徒數為m,則將軍總數n>=3m+1時才有解

解決方案

每個將軍給其他所有的將軍傳送訊息,然後根據收到的所有訊息以少數服從多說的原則決定是否進攻。

原理如下:

拜占庭將軍問題.png

這裡假設有乙個叛徒,則至少有4個將軍。如上圖所示,假設a,c,d為忠將,b為叛將。進攻為1,不進攻為0。假設a先發給bcd進攻的訊息,則cd為忠將,接到進攻的訊息後,也將收到的進攻訊息發出去。而b為搗亂,會說收到的訊息為不進攻。這樣acd都會收到2個進攻1個不進攻,按照少數服從多數原則,他們都會選擇進攻,這樣發起進攻的軍隊將會多於50%。

假設將軍a是叛將,則他會向三位將軍發出不同的訊息,比如上次的2次進攻,1次不進攻。而bcd三位忠將都會將收到的訊息如實發出去。最後少數服從多數原則,三位忠將還是能達成進攻的共識。其他情況大家可以嘗試推理一下,都是可以達成共識的。

缺點:如果存在大量的節點,每個節點要向全網傳送大量訊息。

2 . pow共識機制

pow(工作量證明 )通過計算乙個數值( nonce ),使得拼揍上交易資料後內容的 hash 值滿足一定的條件。在節點成功找到滿足的hash值之後,會馬上對全網進行廣播打包區塊,網路的節點收到廣播打包區塊,會立刻對其進行驗證。

如果驗證通過,則表明已經有節點成功解迷,自己就不再競爭當前區塊打包,而是選擇接受這個區塊,記錄到自己的賬本中,然後進行下乙個區塊的雜湊運算。網路中只有最快算出答案的區塊,才會新增到賬本中,其他的節點進行複製,這樣就保證了整個賬本的唯一性。

怎麼防止惡意節點:要想獲得記賬權,就要耗費大量的算力去進行雜湊運算,付出了很多成本。人是理性的,是逐利的,如果不作惡,正確的記賬,就會獲得獎勵。而如果有任何的作弊行為,都會導致網路的節點驗證不通過,直接丟棄其打包的區塊,這個區塊就無法記錄到總賬本中就不會得到獎勵,而付出的算力也就白白付出了,相當於受到了懲罰。兩相權衡,人們就失去了作惡的動機。因此在巨大的挖礦成本下,也使得礦工自覺自願的遵守位元幣系統的共識協議,也就確保了整個系統的安全。

分叉:當有兩名礦工在幾乎在同一時間,各自都得了正確的答案,便立即傳播自己的區塊到網路中,先是傳播給鄰近的節點而後傳播到整個網路。每個收到有效區塊的節點都會將其併入並延長區塊鏈。假如這兩個正確的區塊分別為a、b,則有的節點會先收到a區塊並將a加入區塊鏈,而有的節點會先收到b。這時就導致了區塊鏈分叉。

最長鏈原則:剛開始分叉時曠工都在自己收到的區塊的基礎上進行延伸,兩個塊都收到的節點,會把其中長度更長的一條作為主鏈,另一條作為備用鏈儲存(儲存是因為備用鏈將來可能會超過主鏈長度成為新主鏈)。這樣一段時間後所有曠工都會切換到最長的那條鏈,從而解決分叉問題。

為什麼10分鐘出乙個塊:如果出塊時間過短,也就意味著挖礦難度降低,這時就會有更大的機率多個曠工同時算出答案。又由於剛產生的區塊在全網廣播時需要一定的時間,其他節點也很容易收到不同的區塊。簡單來說就是出塊過快容易導致頻繁分叉。但是出塊慢也有代價:確認時間變長了。

51%算力攻擊:理論上,當攻擊者掌握了51%的全網算力時,其攻擊總是能成功。因為他總能讓自己的鏈成為最長的鏈。但是,如果他攻擊位元幣系統,位元幣將不具備可信性,以至位元幣必然崩盤,一文不值。這對他顯然百害無一利。舉個例子:現在有幾個國家的原子彈都足以毀滅地球,但他們會這麼幹嗎?

電力消耗:位元幣因為挖礦,消耗了大量電力,這是它的一大缺點。並且隨著位元幣**越來高,全網算力越來越大,電力消耗也將越來越大。

to be continued…

拜占庭將軍問題

前進中的可信計算 拜占庭將軍問題 閔應驊 乙個可信的計算機系統必須容忍乙個或多個部件的失效。失效的部件可能送出相互矛盾的資訊給系統的其他部件。這正是目前網路安全要對付的情況,如銀行交易安全 存款安全。美國2001 9 11遭恐怖襲擊之後,大家普遍認識到銀行的異地備份非常重要。紐約的一家銀行可以在東京...

拜占庭將軍問題

假設有4個將軍圍攻乙個敵人,只有三個將軍同時出擊才可以將敵人擊敗,任意兩個或者乙個將軍出擊均會被敵人擊敗,4個將軍通過一對一的通訊機制協商共同出擊時機,同時4個將軍中有乙個是內奸,他會混淆通訊結果,避免3個將軍協商出統一的出擊時機。拜占庭將軍 pbft 問題既指在這種情況下將軍們如果達成共識,共同擊...

拜占庭將軍問題

拜占庭將軍問題 byzantine failures 是由萊斯利 蘭伯特提出的點對點通訊中的基本問題。含義是在存在訊息丟失的不可靠通道上試圖通過訊息傳遞的方式達到一致性是不可能的。因此對一致性的研究一般假設通道是可靠的,或不存在本問題。在很久很久以前,拜占庭是東羅馬帝國的首都。那個時候羅馬帝國國土遼...