拜占庭將軍問題

2021-06-09 11:43:26 字數 4872 閱讀 1699

前進中的可信計算(ⅵ):拜占庭將軍問題

閔應驊

乙個可信的計算機系統必須容忍乙個或多個部件的失效。失效的部件可能送出相互矛盾的資訊給系統的其他部件。這正是目前網路安全要對付的情況,如銀行交易安全、存款安全。美國2001/9/11遭恐怖襲擊之後,大家普遍認識到銀行的異地備份非常重要。紐約的一家銀行可以在東京、巴黎、蘇黎世設定異地備份。當某些點受到攻擊甚至破壞以後,可以保證賬目仍然不錯,得以復原和恢復。從技術的角度講,這是乙個很困難的問題。因為被攻擊的系統不但可能不作為,而且可能進行破壞。國家的安全就更不必說了。對付這類故障的問題被抽象地表達為拜占庭(byzantine)將軍問題。

拜占庭(byzantine)將軍問題

拜占庭帝國就是5~15世紀的東羅馬帝國,拜占庭即現在土耳其的伊斯坦堡。我們可以想象,拜占庭軍隊有許多分支,駐紮在敵人城外,每一分支由各自的將軍指揮。將軍們只能靠通訊員進行通訊。在觀察了敵人以後,忠誠的將軍們必須制訂乙個統一的行動計畫。然而,這些將軍中有叛徒,他們不希望忠誠的將軍們能達成一致,因而影響統一行動計畫的制訂與傳播。問題是:將軍們必須有乙個演算法,使所有忠誠的將軍們能夠達成一致,而且少數幾個叛徒不能使忠誠的將軍們做出錯誤的計畫。

解決拜占庭將軍問題的演算法必須保證:

a.所有忠誠的將軍必須基於相同的行動計畫做出決策。

忠誠的將軍按演算法的要求行動,而叛徒則按他們自己的意志行動。演算法要保證不管叛徒怎麼做,條件a都能得到保證。忠誠的將軍們不但要能達成一致,而且要同意乙個合理的計畫。這就要求條件b。

b.少數叛徒不能使忠誠的將軍做出錯誤的計畫。

這一條是很難做到的,因為「錯誤的計畫」很難形式地加以定義。

我們考慮將軍們怎麼達成一致。設有n個將軍,v(i)表示第i個將軍送出的資訊。每個將軍用相同的方法把v(1),…,v(n)按某一種邏輯方式組合起來,形成乙個行動計畫。要滿足條件a,將軍們就必須用同樣的方法來組合這些資訊。而條件b要求使用的方法是健壯的。考慮最簡單的情況,如果決定只有進攻和撤退兩種可能,v(t)就是將軍認為選擇那一種行動最好,而最後的決定則基於多數表決。少數叛徒只有在忠誠的將軍們幾乎隨機地(每一種選擇的概率都是1/2)做出決策時才能影響決策,但既然每一種選擇的概率都是1/2,那就不管怎麼決策都不能說是壞的。

如果把第i個將軍的資訊v(i)送給其他將軍。由於條件a要求每乙個忠誠的將軍得到v(1),…,v(n)相同的值,而叛徒將軍可以給不同的將軍送不同的值。為了使條件a得到滿足,下面兩條必須成立。

1.每乙個忠誠的將軍得到v(1),…,v(n)相同的值。

這就意味著忠誠的將軍並不一定使用第i個將軍送來的資訊作為v(i)。因為第i個將軍可能是叛徒。但這又可能使忠誠的將軍送來的資訊也被修改,因為忠誠的將軍並不知道第i個將軍是忠誠的,還是叛徒。如果要滿足條件b,這是不能允許的。例如,我們不能因為少數叛徒說「撤退」,忠誠的將軍說「進攻」,而做出「撤退」的決定。因此,要求

2.對每乙個 i,如果第i個將軍是忠誠的,其他忠誠的將軍必須以他送出的值作為v(i).

我們可以重寫條件1如下。

1』。 對每乙個 i,不論第i個將軍是忠誠的,或是叛徒,任何兩個忠誠的將軍使用相同的值v(i).

條件1』和2都只牽涉到第i個將軍怎麼送乙個值v(i)給其他的將軍。因此,我們可以用司令送命令給副官的方式敘述如下:

拜占庭將軍問題:乙個司令要送乙個命令給他的n-1個副官,使得

ic1。所有忠誠的副官遵守同乙個命令。

