拜占庭將軍問題(三)—— 書面協(xié)議

在上篇文章中烛卧,對口頭消息算法OM(m)進(jìn)行了闡述肮砾,OM(m)算法能夠處理在大于3m個將軍中至多存在m個叛徒的拜占庭將軍問題涝婉。Leslie的論文[1]中侮攀,對將軍之間發(fā)送不可篡改的簽名消息的情況進(jìn)行分析扮休,闡述書面協(xié)議算法SM(m)迎卤。

拜占庭將軍問題

假設(shè)

為了限制叛徒發(fā)送的消息,從而使拜占庭將軍問題更加簡單玷坠。一種方法是讓每位將軍發(fā)送不可偽造的簽名消息蜗搔。更準(zhǔn)確的來說,在假設(shè)A1-A3的基礎(chǔ)上添加如下假設(shè):

A4 (a) 忠誠將軍的簽名不能被偽造八堡,并且任何針對他簽名消息的篡改都能被檢測到樟凄;
(b) 任何將軍都可以驗證將軍簽名的真實性

注意,我們并沒有對叛徒的簽名進(jìn)行限制兄渺,也就是說一個叛徒的簽名可以被其他叛徒偽造缝龄,進(jìn)而叛徒可以進(jìn)行串謀作惡。

引入了簽名消息之后挂谍,三將軍問題也就不在成立了∈迦溃現(xiàn)在給出一個算法,在任意數(shù)量將軍中有m個叛徒的情況口叙。

SM(m) 算法

在算法中炼绘,司令官發(fā)送一個簽名的命令給他的每個副官。然后妄田,每個副官添加他的簽名到命令上俺亮,并發(fā)送給其他副官,收到命令的副官再添加他的簽名發(fā)送給其他副官......

算法還假定了一個choice函數(shù)疟呐,作用在一個命令的集合上來獲得一個單獨的命令脚曾。choice函數(shù)需要滿足:

  1. 如果命令集合$V$只包含一個元素$v$,那么$choince(V)=v$.
  2. 如果命令集是$\emptyset$启具,那么$choince(\emptyset)=RETREAT$.

例如本讥,choince函數(shù)可以是取有序集合$V$的中位數(shù)。

在下面的算法中富纸,令$x:i$指由將軍$i$簽名的命令值$x$囤踩,$v:j:i$指命令指$v$由將軍$j$簽名后再由將軍$i$簽名。令將軍$0$為司令官晓褪,每個副官$i$維護(hù)一個命令集$V_i$堵漱,包含他收到的被正確簽名的命令值。(如果司令官是忠誠的涣仿,這個值集的元素不會超過一個)勤庐。

Algorithm SM(m)

初始化 $V_i = \emptyset$

(1) 司令官簽名并發(fā)送他的命令給每個副官示惊;
(2) 對于每個$i$:

(A) 如果副官$i$從司令官接收到一個$v:0$形式的消息,并且他還沒有接收到過任何命令愉镰,那么:

(i) 令$V_i={v}$;
(ii) 發(fā)送$v:0:i$給每個其他的副官米罚。

(B) 如果副官$i$接收到形如$v:0:j_1:...:j_k$的消息,且$v$不在$V_i$中丈探,那么:

(i) 他將$v$添加到$V_i$中;
(ii) 如果$k<m$录择,那么他發(fā)送消息$v:0:j_1:...:j_k:i$給不同于$j_1:...:j_k$的每個副官。

(3) 對于每個副官$i$: 當(dāng)副官$i$不再接收到消息碗降,他將遵從$choice(V_i)$行動隘竭。

注意,在第二步中讼渊,副官$i$將忽略任意值已經(jīng)在$V_i$出現(xiàn)的消息动看。通過對$k$的歸納,對于每個副官序列$j_1, ..., j_k$, 且$k<m$爪幻,每個副官至多收到一條$v:0:j_1:...:j_k$消息菱皆。在第(3)步中可以使用超時來判斷沒有消息再回到來。

舉例: m=1, n=3

下圖描述了當(dāng)將軍是叛徒時挨稿,發(fā)送消息的情況:

在第(1)步仇轻,司令發(fā)送發(fā)送“attack”給副官1并發(fā)送“retreat”給副官2;
在第(2)步奶甘,每個副官將收到兩個命令值拯田,即$V_1=V_2={"attack", "retreat"}$。
在第(3)步甩十,兩個忠誠的副官執(zhí)行$choice(V_i)$得到的結(jié)果也是一樣的。

因此吭产,當(dāng)司令叛徒時侣监,算法滿足條件IC1

當(dāng)司令是忠誠的時臣淤,叛徒副官無法篡改司令的命令橄霉,因此忠誠的副官的行動值集$V_i$只有一個元素,即司令發(fā)送的命令邑蒋。

