拜占庭将军问题(二)——口头协议

在上一篇文章中,介绍了拜占庭将军问题的描述、条件和结论。在传输口头消息(Oral Messages)时,少于3m+1个将军中有m个叛徒时,拜占庭将军问题是无解的。Leslie在原文[1]中, 提出了一种传输口头消息时拜占庭将军问题的一种解法。

定义

首先,为定义口头消息,拜占庭将军消息系统具有以下假设:

A1. 每个消息被正确发送。
A2. 消息的接收者知道是谁发送的消息
A3. 可以被检测到缺少消息

假设A1A2防止叛徒干扰其他两个将军的通信,假设A3防止叛徒通过不发消息干扰一致性达成。

另外,口头协议算法要求每个将军可以与其他任意将军直接进行通信,Leslie在其原文中的第五章中描述了不需要满足这个条件的算法。

OM(m)算法

Leslie针对口头消息(Oral Messages)的情况,提出了口头协议算法OM(m),其中m为非负。OM(m)算法是一个递归算法,用来处理在3m+1个将军中至多存在m个叛徒的情况。

默认行动:副官如果在指定时间内收不到来自司令的命令,则默认采取“撤退”行动。这是为了防止司令官为叛徒时,通过不发出命令来阻碍达成共识。

行动函数:算法假设使用majority方法作为行动函数,即当v_i的大多数为v时,则majority(v_1,...,v_{n-1})=v

注:其实对于行动函数,有两种比较容易想到的选择:

  • v_i的大多数值v,如果不存在大多数采取默认行动——“撤退”;
  • 如果v_i是个有序的集合,采用其中位数。

注:由于简书markdown编辑器不支持公式,因此符号v_iv下标 i

OM(m)算法:采用递归定义,下面分别说明OM(0)OM(m)的内容。

m=0时,

OM(0)算法

(1) 司令发送他的值给每个副官;
(2) 如果副官收到司令的值,使用这个值;否则,使用默认值——“撤退”。

m>0时,

OM(m)算法

(1) 司令发送他的值给每个副官;
(2) 对于每个i,令v_i为副官i从司令接收到的值;如果没有收到值,则v_i采用默认值——“撤退”。在OM(m-1)算法中,副官i作为司令向另外n-2个副官(不包括OM(m)中的司令)发送值v_i
(3) 对于每个i,对于每个j≠ij,令v_i为副官i在第(2)步中从副官j接收的值;如果没有接收到值,则使用默认值——“撤退”。副官imajority(v_1, ..., v_{n-1})作为其值。

举例:m=1, n=4

  • 当一个副官是叛徒时

假设副官3是叛徒,下图针对副官2收到的消息对OM(1)进行阐述。

Algorithm OM(1); Lieutenant 3 a traito

第一步:司令向每个副官发送他的值v给每个副官;
第二步:副官1执行OM(0),作为司令向副官2发送v;由于副官3是叛徒,其执行OM(0)向副官2发送了不同的值,假设为x
第三步:副官2拥有的行动值集为{v_1, v_2, v_3}={v, v, x},采用majority函数,副官2采取的行动值为v=majority{v_1, v_2, v_3}

同理,副官1采取的行动指令也是v,即满足拜占庭将军问题一致性条件IC1IC2

注:拜占庭将军问题一致性条件为:

IC1. 所有忠诚副官遵守同一命令;
IC2. 如果司令官是忠诚的,每个忠诚的副官遵守他的命令。

  • 当司令为叛徒时

下图描述了当司令为叛徒,三位副官是忠诚的情况对OM(1)算法进行阐述。

Algorithm OM(1); The commander a traitor

第一步:司令为了阻止忠诚副官达成一致,分别向三位副官发送值{x, y, z};
第二步:每个副官从司令收到的值作为自己的值,并执行OM(0)向其他副官发送;
第三步:在第三步中,每个副官拥有的值集均为{x, y, z},因此,副官执行行动函数majority得到的结果是一样的。

由于三位忠诚的将军采取同样的行动,满足拜占庭将军一致性条件IC1

从m=1, n=4的例子可以看出,OM(m)算法能够处理拜占庭将军问题。在OM(m)算法中,独立执行了n-1OM(m-1),且每个OM(m-1)算法独立执行了n-2OM(m-2)……这就意味着,每个副官可能独立发送多轮消息。为了避免混淆,需要区分每轮消息。最易想到的方法是,每个副官i在为第(2)步的值v_i添加前缀i。可以看出,算法OM(m-k)将被调用(n-1)...(n-k)次,发送拥有k个副官序号前缀的值。

OM(m)算法证明

本节采用归纳法证明OM(m)算法能够解决拜占庭将军问题。

引理

为了证明OM(m)算法,我们首先来证明一条引理:

对于任意的mk,如果在多于2k+m个将军中至多存在k个叛徒,则OM(m)算法满足条件IC2

证明: 归纳法,针对参数m进行归纳。

m=0时,根据假设A1OM(0)算法,易得如果司令是忠诚的,忠诚的将军按照司令的指令行动,引理是成立的。

m>0时,假设在m-1时,引理成立,下面来证明在m时,引理也成立。

OM(m)第一步,司令发送值v给他的n-1个副官;

第二步,每个忠诚的副官在n-1个副官中执行OM(m-1)算法。根据假设n>2k+m,则n-1>2k+(m-1),所以根据引理在m-1时成立,可得,每个忠诚的将军从忠诚的将军j处获得的值为v_j=v

第三步中,由于叛徒最多有k个,且n-1>2k+(m-1)≥2k,所以n-1个将军中的忠诚将军为大多数。所以第三步每个忠诚的将军获得值majority(v_1, ..., v_{n-1})=v,满足条件IC2

引理得证。

证明

下面来证明算法OM(m)能够解决拜占庭将军问题。

定理 1:对于任意m,如果存在多于3m个将军中至多有m个叛徒时,OM(m)算法满足条件IC1IC2

证明:针对变量m采用归纳法

m=0时,即没有叛徒存在,则很容易证明OM(0)满足条件IC1IC2

假设在m-1时,定理成立,下面证明在m时,定理也成立。

  • 当司令是忠诚的

引理 1中的k=m,即多于3m个将军中至多存在m个将军时,OM(m)满足条件IC2。又因为当司令是忠诚的时,条件IC1包含在条件IC2中,所以OM(m)也满足条件IC1

  • 当司令是叛徒时

由于至多有m个叛徒,所以至多存在m-1个副官是叛徒。因为将军的数量多于3m,所以副官的数量也多于3m-1,且3m-1>3(m-1)。根据递归假设算法OM(m-1)满足条件IC1IC2,所以在第三步,对于每个副官j,任意两个忠诚的副官得到相同的v_j。(如果副官j是两个中的一个,运用条件IC2;否则,运用条件IC1)。

所以,任意两个忠诚的副官能获得相同的指令值集{v_1, ..., v_{n-1}},因此,在OM(m)第三步中,忠诚将军遵从相同的值,即majority(v_1, ..., v_{n-1})。所以,算法OM(m)满足条件IC1

综上所述,定理 1得证。

小结

本文介绍了在将军之间直接传送口头消息(Oral Messages)时,解决拜占庭将军问题的算法OM(m),并对其在m=1n=4时进行了举例说明,最后对OM(m)算法进行了证明。

接下来的文章中,将对将军之间传输签名的书面消息(Signed Messages)时,解决拜占庭将军问题的算法进行阐述。


  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阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容