ic2。假如司令是忠誠的,則每乙個忠誠的副官遵守他送出的該命令。

條件ic1和ic2稱為互動一致性條件。注意,如果司令是忠誠的,ic1可以從ic2推出來。但是,司令並不一定是忠誠的。

這個問題比過去的容錯更困難。因為過去的容錯都是針對那樣一些軟硬體故障,其故障效果是固定的。而拜占庭故障卻假定故障機是鮮活的,它可以做壞事。

拜占庭將軍問題的可解性

(1)叛徒數大於或等於1/3,拜占庭問題不可解

如果有三位將軍,一位副官是叛徒,如圖1所示。當司令發進攻命令時,副官2可能告訴副官1,他收到的是「撤退」的命令。這時副官1收到乙個「進攻」的命令,乙個「撤退」的命令,而無所適從。

如果司令是叛徒,如圖2所示。他告訴副官1「進攻」,告訴副官2「撤退」。當副官2告訴副官1,他收到「撤退」命令時,副官1由於收到了司令「進攻」的命令,而無法與副官2保持一致。

正由於上述原因,在三模冗餘系統中,如果允許一機有拜占庭故障,即叛徒數等於1/3,因而,拜占庭問題不可解。也就是說,三模冗餘對付不了拜占庭故障。三模冗餘只能容故障-凍結(fail-frost)那類的故障,就是說,元件故障後,它就凍結在某乙個狀態不動了。對付這類故障,用三模冗餘比較有效。

(2) 用口頭資訊,如果叛徒數少於1/3,拜占庭問題可解

注意,這裡說「少於1/3」表明,要對付乙個叛徒,至少要用四模冗餘。在四模中有乙個叛徒,叛徒數是少於1/3的。所謂口頭資訊,是指它滿足三個條件:① 傳送正確,② 接收者知道是誰發的。③ 沉默(不發資訊)可以被檢測。拜占庭問題可解是指:所有忠誠的副官遵循同一命令。若司令是忠誠的,則所有忠誠副官遵循其命令。我們可以給出乙個多項式複雜性的演算法來解這一問題。演算法的中心思想很簡單,就是司令把命令發給每一副官,各副官又將收到的司令的命令轉告給其他副官,遞迴下去,最後用多數表決。如圖3所示。如果司令是忠誠的,他送乙個命令v給所有副官。若副官3是叛徒,當他轉告給副官2時命令可能變成x。但副官2收到,多數表決以後仍為v,忠誠的副官可達成一致。如果司令是叛徒,如圖4所示。他發給副官們的命令可能互不相同,為x, y, z。當副官們互相轉告司令發來的資訊時,他們會發現,他們收到的都是,因而也取得了一致。 

(3)用書寫資訊,如果至少有2/3的將軍是忠誠的,拜占庭問題可解

所謂書寫資訊,是指帶簽名的資訊,即可認證的資訊。它是在口頭資訊的基礎上,增加兩個條件:① 忠誠司令的簽名不能偽造,內容修改可被檢測。② 任何人都可以識別司令的簽名,叛徒可以偽造叛徒司令的簽名。一種已經給出的演算法是接收者收到資訊後,籤上自己的名字後再發給別人。由於書寫資訊的保密性,可以證明,用書寫資訊,如果至少有2/3的將軍是忠誠的,拜占庭問題可解。

如圖5所示。如果司令是叛徒,他送「進攻」命令給副官1,並帶有他的簽名0,送「撤退」命令給副官2,也帶簽名0。副官們轉送時也帶了簽名。於是副官1收到,說明司令發給自己的命令是「進攻」,而發給副官2的命令是「撤退」,司令對我們發出了不同的命令。對副官2也同樣。 

拜占庭將軍問題的形式描述

考慮網路n,包含n個處理器,或叫遊戲者,記為1,2,…,n,設n≥4。每乙個處理器是乙個互動的、概率的多項式時間圖靈機。設網路n是完全的以私人通道連線,即每對處理器皆可互相通訊而不能被其他處理器讀取。該網路是同步的,即有統一的時鐘。在d和d+1個脈衝間送出的資訊將在d+1個脈衝時收到。

遊戲者i稱為是好的,如果它遵循協議,即正確執行其程式,在適當的時間在適當的地點寫入返回的值。i稱為是壞的,如果它破壞了該協議。如果壞的遊戲者被敵手選用和控制,則更一般的故障行為可能發生。敵手是乙個演算法,在乙個網路中發作,腐化一定比例的遊戲者。