因此姓蜂,SM(m)算法滿足條件IC1IC2

證明

下面證明算法的正確性:

定理 2:對于任意$m$,當(dāng)將軍中至多有$m$個叛徒時医吊,算法SM(m)能解決拜占庭將軍問題钱慢。

證明: 首先證明條件IC2。如果司令是忠誠的卿堂,那么在第(1)步中束莫,他發(fā)送簽名的命令$v:0$給每個副官懒棉。在第(2)(A)步中,每個忠誠的將軍收到命令$v$览绿。而且策严,因為叛徒無法篡改將軍的命令成$v':0$,所以忠誠的副官不會在第(2)步中收到其他值因此每個忠誠的副官將按照司令的命令$v$行動饿敲。條件IC2得證妻导。

當(dāng)司令是忠誠的時,條件IC1包含在條件IC2中怀各,因此倔韭,下面僅需證明當(dāng)將軍是叛徒時,條件IC1成立渠啤。

如果兩個忠誠的副官$i$和$j$在第(2)步中收到的行動值集$V_i$和$V_j$相同狐肢,那么他們會采取相同的命令。因此沥曹,證明條件IC1份名,等于證明如果副官$i$在第(2)步中將值$v$放入其值集$V_i$中,那么妓美,副官$j$也會將$v$放入其值集$V_j$僵腺。

如果副官$i$在第(2)(A)步收到命令$v$,那么他會在第(2)(A)(ii)步將其發(fā)送出去壶栋,因此副官$j$也會受到值$v$辰如。

如果副官$i$在第(2)(B)步將一個命令$v$添加到$V_i$中,那么他肯定收到了形如$v:0:j_1:...:j_k$的消息贵试。如果$j$是$j_1:...:j_k$中的一個琉兜,那個副官$j$肯定也已經(jīng)收到命令值$v$。否則毙玻,討論兩種情況:

  1. $k<m$豌蟋。在這種情況下,副官$i$會發(fā)送$v:0:j_1:...:j_k:i$消息給副官$j$桑滩,因此副官$j$會收到指令$v$梧疲;
  2. $k=m$。在這種情況下运准,因為司令是叛徒幌氮,那么副官中至多有$m-1$個叛徒,因此在$j_1:...:j_m$中至少有一個副官是忠誠的胁澳,這個忠誠的副官肯定將指令$v$發(fā)給了副官$j$该互,因此,副官$j$擁有指令$v$韭畸。

結(jié)論得證慢洋。

小結(jié)

在本篇文章中塘雳,介紹了當(dāng)將軍之間傳輸不能篡改的簽名消息時,拜占庭將軍問題的算法SM(m)普筹,算法能夠處理在n個將軍中至多有m個叛徒的情況($n\geq m$)败明。

口頭協(xié)議和書面協(xié)議都假設(shè)了將軍之間是能夠直接通信的,后續(xù)的文章中將介紹不是所有將軍都能直接通信的情況下拜占庭將軍問題的解法太防。


  1. Lamport L, Shostak R, Pease M. The Byzantine generals problem[J]. ACM Transactions on Programming Languages and Systems (TOPLAS), 1982, 4(3): 382-401. ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妻顶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蜒车,更是在濱河造成了極大的恐慌讳嘱,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酿愧,死亡現(xiàn)場離奇詭異沥潭,居然都是意外死亡,警方通過查閱死者的電腦和手機嬉挡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門钝鸽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人庞钢,你說我怎么就攤上這事拔恰。” “怎么了基括?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵颜懊,是天一觀的道長。 經(jīng)常有香客問我风皿,道長河爹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任桐款,我火速辦了婚禮昌抠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鲁僚。我一直安慰自己,他們只是感情好裁厅,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布冰沙。 她就那樣靜靜地躺著,像睡著了一般执虹。 火紅的嫁衣襯著肌膚如雪拓挥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天袋励,我揣著相機與錄音侥啤,去河邊找鬼当叭。 笑死,一個胖子當(dāng)著我的面吹牛盖灸,可吹牛的內(nèi)容都是我干的蚁鳖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼赁炎,長吁一口氣:“原來是場噩夢啊……” “哼醉箕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起徙垫,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤讥裤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后姻报,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體己英,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年吴旋,在試婚紗的時候發(fā)現(xiàn)自己被綠了损肛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡邮府,死狀恐怖荧关,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情褂傀,我是刑警寧澤忍啤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站仙辟,受9級特大地震影響同波,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叠国,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一未檩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧粟焊,春花似錦冤狡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至香追,卻和暖如春合瓢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背透典。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工晴楔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留顿苇,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓税弃,卻偏偏與公主長得像纪岁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子钙皮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容