拜占庭將軍問題比特幣
㈠ 如何理解拜占庭將軍問題
拜占庭將軍問題(以下簡稱「共識問題」)的正式表述是:如何在一個不基於信任的分布式網路中就信息達成共識?這個表述聽起來有些晦澀,但其本質並不復雜,下面的例子與共識問題雖然並不完全一致,但卻有助於我們的理解[9]。 想像一下在遙遠的拜占庭時代,有一個富饒的城邦,金銀珠寶綾羅綢緞應有盡有,它的領主哆啦A夢獨享著這一切奢華與榮耀。而在城邦的外圍,四位拜占庭將軍大雄、胖虎、小夫和靜香都覬覦著哆啦A夢的財富,於是他們決定聯手攻佔哆啦A夢的城邦。根據雙方的實力對比,必須有超過半數的將軍同時發起進攻方能克敵制勝,因此獲勝條件就是四人中至少三個人可以就進攻時間達成一致。那麼四位將軍的勝算有多少呢? 這個問題的答案就要取決於四個人的合作方式了,如果是集中式系統,有一個盟主,比如胖虎(相當於中央伺服器),那麼他們的勝利是毫無懸念的,因為就進攻時間達成一致非常簡單,只要胖虎召集大雄、小夫和靜香開個會討論一下就可以了,即使大家意見有分歧胖虎也可以在最後予以定奪。下面讓我們回到拜占庭將軍問題的假設里,在不基於信任的分布式網路中,四位將軍的勝算又如何呢? ? 首先由於四位將軍之間缺乏信任,因此聚到小黑屋裡開個密謀會的可能性被排除了(一旦在小黑屋裡被胖虎綁架了怎麼辦?);其次由於沒有盟主,四個人的意見都會被同等的看重。在這種情況下,四位將軍只能通過信使在各自營地之間傳遞消息,來商定進攻時間了。比如大雄覺得早上6點是發動進攻的好時機,他就會派信使將自己的意見告訴胖虎、小夫和靜香,與此同時,胖虎可能認為晚上9點發動突襲更好,小夫更喜歡下午3點出擊,而靜香希望是上午10點,他們三人也會在同一時間派出自己的信使。這樣一來,在第一輪通信結束後,四位將軍每個人都有了四個可供選擇的進攻時間,他們各自要在下一輪通信中把自己選定的時間告知另外三人。由於四個人的決策都是獨立做出的,因此最終的選擇結果就有256種可能,而只有當三人以上都恰好選擇了同一時間的時候,共識才被達成,而這樣的結果才64種,也就是說達成共識的概率僅為1/4。這還只是四位將軍的情況,如果將軍的人數是10人,100人,1000人呢?我們稍加計算就可以發現隨著人數的增加,達成共識的希望會變得越來越渺茫。 把上面例子中的將軍換成計算機網路中的節點,把信使換成節點之間的通信,把進攻時間換成需要達成共識的信息,你就可以理解共識問題所描述的困境了。達成共識的能力對於一個支付系統來說重要性不言而喻,如果你給家裡匯了一筆錢買車,第二天去銀行核實的時候櫃台告訴你「關於你匯了多少錢的問題,我們的系統里有三個版本的記錄」,這樣的銀行你顯然是不敢把錢存進去的。在比特幣出現之前共識問題是很難被完美解決的,要保證達成共識就需要採用集中式系統(除非節點滿足特定條件),要想去中心化共識就無法保證。那麼區塊鏈技術又是如何解決這一難題的呢?
㈡ 理論上區塊鏈怎麼解決拜占庭將軍問題
拜占庭將軍問題(以下簡稱「共識問題」)的正式表述是:如何在一個不基於信任的分布式網路中就信息達成共識?這個表述聽起來有些晦澀,但其本質並不復雜,下面的例子與共識問題雖然並不完全一致,但卻有助於我們的理解[9]。
想像一下在遙遠的拜占庭時代,有一個富饒的城邦,金銀珠寶綾羅綢緞應有盡有,它的領主哆啦A夢獨享著這一切奢華與榮耀。而在城邦的外圍,四位拜占庭將軍大雄、胖虎、小夫和靜香都覬覦著哆啦A夢的財富,於是他們決定聯手攻佔哆啦A夢的城邦。根據雙方的實力對比,必須有超過半數的將軍同時發起進攻方能克敵制勝,因此獲勝條件就是四人中至少三個人可以就進攻時間達成一致。那麼四位將軍的勝算有多少呢?
這個問題的答案就要取決於四個人的合作方式了,如果是集中式系統,有一個盟主,比如胖虎(相當於中央伺服器),那麼他們的勝利是毫無懸念的,因為就進攻時間達成一致非常簡單,只要胖虎召集大雄、小夫和靜香開個會討論一下就可以了,即使大家意見有分歧胖虎也可以在最後予以定奪。下面讓我們回到拜占庭將軍問題的假設里,在不基於信任的分布式網路中,四位將軍的勝算又如何呢?
?
首先由於四位將軍之間缺乏信任,因此聚到小黑屋裡開個密謀會的可能性被排除了(一旦在小黑屋裡被胖虎綁架了怎麼辦?);其次由於沒有盟主,四個人的意見都會被同等的看重。在這種情況下,四位將軍只能通過信使在各自營地之間傳遞消息,來商定進攻時間了。比如大雄覺得早上6點是發動進攻的好時機,他就會派信使將自己的意見告訴胖虎、小夫和靜香,與此同時,胖虎可能認為晚上9點發動突襲更好,小夫更喜歡下午3點出擊,而靜香希望是上午10點,他們三人也會在同一時間派出自己的信使。這樣一來,在第一輪通信結束後,四位將軍每個人都有了四個可供選擇的進攻時間,他們各自要在下一輪通信中把自己選定的時間告知另外三人。由於四個人的決策都是獨立做出的,因此最終的選擇結果就有256種可能,而只有當三人以上都恰好選擇了同一時間的時候,共識才被達成,而這樣的結果才64種,也就是說達成共識的概率僅為1/4。這還只是四位將軍的情況,如果將軍的人數是10人,100人,1000人呢?我們稍加計算就可以發現隨著人數的增加,達成共識的希望會變得越來越渺茫。
把上面例子中的將軍換成計算機網路中的節點,把信使換成節點之間的通信,把進攻時間換成需要達成共識的信息,你就可以理解共識問題所描述的困境了。達成共識的能力對於一個支付系統來說重要性不言而喻,如果你給家裡匯了一筆錢買車,第二天去銀行核實的時候櫃台告訴你「關於你匯了多少錢的問題,我們的系統里有三個版本的記錄」,這樣的銀行你顯然是不敢把錢存進去的。在比特幣出現之前共識問題是很難被完美解決的,要保證達成共識就需要採用集中式系統(除非節點滿足特定條件),要想去中心化共識就無法保證。那麼區塊鏈技術又是如何解決這一難題的呢?(關注公眾號weoption,回復「區塊鏈」,可查看全文。)
㈢ 拜占庭將軍問題的失效
所謂拜占庭失效指一方向另一方發送消息,另一方沒有收到,發送方也無法確認消息確實丟失的情形。
在容錯的分布式計算中,拜占庭失效可以是分布式系統中演算法執行過程中的任意一個錯誤。這些錯誤被統稱為「崩潰失效」和「發送與遺漏式失效」。當拜占庭失效發生時,系統可能會做出任何不可預料的反應。
這些任意的失效可以粗略地分成以下幾類:
進行演算法的另一步時失效,即崩潰失效;
無法正確執行演算法的一個步驟;
執行了任意一個非演算法指定的步驟
各個步驟由各進程執行,演算法就是由這些進程執行的。一個錯誤的進程是在某個點出現了上述情況的進程。沒有出現錯誤的進程是正確的進程。
㈣ 拜占庭將軍問題的解決演算法
拜占庭問題的最初描述是:n 個將軍被分隔在不同的地方,忠誠的將軍希望通過某種協議達成某個命令的一致(比如一起進攻或者一起後退)。但其中一些背叛的將軍會通過發送錯誤的消息阻撓忠誠的將軍達成命令上的一致。Lamport 證明了在將軍總數大於3m ,背叛者為m 或者更少時,忠誠的將軍可以達成命令上的一致。
為了保證上面的需求,必須滿足下面兩個條件:
1. 每兩個忠誠的將軍必須收到相同的值 v(i)(v(i)是第i 個將軍的命令)
2. 如果第i 個將軍是忠誠的,那麼他發送的命令和每個忠誠將軍收到的v(i)相同
為了簡化以上模型,我們使用一個將軍發送命令給多個副官的形式來證明,發送命令的將軍稱為發令者,接收命令的將軍為副官,那麼上面的兩個條件可以表述為:
IC1. 所有忠誠的副官遵守相同的命令
IC2. 如果發出命令的將軍是忠誠的,那麼所有忠誠的副官遵守司令(發出命令的將軍)的命令
特別提示:發送命令的每次只有一個將軍,將其命令發送給n-1 個副官。m 代表叛國者的個數,因為將軍總數為n,所以副官總數為n-1 個。IC2 中副官遵守實際上是指忠誠的將軍能夠正確收到忠誠將軍的命令消息。 通過口頭消息傳遞達到一致,如果有m 個叛國將軍,則將軍們的總數必須為3m+1 個以上。下面是口頭消息傳遞過程中默認的一些條件:
A1. 每個被發送的消息都能夠被正確的投遞
A2. 信息接收者知道是誰發送的消息
A3. 能夠知道缺少的消息
A1 和A2 假設了兩個將軍之間通信沒有干擾,既不會有背叛者阻礙消息的發送(截斷)也不會有背叛者偽造消息的情況(偽造)。即是每個將軍都可以無誤地將自己的消息發送給其他每個將軍。(下一節中可以不需要這個必要條件)
我們定義口頭消息演算法OM(m) 。對於所有的非負整數m ,每個發令者通過OM(M) 演算法發送命令給n-1 個副官。下面將說明OM(m) 演算法在最多有m 個背叛者且總將軍數為3m+1 或者更多的情況下可以解決拜占庭將軍問題。(考慮到網路應用實際環境,原文使用了收到值代替收到命令,本文不做修改)
演算法定義一個函數:majority(com1,com2,…,comn)等於多數派命令。
OM(0)演算法
(1)發令者將他的命令發送給每個副官。
(2)每個副官採用他從發令者得到的命令,或者默認使用撤退命令,如果沒有收到任何命令。
OM(m)演算法
(1)發令者將他的命令發送給每個副官。
(2)對於每個i ,vi 是每個副官i 從發令者收到的命令,如果沒有收到命令則為撤退命令。副官i 在OM(m-1) 中作為發令者將vi 發送給另外n-2 個副官。
(3)對於每個i,並且j
eq i,vj 是副官i 從第(2)步中的副官j 發送過來的命令(使用OM(m-1)演算法),如果沒有收到第(2)步中的副官j 的命令則默認為撤退命令。最後副官i 使用majority(v1,…,vn-1)得到命令。
接下來實際的考慮一個n=4,m=1 的情況:
1. 當副官D是背叛者
第一步發令者A執行演算法OM(1)將自己的命令發送給三個副官B,C,D,三個副官都正確地收到了命令。
第二步每個收到命令的副官都作為發令者執行演算法OM(0),將自己收到的命令轉發給其餘副官,因為副官D是背叛者,所以他給副官B和C傳遞的消息可能會是假消息。副官B和C分別根據majority 函數來決定命令。
這樣背叛的副官D 同理也干擾不了發令者的決定。下面看看如果發令者是背叛者。
2. 發令者是背叛者,其餘副官為忠誠的
第一步:發令者A向副官B,C,D發送了不同的命令,實際情況中是一個攻擊者向不同方發送了不一致的值(例如,0或1)企圖擾亂副官做出一致決定。
第二步:副官收到命令後,搖身一變為發令者執行OM(0) 向所有的副官發送命令,每個副官通過多數表決演算法仍可以達成一致的命令。
文章接著就證明了OM(m)演算法對任意m 都是可以滿足,首先引入一個引理(歸納法證明):
引理1:對於任意m 和k ,如果有超過2k+m 個將軍和最多k 個背叛者,那麼演算法OM(m) 滿足IC2 (回顧下IC2 指的是,如果將軍是忠誠的,所有的副官遵守將軍命令)。
證明:當m=0 的時候,OM(0) 在將軍是忠誠的時候滿足IC2。當m>0 時,首先將軍將命令傳遞給 n-1 個副官,然後每個副官對n-1 個將軍執行OM(m-1) 演算法。因為假設了n>2k+m(引理中有將軍數大於2k+m),所以 n-1 > 2k+(m-1) >= 2k(即每一輪中副官總數不小於背叛者的兩倍),這樣每輪OM(m-k) 演算法中忠誠的副官收到的命令都是majority(v1,v2,...,v(n-1)),其中忠誠副官發送的命令大於或者等於一半。
接著解決拜占庭將軍問題。
定理1:對於任意m,如果有超過3m 個將軍和最多m 個背叛者,演算法OM(m) 滿足條件IC1 和條件IC2。
證明:通過m 的歸納法證明,我們通過假設OM(m-1) 成立來證明OM(m) m>0。首先考慮發送命令的將軍是忠誠的。那麼將引理中k 設為m 則OM(m) 滿足IC2 ,IC1 在發令將軍是忠誠的情況下也滿足。
接著考慮m 個背叛者中有一個是發令者,那最多就只有m-1 個副官是背叛者了,又因為有3m 個將軍,所以副官的總數超過3m-1,且有3m-1>3(m-1) 。因此通過歸納法假設 OM(m-1) 滿足IC1 和IC2(最多3(m-1) 個將軍和最多m-1 個背叛者)。那麼任意兩個忠誠的副官j 在OM(m-1) 獲得相同命令vj,那麼在OM(m) 演算法中每個忠誠的副官都會收到(v1,v2,...,v(n-1)),可知滿足條件IC1 和IC2。
看完這段證明其實我也挺糊塗的~~~~,畫了張圖來看看lamport 是怎麼證明的:
簽名消息在除了滿足口頭消息A1-A3 三點要求外還應該滿足下面A4:
A4 (a)簽名不可被偽造,一旦被篡改即可發現
(b)任何人都可以驗證將軍簽名的可靠性
下面定義一個類似於上面majority() 函數的choice() 來決定副官的選擇:1.當集合V 只包含了一個元素v ,那麼choice(V)=v ;2. choice(o)=RETREAT。
有了上面A4 和choice() 基礎我們給出SM(m) 方法:
SM(m) 演算法
初始化Vi=空集合
(1)將軍簽署命令並發給每個副官
(2)對於每個副官i :
(A)如果副官i 從發令者收到v:0 的消息,且還沒有收到其他命令序列,那麼:
(i)使Vi 為{v}
(ii)發送v:0:i 給其他所有副官
(B)如果副官i 收到消息v:0:j1:...:jk 且v 不在集合Vi 中則
(i)添加v 到Vi
(ii)如果k<m ,那麼發送v:0:j1:...:jk:i 給每個不在j1,..,jk 中的副官
(3)對於每個副官i ,當不再收到消息,則遵守命令choive(Vi)
演算法的幾點說明:
演算法第三步並沒有說明副官如何判斷沒有新的消息,可以通過兩個解決方法:一是要求每個副官收到消息後要麼簽名轉發該消息,要麼發送一個通知他將不發送這個消息;二是設置一個超時時間,如果在該時間段還沒有收到消息,則認為不再收到消息。
演算法SM(m) 中,讓副官簽名是確認其收到了該消息(有點像來了份文件給每個領導批閱)。在SM(1) 中副官收到消息就不用簽字了,因為不用轉發給其他副官。
定理2:對於任意m,最多隻有m 個背叛者情況下,演算法SM(m) 解決拜占庭將軍問題
Proof:首先證明IC2,如果發令者是忠誠的,那麼所有的副官一定收到相同的命令,因為簽名無法篡改,且IC1 也就滿足了。證明IC1 只用考慮發令者是背叛者的情況(重新回顧下IC1 是指所有忠誠的副官執行相同的命令),IC1 要求兩個忠誠的副官(i,j)必須收到相同的命令集合Vi、Vj,也就是Vi 中每個v 都在Vj 中。會存在兩種情況,其一當副官i 收到v 命令的序列後,加入到Vi,並將其發送給副官j ,j 將命令v 保存;其二副官i 收到命令v:0:j1:...:jk:i,其中有jr=j,所以 由A4 可知副官j 也收到了該命令。如果沒有,則有:
k<m。這種情況下,i 發送信息v:0:j1:...:jk:i 給副官j ,那麼j 一定收到v 。(這點感覺和上面有重復)
k=m。發令者是背叛者,最多隻有m-1 個副官是背叛者。因此,最少有一個序列j1,...,jm是忠誠的。那麼j 一定收到這個忠誠的副官序列發來的值v ,所以副官j 收到v 。
證明完畢。
㈤ 拜占庭將軍問題確保系統正常為什麼需要2k+1個正常節點
地域雖然淪陷了,但是本地居民基本上還是那些人,他們的宗教信仰不會變的,就像耶路撒冷,不管被什麼人占著,他都是聖城,基督、伊斯蘭、猶太人心中的聖城
㈥ 拜占庭將軍問題的起源
拜占庭位於如今的土耳其的伊斯坦布爾,是東羅馬帝國的首都。由於當時拜占庭羅馬帝國國土遼闊,為了防禦目的,因此每個軍隊都分隔很遠,將軍與將軍之間只能靠信差傳消息。 在戰爭的時候,拜占庭軍隊內所有將軍和副官必需達成一致的共識,決定是否有贏的機會才去攻打敵人的陣營。但是,在軍隊內有可能存有叛徒和敵軍的間諜,左右將軍們的決定又擾亂整體軍隊的秩序。在進行共識時,結果並不代表大多數人的意見。這時候,在已知有成員謀反的情況下,其餘忠誠的將軍在不受叛徒的影響下如何達成一致的協議,拜占庭問題就此形成。
㈦ 你知道區塊鏈本質是什麼嗎比特幣的原理又是什麼
區塊鏈發展到今天已經有一段時間了,在這段時間里,人們對區塊鏈的認知經歷了快速的更換。
區塊鏈的本質是技術
既然說到本質,什麼是本質?本質應該是不停向前追溯,一直追溯到不能進一步追溯為止,那時得到的東西才能稱之為本質。區塊鏈的本質,是一種技術。回到區塊鏈最初的那個原點,回到比特幣剛剛誕生的時候,它要解決的問題是拜占庭將軍問題,從專業角度來講,也就是要解決如何在分布式環境下達成一致性的問題。區塊鏈這種技術,是多項技術的組合,它天然適合多方合作,可以為多方合作提供可信環境。
區塊鏈不可篡改特性的應用
比特幣的技術原理P2P網路
比特幣是一個P2P的計算機網路,每一個網路節點存儲著這個網路上所有的交易記錄。 一般來說任何信息記錄在一個節點加若干備份就可以了。在每一個節點上存儲一遍這個網路的所有交易記錄,這導致交易記錄被每個節點可以看見、每個節點不能獨立任意修改交易記錄,所以形成了一套公開透明的交易記錄。
㈧ 拜占庭將軍問題 口頭協議演算法是怎麼推導出來的
我也是額,老是卡,而且不止第一集,後面兩集也是,放一會時間就會卡一下,就像定格了一樣
㈨ 這是一個用甲乙丙丁表示的共識問題,不存在拜占庭將軍問題
A: Test...