定義:設a是乙個概率演算法,r為常數。a稱為是乙個r-敵手,如果a可以在任何n遊戲者的、執行任何協議p的網路上發作,並且滿足:

(1) a可以讀取非私人通道上的任何通訊鏈路。

(2) a可腐化任何t個遊戲者。當a腐化i時,a可以讀取i的所有資料,並奪取i輸出的執行寫控制。

(3) 動態性:a可以在p的任何步驟上腐化遊戲者。

(4) 急促性:a讀第d週期內通過非私人通道傳送的資訊。第d週期私人通道資訊在第d週期送給壞遊戲者。基於這些資訊,a在第d週期腐化其他的遊戲者(少於t個)。而且在第d週期把d週期資訊送給新被腐化者。這一過程繼續到腐化t個遊戲者。在第d+1個脈衝之前,a不需要選擇在第d週期由壞遊戲者送給好遊戲者的資訊。

(5) a可以即時完成無限步的計算

有文章給出了拜占庭一致性演算法,不要求親信夥伴和預處理。給定私人通訊鏈路,可望在常數時間內達成一致,如果同步網路故障機;非同步網路,故障機。如果不能保證私人通訊,可以用密碼得到在容錯和敵手有限計算能力的執行時間兩方面最優的演算法。在這種情況下,對非同步網路也能容n/3個故障。

可信計算中的拜占庭將軍問題

可信計算中必須考慮人為的故障,特別是人為惡意的攻擊。這是保證計算安全性的基本出發點,在今天的網路環境下有非常重要的現實意義。拜占庭將軍問題不過是保持平行計算中資料一致性問題的乙個抽象表達。一種抽象表達往往能把本質問題從繁瑣的工程實現中提取出來,對於基礎研究極其重要。工程師們常常被繁瑣的工程任務所左右,在保證安全的要求下要考慮的問題非常多,而忽略了提綱挈領的功夫。

在可信計算領域,過去考慮的故障-凍結模式,假定部件故障以後就「死」去了,不再工作了。現在我們必須考慮故障-活動模式,即部件故障以後,它可能仍然活動,甚至進行系統所有者所不希望它做的事情。這正是電子對抗中要著力研究的問題。

平行計算中有兩個基本問題:乙個是控制的同步性;乙個是資料的一致性。不論是並行的處理器,還是並行的執行緒,總需要保持某種程度上的同步,以期達到各個計算部件之間的協同與合作。儘管這種同步可以是緊耦合,也可以是鬆散的耦合。另一方面,各計算部件之間的資料一致性也至關重要。例如銀行系統在為使用者訪問款服務時,人名的查詢必須和訪問款數量相對應,否則就錯了。而這兩件事可能由不同的計算部件或不同的時刻完成。而這種一致性常常能被故障,特別是惡意攻擊所破壞。敵人的攻擊也常常是利用這一點。拜占庭將軍問題只把資料簡化為二值的0和1。當然,多版本的一致性不單是「進攻」和「撤退」這樣簡單的資訊,但原理是一樣的。

為了保持多版本的一致性,系統需要一定的時間。在這段時間內,系統還沒來得及達成一致,系統可能有可攻擊的脆弱之處。這段時間表現為故障潛伏期,即敵人的攻擊不一定馬上生效,系統在某一時機來到時就可能做出錯誤的響應。

解拜占庭將軍問題的演算法給我們提供資料一致性的思路和演算法。而在該演算法中就有各位將軍的同步問題。這些問題都為計算可信性的提高以啟發。要解決拜占庭將軍問題需要四模冗餘,硬體開銷是很大的。所以,現在銀行的異地備份並不都是四模冗餘。這就看你的系統要求有多高的安全性,相對於那些投資,孰輕孰重。

從拜占庭將軍問題解法可以看出,簽名和認證對保證資料安全有節省硬體的效果。這些技術將在後文詳細介紹。

拜占庭將軍問題

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

拜占庭將軍問題

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

拜占庭將軍問題見解

二 拜占庭容錯機制 拜占庭將軍問題 byzantine failures 點對點通訊中的基本問題,含義是在存在訊息丟失的不可靠通道上試圖通過訊息傳遞的方式達到一致性是不可能的。拜占庭假設是對現實世界的模型化,由於硬體錯誤 網路擁塞或者斷開以及遭到惡意攻擊,計算機和網路可能出現不可預料的行為。拜占庭容...