拜占庭将军问题(三)—— 书面协议

在上篇文章中,对口头消息算法OM(m)进行了阐述,OM(m)算法能够处理在大于3m个将军中至多存在m个叛徒的拜占庭将军问题。Leslie的论文[1]中,对将军之间发送不可篡改的签名消息的情况进行分析,阐述书面协议算法SM(m)

拜占庭将军问题

假设

为了限制叛徒发送的消息,从而使拜占庭将军问题更加简单。一种方法是让每位将军发送不可伪造的签名消息。更准确的来说,在假设A1-A3的基础上添加如下假设:

A4 (a) 忠诚将军的签名不能被伪造,并且任何针对他签名消息的篡改都能被检测到;
(b) 任何将军都可以验证将军签名的真实性

注意,我们并没有对叛徒的签名进行限制,也就是说一个叛徒的签名可以被其他叛徒伪造,进而叛徒可以进行串谋作恶。

引入了签名消息之后,三将军问题也就不在成立了。现在给出一个算法,在任意数量将军中有m个叛徒的情况。

SM(m) 算法

在算法中,司令官发送一个签名的命令给他的每个副官。然后,每个副官添加他的签名到命令上,并发送给其他副官,收到命令的副官再添加他的签名发送给其他副官......

算法还假定了一个choice函数,作用在一个命令的集合上来获得一个单独的命令。choice函数需要满足:

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

例如,choince函数可以是取有序集合$V$的中位数。

在下面的算法中,令$x:i$指由将军$i$签名的命令值$x$,$v:j:i$指命令指$v$由将军$j$签名后再由将军$i$签名。令将军$0$为司令官,每个副官$i$维护一个命令集$V_i$,包含他收到的被正确签名的命令值。(如果司令官是忠诚的,这个值集的元素不会超过一个)。

Algorithm SM(m)

初始化 $V_i = \emptyset$

(1) 司令官签名并发送他的命令给每个副官;
(2) 对于每个$i$:

(A) 如果副官$i$从司令官接收到一个$v:0$形式的消息,并且他还没有接收到过任何命令,那么:

(i) 令$V_i={v}$;
(ii) 发送$v:0:i$给每个其他的副官。

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

(i) 他将$v$添加到$V_i$中;
(ii) 如果$k<m$,那么他发送消息$v:0:j_1:...:j_k:i$给不同于$j_1:...:j_k$的每个副官。

(3) 对于每个副官$i$: 当副官$i$不再接收到消息,他将遵从$choice(V_i)$行动。

注意,在第二步中,副官$i$将忽略任意值已经在$V_i$出现的消息。通过对$k$的归纳,对于每个副官序列$j_1, ..., j_k$, 且$k<m$,每个副官至多收到一条$v:0:j_1:...:j_k$消息。在第(3)步中可以使用超时来判断没有消息再回到来。

举例: m=1, n=3

下图描述了当将军是叛徒时,发送消息的情况:

在第(1)步,司令发送发送“attack”给副官1并发送“retreat”给副官2;
在第(2)步,每个副官将收到两个命令值,即$V_1=V_2={"attack", "retreat"}$。
在第(3)步,两个忠诚的副官执行$choice(V_i)$得到的结果也是一样的。

因此,当司令叛徒时,算法满足条件IC1

当司令是忠诚的时,叛徒副官无法篡改司令的命令,因此忠诚的副官的行动值集$V_i$只有一个元素,即司令发送的命令。

因此,SM(m)算法满足条件IC1IC2

证明

下面证明算法的正确性:

定理 2:对于任意$m$,当将军中至多有$m$个叛徒时,算法SM(m)能解决拜占庭将军问题。

证明: 首先证明条件IC2。如果司令是忠诚的,那么在第(1)步中,他发送签名的命令$v:0$给每个副官。在第(2)(A)步中,每个忠诚的将军收到命令$v$。而且,因为叛徒无法篡改将军的命令成$v':0$,所以忠诚的副官不会在第(2)步中收到其他值因此每个忠诚的副官将按照司令的命令$v$行动。条件IC2得证。

当司令是忠诚的时,条件IC1包含在条件IC2中,因此,下面仅需证明当将军是叛徒时,条件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)步将其发送出去,因此副官$j$也会受到值$v$。

如果副官$i$在第(2)(B)步将一个命令$v$添加到$V_i$中,那么他肯定收到了形如$v:0:j_1:...:j_k$的消息。如果$j$是$j_1:...:j_k$中的一个,那个副官$j$肯定也已经收到命令值$v$。否则,讨论两种情况:

  1. $k<m$。在这种情况下,副官$i$会发送$v:0:j_1:...:j_k:i$消息给副官$j$,因此副官$j$会收到指令$v$;
  2. $k=m$。在这种情况下,因为司令是叛徒,那么副官中至多有$m-1$个叛徒,因此在$j_1:...:j_m$中至少有一个副官是忠诚的,这个忠诚的副官肯定将指令$v$发给了副官$j$,因此,副官$j$拥有指令$v$。

结论得证。

小结

在本篇文章中,介绍了当将军之间传输不能篡改的签名消息时,拜占庭将军问题的算法SM(m),算法能够处理在n个将军中至多有m个叛徒的情况($n\geq m$)。

口头协议和书面协议都假设了将军之间是能够直接通信的,后续的文章中将介绍不是所有将军都能直接通信的情况下拜占庭将军问题的解法。


  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.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容