拜占庭問題

2021-06-27 22:38:13 字數 2885 閱讀 7852

一、拜占庭問題的背景這裡就不再介紹直接說演算法

:下面的這個截圖是從lamport發表的**中擷取的:

對於這個演算法需要說明的是:

(1) 在第一輪 將軍會把訊息傳送給所有的副官,第i個副官收到的記為 vi。如 1(這裡代表的是attack)

(2) 在第二輪裡面,li(即第i個副官)會懷疑將軍發來的訊息vi是對還是錯,於是他會問其餘的副官。這樣他就會得到剩下的(n-2)個副官的值。 i從1到n-1,所以每個副官都會得到剩餘的n-2個副官手裡的vi。在這一步驟裡,忠誠的副官j會直接將自己的 vj傳送給其它人。叛徒則會發假訊息。

在n=7,m=2的時候 如果將軍是忠臣的話,那麼在第二輪忠誠的副官確實已經可以判斷出要做的決定,因為他們會收到(1 1 1 0 0 )再加上將軍發來的1就是 1 1 1 1 0 0 但是這個演算法是遞迴的所有必須要到第三輪。並且如果將軍是個叛徒的話,那麼第二輪有情形是做不出決定的。

這裡對進入第三輪的解釋是,如l1收到其它l2~l6發來的vj, 但是他要懷疑準確性,比如l1會想l2發給自己是否是正確的呢?那麼就進入第三輪進行投票。

(3)在第三輪裡面,接著(2)中後面的問題。l1會依次詢問l3,4,5,6 ,問他們上一輪l2給他們發了什麼,然後l1會得到在(2)中 l2->l3, l2->l4,l2->l5, l2->l6的值 這樣再結合自己的l2->l1的值,從這5個裡面用majority函式投出決定得到l2發給自己的訊息值。依次再進行l3,l4,l5,l6在第二輪中發給自己的訊息的確認。

這樣l1就完成了第二輪的確認。之後l1再從第一步中將軍發給自己的vi和第二輪中確定的5個值中投出自己的決定。

其餘的l2,l3.等等也進行同樣的步驟。

二、好像演算法是挺繞的,如果還是沒清晰的話,直接看下面的過程:

這裡需要注意的是:lamport提出的容錯的兩個條件

ic1:即所有的忠誠的副官要遵守同乙個命令,即達成一致;

ic2:假如將軍是忠誠的,那麼每乙個忠誠的副官都應該按照將軍的意思行事。

這裡將軍是叛徒,所以只要滿足ic1條件即可。

step1 : c給l1~l6 依次發 a r a r a x  (a,r代表攻擊和撤退,這裡因為c是叛徒,所以可以隨便發給l1-l5訊息,這裡只是乙個例子,可以用其他的值,只要最後滿足ic1就可以)

截圖是step2: 

step3:其實在第三步中 l1會依次確認在step2中, l2~l6發給自己的資訊. 例如確認l2時 會問l3-l6,在step2中l2發給你們了什麼

最後得到 r, r, r,x (因為l6這時候肯定又說謊) 再結合自己的r , l1確定在step2中收到l2發來的是r,之後又確認了l3-l6。大家可以自己在草稿紙上畫出。

其實因為l1-l5都是忠誠,他們不會在step2中撒謊,所以只需投票l6即可 ,(a r a r a )是l6發給l1-l5的資訊,最後投出發的是a , 將a修改到step2中l1-l5收到的

資訊中其餘的資訊可以不用改。

最後得到l1-l5均是 4個a, 2個r。 以l1為例=r a  r  a  a  a 

即l1~l5達成了一致。

在lamport的**中提到:

簽名就是說每次傳送資訊都要簽署上自己的名字,然後再發給別人。而別人只可以在這條訊息上覆制然後再**出去。這樣就變的簡單了,

而且1)忠誠司令的簽名不可偽造,內容修改可以被檢測出來。

2)任何人都可以識別司令的簽名,叛徒可以偽造叛徒司令的簽名。

(詳細介紹簽名演算法)

四、下面來看相關的證明。

證明1: 為什麼在沒有簽名的情況下,n>3m即可容錯?

在lamport的**中,在證明om(m)在最多只有m個叛徒,以及超過3m個將軍的時候可以滿足ic(1)和ic(2)條件的時候,先引入了乙個引理:

lemma1:對於

任意m 和k ,如果有超過2k+m 個將軍和最多k 個背叛者,那麼演算法om(m)

滿足ic2 (回顧下ic2 指的是,如果將軍是忠誠的,所有的副官遵守將軍命令)。

證明:(1)當m=0的時候,如果將軍是忠誠的,因為在om(0)的時候忠臣會遵守將軍發來的命令。而此時的將軍是忠臣的所以,即滿足ic2

(2)當m>0的時候。用數學歸納法,通過證明om(m-1)有效來證明。因為假設了n>2k+m,在om(m-1)時剩餘的將軍數是n-1,但是叛徒數仍然是k(因為上1輪中的將軍是忠臣),n>2k+m -> n-1>2k+m-1. 又m-1>=0 ->n-1>2k. 即在om(m-1)中有忠誠的副官比叛徒多,所以可以投票得出正確結果。在o(m-1)時可證。

接著證明「證明1」中的問題:

證明:通過m的歸納法證明,我們通過假設om(m-1) 成立來證明om(m) m>0。

(1)首先考慮傳送命令的將軍是忠誠的。那麼將引理中k 設為m 則om(m) 滿足ic2 ,ic1 在發令將軍是忠誠的情況下也滿足。 

(2)如果傳送命令的將軍是叛徒。那麼在下一輪中,總共有3m個副官,其中有m-1個副官是叛徒,有3m-(m-1)=2m+1個忠臣,

2m+1>m-1 即 在這裡所有的忠臣是可以達成一致的(這一步是為了說明om(m-1)是成立的)。下面再推出om(m-1)的表示式:這裡除去要傳送命令的乙個將軍外還有超過3m-1個,有3m-1>3(m-1) 即 n'>3m',所以在om(m-1)是滿足條件的,得證。 

在這裡也同時證明了為什麼是m+1輪交換。因為om(m)滿足。m->0 共 m+1;

拜占庭將軍問題

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

拜占庭將軍問題

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

拜占庭將軍問題

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