题目:The Byzantine Generals Problem
年份:1982
来源:ACM Transactions on Programming Languages and Systems
作者:LESLIE LAMPORT, ROBERT SHOSTAK, and MARSHALL PEASE

  • 1.Introduction
  • 2.Impossible Results
    • 2.1 3将军(1叛徒)问题不存在解/不能达成共识
    • 2.2 少于3m+1个将军(有m个叛徒)不存在解/不能达成共识。
      • 2.2.1 精确一致性的证明
      • 2.2.2 近似一致性的证明
  • 3. A Solution With Oral Messages
    • 3.1 Oral Messages的定义
    • 3.2 OM(m)算法的步骤及其正确性推导
      • 3.2.1 算法步骤
      • 3.2.2 OM(M)算法的正确性证明
  • 4. A Solution With Signed Messages
    • 4.1 Signed Message的定义
    • 4.2 SM(m)算法的步骤及其正确性推导
      • 4.2.1 SM(m)算法的步骤
      • 4.2.2 SM(m)算法的正确性证明
  • 5. Missing Communication Paths
    • 5.1 对OM(m)的改进OM(m,p)
  • 6. Reliable Systems
    • 6.1 可信系统的要素
    • 6.2 消息传递系统的约束
      • 6.2.1 A1 每一个正常节点发出的信息都被正确的送达
      • 6.2.2 A2 信息接收者知道信息的发送者
      • 6.2.3 A3 信息缺失能够被检测到。
      • 6.2.4 A4 签名不可篡改及可验证性
  • 7. 结论
  • 8. 个人理解&与PBFT的联系与区别

1.Introduction

问题定义

将军决定对敌方城市一个统一的计划,将军之间通过信使通信。

解决该问题有效算法的限定条件:

A.所有诚实的将军决定一致的行动计划(诚实的将军要么都是撤退,要么都是进攻)
B. 少部分的叛徒并不会导致诚实的将军接受错误的计划

条件A若为真,则后述内容为真:每一个诚实的将军必须获得相同的信息(也可表述为:任意两个城市节点的收到将军i的v(i)值是相同的);如果第i个将军是忠诚的,那么其他将军用到的他所发出的信息也必须是v(i)。

拜占庭将军问题:一个commanding general发送给他的n-1个lieutenant generals命令,以达成一致,约束条件如下:

IC1.所有诚实的中尉遵从相同的命令;
IC2.如果将军诚实,每一个诚实的中尉都遵从指挥官的命令。

IC1&IC2也被称为交互一致性( interactive consistency )。
这里的IC1&IC2分别保证了分布式系统中的Safety与Liveness。

2.Impossible Results

2.1 3将军(1叛徒)问题不存在解/不能达成共识

 如图所示,在three-general(one traitor)问题中,不管指挥官还是中尉2是叛徒,中尉1都无法对拜占庭节点进行区分,在图2中,中尉1最终会选择进攻,而中尉2会选择撤退,所以就不满足IC1。因此,一个指挥官两个中尉(中尉必须服从指挥官的命令),存在一个叛徒的情况下不能达成一致的的行动计划。

2.2 少于3m+1个将军(有m个叛徒)不存在解/不能达成共识。

2.2.1 精确一致性的证明

证明(反证法):
 注意此处的拜占庭将军并不单指叛徒,而是指所有的将军。
本文假设3m个将军(m个叛徒)存在解,用这一解来构造three-general (one traitor)问题的解。而3将军解由上文分析可以知道是不存在的(也就是如果构造出来了,那就说明3将军解存在),但这与已知(3将军问题不存在解)矛盾,所以假设(即3m将军问题存在解)不成立。

 将3m将军m叛徒问题中的将军称为阿尔巴尼亚将军,3将军1叛徒中的将军称为拜占庭将军,以示区分。

 拜占庭指挥官代表一个阿尔巴尼亚指挥官和m-1个阿尔巴尼亚中尉,两个拜占庭中尉分别代表m个阿尔巴尼亚中尉。因此对于拜占庭叛徒将军(代表m个阿尔巴尼亚将军),最多对应m个阿尔巴尼亚叛徒将军。
 由IC1可知,m个阿尔巴尼亚中尉(由单个诚实拜占庭中尉所代表)遵循相同的命令,这一命令也是该诚实拜占庭节点所需要遵守的命令。
 对于阿尔巴尼亚将军,可知是满足IC1和IC2的,又由以上对应关系,可知3将军问题是满足IC1和IC2的,也即3将军问题存在解,与已知矛盾,故3m将军问题不存在解

2.2.2 近似一致性的证明

精确一致性与近似一致性是同等困难的
 本文假设将军必须同意一个大致的攻击时间,而不是具体的攻击计划,即,指挥官下令指示攻击时间,且满足以下条件:

IC1'. 所有的诚实中尉在十分钟内发起攻击。
IC2'. 指挥官诚实,则诚实的中尉在指挥官命令中的写的进攻时间的±10min会进攻

(攻击之前一天该命令就已经被中尉们收到;收到命令的时间不重要。只有在命令中指示的的攻击时间重要。)

上述问题类似于拜占庭将军问题,除非诚实的将军数多于2/3,否则本问题无解。

证明(依旧反证法):
假设本问题有解,那么我们可以用这个解构造出拜占庭3将军问题的解。
假设:指挥官发送给中尉信息攻击的时间。1:00代表进攻,2:00代表撤退。

(1)每个中尉根据收到的攻击时间而遵循的命令:时间是1:10以前,则攻击;时间是1:50之后,则撤退;否则转向(2)
(2)查询其他中尉做出的“进攻”或“撤退”的命令如果其他中尉做出了决定,则该中尉遵循与其他中尉相同的命令;否则,撤退。

对上述问题的分析:
 如果指挥官是忠诚的,那么IC2’就被满足,由IC2’可以推出IC1’。
 如果指挥官是叛徒,则需要IC2’成立,此时两个中尉都是诚实的。根据IC1’,如果一个中尉(称该中尉为L1)决定进攻,那么另一个就不能够决定是进攻还是撤退(因为不满足IC1’的条件,称该不能决定的中尉为L2),所以L2转向step(2),查询到L1的决定为进攻,因此L2也决定进攻,那么L1和L2就达到了共识,故IC1’也满足。因此就构造出了拜占庭问题的3将军问题的解,同理,拜占庭的3将军问题不存在解,因此本问题也不存在解。
 同理对于该近似一致性的3m将军问题的解与上文所述一致。

3. A Solution With Oral Messages

3.1 Oral Messages的定义

Oral messages:

  • A1 每一个正常节点发出的信息都被正确的送达;
  • A2 信息接收者知道信息的发送者;
  • A3 信息缺失能够被检测到。

 A1&A2保证叛徒节点不能够干扰两个诚实节点的通信,A1保证信息传输的正确性,A2保证信息本身的正确性。A3能够阻止叛徒不发送信息来干扰共识达成。(具体实现在section 6)
 以上要求了将军之间能够直接进行通信,section 5 提出了不能进行直接通信的算法。

3.2 OM(m)算法的步骤及其正确性推导

3.2.1 算法步骤

 本节提出的算法OM(m),m为叛徒个数。叛徒为指挥官时可能不发送进攻或者撤退的消息,本文把撤退作为默认命令。
中尉的编号是1~(n-1),每个中尉发送的信息是vi(作者发现用中尉“获得某一值”比“服从命令”要更加方便)

函数majority:
取收到的消息(v1,v2……vn-1)的大多数。
(大多数的确定:众数或者中位数)
算法OM(0):
(1)指挥官发送命令
(2)中尉收到指挥官的命令

算法OM(m) m>0:
(1)指挥官发送其命令给所有中尉
(2)对每一个中尉i,若收到来自指挥官的命令,那么将其值赋给vi,否则,vi的值为RETREAT。中尉i作为指挥官执行OM(m-1)算法将他的vi值发送给其他n-2个中尉。
(3)对每一个中尉i,让vj代表i在步骤(2)收到的来自其他中尉j的值vj。那么中尉i会采用majority(v1,v2……vn-1)。

如图示例:m=1, n=4.

当一个中尉为叛徒的情况

(1) 在OM(1)的第一阶段,指挥官发送值v给其余三个中尉;
(2) 第二阶段:中尉1用算法OM(0)发送值v给中尉2,中尉3发送给中尉2值x;
(3) 在第三步,中尉2此时获得了两个v和一个x,因此最终中尉2获得正确的值为v=majority(v,v,x)。中尉1同理。
当指挥官为叛徒的情况
(1) 指挥官发送值x,y,z给中尉1,2,3;
(2)~(3) 最终每一个中尉都得到majority(x,y,z),并不能得到统一的解。

由以上过程,可知算法是递归运行的,从OM(m)到OM(m-1)…OM(0),OM(m)调用n-1个OM(m-1),每个OM(m-1)调用n-2个OM(m-2)…一直到OM(0)

节点数n,叛徒数m的情况下若叛徒节点参与通信(发送错误信息):

OM(m-1)被调用的次数n-1
OM(m-2)被调用的次数(n-1)(n-2)
OM(m-3)被调用的次数(n-1)(n-2)(n-3)
OM(m-k)被调用的次数(n-1)(n-2)(n-3)..(n-k)
总的次数:n-1+(n-1)(n-2)+(n-1)(n-2)(n-3)+(n-1)(n-2)(n-3)..(n-k)

这里是以上递归算法的流程

3.2.2 OM(M)算法的正确性证明

引理1:对任意m,k,若系统中将军总数超过2k+m,叛徒最多有k个,算法OM(m)满足IC2,即如果指挥官诚实,那么每一个诚实的中尉都遵从指挥官的命令。

引理1证明:
当m=0时,由A1可知,IC2满足;
当m>0时,在OM(m)算法的step(1),指挥官把值传给n-1个中尉,在step(2)中,每一个诚实的中尉调用OM(m-1),前文已知n>2k+m,因此n-1>2k+(m-1),所以每一个诚实的中尉i都会得到城实中尉的vj=v。又因为n-1>2k+(m-1)>=2k,即这n-1个中尉的半数以上都是诚实的,所以step(3)中获得的majority(v1,v2……vn-1)必等于v,即满足IC2。

定理1 对任意m,如果将军数量大于3m且叛徒数最多是m,算法OM(m)满足IC1和IC2。

定理1证明:
当不存在叛徒(m=0)的时候,显然OM(0)满足IC1&IC2的约束,因此假定OM(m-1)成立,证明OM(m),m>0成立。
假设指挥官诚实,由引理1可知,若k与m相等,则OM(m)满足IC2,又因为在指挥官诚实的情况下IC1可以由IC2推出,所以只需要证明在指挥官是叛徒的情况下检验是否满足IC1。
已知指挥官是叛徒,最多有m个叛徒。所以中尉中最多有m-1个叛徒。中尉的数量是3m-1,且3m-1>3(m-1),因此OM(m-1)满足IC1&IC2。对于每一个j,任意两个诚实的中尉得到的都是相同的vj的值(这任意两个中尉有一个是j的话就由IC2可以推出;若不包括j的话,由IC1可以推出)。因此,任意两个诚实的中尉最终会得到相同的v1,v2……vn-1,也即算法step(3)的majority(v1,v2……vn-1)相同,OM(m)的IC1的以证明。

对于证明的思路分析:
采用了归纳演绎法,
显然OM(0)恒成立;
假设OM(m-1)成立,若指挥官诚实,那么由引理1可推OM(m)的IC2成立,进而OM(m)IC1成立。若指挥官为叛徒,通过归纳法证明过程中对任意j由OM(m-1)的IC2推出任意两个诚实中尉有相同v<sub>j</sub>的值,这是因为如果j为两个诚实中尉之一,那么就符合OM(m-1)的IC2条件;如果j不是这两个诚实中尉之一,那么j是诚实将军自不必多说,如果j是叛徒的话,因为该任意两个中尉是诚实的,由IC1也可推知二者Vj的值也相同,虽然不是正确值,但达成了共识。因此满足IC1,即OM(m)满足IC1&IC2。

综上,定理1成立。

4. A Solution With Signed Messages

4.1 Signed Message的定义

  叛徒能够“撒谎”导致拜占庭将军问题变的难以解决。可以通过让将军发送不可伪造的信息的方式进行解决。
  在A1~A3的基础上添加A4约束:

(a) 诚实将军的签名不可伪造且可以检测到任何其签名的信息的改动;
(b) 任何人都可以验证将军的签名的真实性。
并未对叛徒将军的信息进行约束,因此叛徒将军之间可以共谋。

有了以上约束,3将军问题就存在了解。
m叛徒任意数量将军算法:(将军总数少于m+2是无意义的)

4.2 SM(m)算法的步骤及其正确性推导

4.2.1 SM(m)算法的步骤

算法大致流程:

指挥官发送带有自己签名的信息给所有中尉;
中尉在指挥官签名的基础上附上自己的签名并发给其他中尉;
其他中尉重复操作。

定义choice函数将一组命令转变成单个命令:

1. 如果集合V由单个元素v组成,choice(V)=v;
2. choice(None)=RETREAT。

choice函数的定义也可以是中位数。
x:i表示被将军i签名的信息x,v:j:i表示先被j签名的信息v,然后又被i签名的v:j
General 0代表commander.
每一个lieutenant i都维持一个集合Vi,Vi是当前收到的被正确签名的命令的集合。(如果指挥官诚实,那么此集合只有一个元素。)

算法SM(m)步骤:
  (1). Initially Vi=ΦV_i=\PhiVi​=Φ
  (2). For each i:
     (A) If Lieutenant i receives a message of the form v:0 from the commander and he has not yet received any order,       then
      (i) he lets ViV_iVi​ equals (vvv):
      (ii) he sends the message v:0:iv:0:iv:0:i to every other lieutenant.
    (B) If Lieutenant i receives a message of the form v:0:j1:...:jkv:0:j_1:...:j_kv:0:j1​:...:jk​ and vvv is not int the set ViV_iVi​, then:
      (i) he adds vvv to ViV_iVi​;
      (ii) if k<mk<mk<m, then he sends the messages v:0:j1:...:jk:iv:0:j_1:...:j_k:iv:0:j1​:...:jk​:i to every lieutenant other than j1:...:jkj_1:...:j_kj1​:...:jk​.
  (3). For each i: When Lietenant i will receive no more messages, he obeys the order choice(Vi)choice(V_i)choice(Vi​).

在步骤(2),中尉i会忽略任何已经包含在集合ViV_iVi​中的命令vvv的信息。
在step(3)如果一个中尉不接受到信息该如何决断呢?一个中尉在step(2)能够最多接收到一次 v:0:j1:...:jk:iv:0:j_1:...:j_k:iv:0:j1​:...:jk​:i 信息,若约束中尉jkj_kjk​要么发送该信息(指 v:0:j1:...:jk:iv:0:j_1:...:j_k:iv:0:j1​:...:jk​:i ),要么发送一个其停止接收该信息的信息,就能够在收到所有信息较容易地做出决定。(通过A3约束,即任何信息的缺失都能够被检测到,任一中尉都能够检测到上述关于jkj_kjk​上述两个信息的缺失) 。除此以外,当无信息到达时超时机制也可用于进行决断(Section 6给出)。
step(2)中收到签名的中尉会丢弃具有不正确签名格式的信息,这是为了节省存储空间。因为如果不这么办的话,当一个命令vvv被kkk个中尉签名并以消息形式传递给其他中尉的时候,系统中就会存在(n−k−2)(n−k−3)...(n−m−2)(n-k-2)(n-k-3)...(n-m-2)(n−k−2)(n−k−3)...(n−m−2)个拷贝。
以n=7,m=2为例:(本文应该是默认叛徒不参与通信(也可能是无法进行通信)或且发出的信息并不留存)

被k个中尉签名 拷贝数目(理论值) 消息发出时状态
0 n-1 v:0v:0v:0
1 4*(7-2-2) v:0:j1v:0:j_1v:0:j1​
2 3 (此时k=1<m,并不会停止传播) v:0:j1:j2v:0:j_1:j_2v:0:j1​:j2​

之后所有节点发现k=m,转step(3)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wzyavUv2-1596772239276)(3-SM1-commanderTraitor.png)]

上图5展示了算法SM(1)的运行过程,叛徒指挥官发给中尉1命令"attack":0"attack":0"attack":0 ,发给中尉2命令"retreat":0"retreat":0"retreat":0 。经过step(2),两个中尉的V1=V2="attack","retreat"V_1=V_2={"attack","retreat"}V1​=V2​="attack","retreat",且都遵循该命令choice=("attack","retreat")choice=({"attack","retreat"})choice=("attack","retreat"),与图2的OM算法不同之处在于中尉通过最后的choicechoicechoice可以知道指挥官是叛徒,并且A4也能保证其结论的正确性。
事实上,第m个将军并不需要继续在命令的后边附上自己的签名,因为他收到命令之后就不会再转发给别人了。因此SM(1)的签名是不必要的。

4.2.2 SM(m)算法的正确性证明

定理2 对任意m,算法能够解决最多m个叛徒的拜占庭将军问题。

证明:
先证IC2,当指挥官是诚实的情况下,在step(1)他会发送v:0v:0v:0给他的中尉们,每一个诚实的中尉在step(2)(A)都会收到命令vvv,因为叛徒中尉并不能伪造指挥官签名,因此在step(2)(B)并不能对消息进行篡改,所以诚实的中尉在step(2)(B)并不能收到除了vvv以外的其他命令。这就保证了集合ViV_iVi​只会有一个命令vvv,再经由step(3)的choicechoicechoice函数,最后每一个中尉的命令都是一样的,也即满足IC2。
因为在指挥官是诚实的情况下IC1可以由IC2推导出,因此只需要证明指挥官是叛徒的情况下是否符合IC1即可。若两个中尉i,ji,ji,j最后在步骤3服从相同的命令,那么他们俩在step(2)的Vi,VjV_i,V_jVi​,Vj​也是一样的。因此,证明IC1就是证明
如果iii在step(2)将vvv加入到集合ViV_iVi​,那么jjj也一定在step(2)把vvv加入到VjV_jVj​中。
如果i在step(2)(A)收到了命令vvv,那么他就会将其在step(2)(A)(ii)发送给jjj,所以jjj就会收到这一信息(因为消息的A1约束)。如果iii在step(2)(B)将命令添加到自身的ViV_iVi​中,那他一定收到了信息 v:0:j1:...:jkv:0:j_1:...:j_kv:0:j1​:...:jk​ 。如果jjj是其中一个jrj_rjr​那么通过A4约束,他一定已经收到了消息vvv,如果jjj不在该签名队列( j1:...:jkj_1:...:j_kj1​:...:jk​ )中,分两种情况

  1. k<mk<mk<m的话,i就会将信息v:0:j1:...:jk:iv:0:j_1:...:j_k:iv:0:j1​:...:jk​:i发给jjj,jjj同样会收到命令vvv。
  2. k=mk=mk=m的话,除叛徒指挥官之外,n-1个中尉中最多还有m-1个叛徒中尉,因此至少在j1,j2...:jmj_1,j_2 ...:j_mj1​,j2​...:jm​中,至少有一个中尉是诚实的。那么这个诚实的中尉也在他收到消息的第一时间将vvv发给jjj。

所以无论如何jjj还是会收到vvv
综上所述,SM(m)算法满足IC1&IC2,定理2成立。

5. Missing Communication Paths

前文所述都是将军之间可以两两直接发送消息的情况,以下讨论移除这一假设对算法OM(m)和SM(m)进行扩展。
3-正则图(3-regular graph):每一个节点的度都是3.如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C4WH1bVg-1596772239279)(3-3-regular_graph.png)]

如果两个将军有边相连,那么称这两个将军为邻居

定义1 :
  (a) 节点i的邻居正则集合(regular set of neighbors)是满足以下条件的点集i1,...,ip{i_1,...,i_p}i1​,...,ip​
    (i) 每一个iji_jij​是点iii的邻居,且
    (ii) 对每一个不同于iii的将军kkk,存在至少两条从iji_jij​到kkk的不经过iii且只有终点kkk重合的路径γj,k\gamma_j,_kγj​,k​。
  (b) 如果图G的每一个点都有一个由p个点构成的regular set of neighbors,那么图G被称为p-正则图(p-regular)。

图6就是一个3−regular3-regular3−regular,图7就不是,因为中心点没有有3个点的regular set of neighbors

5.1 对OM(m)的改进OM(m,p)

前提:需要将军(包括叛徒将军)之间的能够发送消息的图是一个3m−regular3m-regular3m−regular。
对所有的正数m,pm,pm,p,如果图G是一个p−regularp-regularp−regular,定义算法OM(m,p)OM(m,p)OM(m,p)如下所示。
OM(m,p):OM(m,p):OM(m,p):
  (0) 选择指挥官的由ppp个中尉组成的正则邻居集合NNN。
  (1) 指挥官将其值发给NNN中的每一个中尉。
  (2) 对NNN中的每一个中尉iii,以ViV_iVi​代表iii收到的值,或RETREAT代表未收到任何值。中尉iii按照如下方式将ViV_iVi​发给其他中尉kkk:
    (A) 如果m=1m=1m=1,通过定义1中符合(a)(ii)要求的路径γj,k\gamma_j,_kγj​,k​发送值。
    (B) 如果m>1m>1m>1,那么在图中去除指挥官且iii扮演新的指挥官运行算法OM(m−1,p−1)OM(m-1,p-1)OM(m−1,p−1)。
  (3) 对每一个kkk,且每一个在NNN中不同于kkk的iii,将中尉kkk在step(2)中收到的来自中尉iii的值赋给viv_ivi​,如果没有收到就赋值RETREAT给viv_ivi​。当N=i1,...ip时,N={i_1,...i_p}时,N=i1​,...ip​时,中尉kkk采用majority(vi1,...vip)majority(v_{i_1},...v_{i_p})majority(vi1​​,...vip​​)的值。
注意:在移除p−regularp-regularp−regular图的单个点之后,就得到了一个p−1−regularp-1-regularp−1−regular图,因此OM(m−1,p−1)OM(m-1,p-1)OM(m−1,p−1)在step(2)(B)仍然是适用的。

引理2 对任意m>0m>0m>0且p≥2k+mp \ge 2k+mp≥2k+m,在最多有kkk个叛徒的情况下,算法OM(m,p)OM(m,p)OM(m,p)仍然满足IC2IC2IC2。

证明引理2:

定理3 对任何m>0,p>3mm>0,p\gt3mm>0,p>3m,在最多有mmm个叛徒的情况下,算法OM(m,p)OM(m,p)OM(m,p)能够解决拜占庭将军问题。

证明定理3:

定理4 对任何m,dm,dm,d,在最多有mmm个叛徒并且诚实将军的子图直径(相聚最远的两点)ddd的情况下,算法SM(m+d−1)SM(m+d-1)SM(m+d−1)能够解决拜占庭将军问题。

证明定理4:

推论 如果诚实将军的图是连通图,那么SM(n−2)SM(n-2)SM(n−2)能够解决nnn将军问题的拜占庭将军问题。

6. Reliable Systems

6.1 可信系统的要素

可信系统的两大要素:一致性(Safety)可用性(Liveness)。(分别对应下列1,2)

  1. 所有正常(nonfaulty)的processorsprocessorsprocessors必须采用相同的输入值以保证相同的输出。
  2. 如果输入单元正常工作的话,所有正常的processorsprocessorsprocessors用输入单元提供的值作为输入来进行处理,以便于正确地输出。

事实上,以上processorsprocessorsprocessors代表中尉,输入单元代表指挥官,诚实意味着nonfaultynonfaultynonfaulty。
除了processorsprocessorsprocessors之间互相交流来解决拜占庭将军问题,没有方法能够保证不同的processorsprocessorsprocessors从一个可能发生故障的设备获取的是相同的值。

针对输入设备可能存在提供无意义的输入值的情况,如果该值十分重要的话,可以通过设置多个独立输入设备的方式来提供冗余。当然,冗余输入也不是一定能保证可信,还是得需要确保nonfaultyprocessorsnonfaulty processorsnonfaultyprocessors使用这些冗余至计算出相同的输出。

针对正常输入设备可能在不同时有不同值的情况,假设majoritymajoritymajority或者choicechoicechoice取的是中位数,那最后得出的结果很大程度上依赖于输入设备提供的值的范围。

6.2 消息传递系统的约束

本文所给出的构建可信系统的解决办法(OralMessages or SignedMessages),将军算法的实施并不难(就是OM(m)和SM(m)及它们的改进OM(m,p)和SM(m+d-1)),难点在满足A1A3及A4A1~A3及A4A1 A3及A4的消息传递系统的实现。以下对A1A4A1~A4A1 A4给出考量。

6.2.1 A1 每一个正常节点发出的信息都被正确的送达

在现实系统中,信道可能随时失效。
在OralMessagesOralMessagesOralMessages的算法中,两个processorsprocessorsprocessors之间的信道失效则等同于一个processorsprocessorsprocessors失效,因此可以容忍的错误数mmm包括单纯的processorsprocessorsprocessors故障以及信道失效(当然,一个processorsprocessorsprocessors的多个信道失效等同于那一个processorsprocessorsprocessors故障)。
在SignedMessagesSignedMessagesSignedMessages的算法中,如果信道的失效不能导致消息的伪造的话,那么算法SM(m)SM(m)SM(m)其实是对信道失效并不敏感的。这是因为定理4在信道失效的时候依然有效。

6.2.2 A2 信息接收者知道信息的发送者

这一点也是十分必要的,因为一个faultyprocessorfaulty processorfaultyprocessor不能扮演一个nonfaultyprocessornonfaulty processornonfaultyprocessor。实际上,这意味着进程间通信是通过固定线路而不是通过某些消息交换网络进行的。(如果使用交换网络,则必须考虑故障网络节点,然后拜占庭将军问题还会出现)如果A4A4A4存在的话,其实A2A2A2是不必要的。因为假扮某一个processerprocesserprocesser都会表现为伪造他的信息。

6.2.3 A3 信息缺失能够被检测到。

信息的缺失只能通过超过规定时间内到达来检测到。能够满足A3A3A3约束的超时设置有以下要求:

  1. 消息的生成和传送都有一个最大固定时间。
  2. 在固定最大错误范围内,发送者和接收者时钟是同步的。(类似于时间相差±20ms)

对以上两个约束的解释:

  • 1是为了保证接收者能够知道自己等了多久(消息的生成时间是指processerprocesserprocesser接收到必要输入并生成消息之后开始所花费的用来发送消息的时间)
  • 2是为了拜占庭将军问题能够解决的必要条件。假设将军只有在以下情况发生时才会采取行动:对所有将军而言固定的初始时间、在消息一到达的时候、当一个随机选取的时间段结束的时候。
    给传输延迟设置上限或者下限可以使得processorprocessorprocessor在消息来回传输的过程中实现时钟。

1&2两个设定让A3具有可行性。让μ\muμ代表消息最大产生和传输的延迟,且无论何时正常processorsprocessorsprocessors之间的时钟之间的误差在τ\tauτ之间。那么所有在本地时间TTT时间正常生成的信息,都会在接收者本地时间T+μ+τT+\mu+\tauT+μ+τ时间收到,因此,如果接收者没有收到信息的话,就可以认为信息未被发送。(如果信息未在规定时间内送达,那么发送者一定是出了故障,因此算法的正确性不能依赖于正在发送的信息。)因此,在设置了输入处理单元发送值的时间之后,接收者就可以依此来决定自己需要等待的时间了。例如,算法SM(m)SM(m)SM(m)中一个processorprocessorprocessor必须等待T0+k(μ+τ)T_0+k(\mu+\tau)T0​+k(μ+τ)时间(k指消息已经被k个将军签过名),T0T_0T0​指指挥官开始执行算法的时间。
和拜占庭将军问题同样难的问题在保持processorsprocessorsprocessors的时钟同步,因为即使刚开始都是同步的,那么随着算法的执行也会变得不同步。

6.2.4 A4 签名不可篡改及可验证性

(a) 诚实将军的签名不可伪造且可以检测到任何其签名的信息的改动;
(b) 任何人都可以验证将军的签名的真实性。

用Si(M)S_i(M)Si​(M)表示iii对MMM的签名。为了满足A4A4A4约束,SiS_iSi​必须满足:(a) 如过processoriprocessor iprocessori正常,那么没有其他processorprocessorprocessor能够生成Si(M)S_i(M)Si​(M);(b) 给出M,XM,XM,X,任何processprocessprocess都能够验证XXX是否等于Si(M)S_i(M)Si​(M)。性质(a)是无法被确保的,因为Si(M)S_i(M)Si​(M)只是一个数据项,而faultyprocessorfaulty processorfaultyprocessor是可以去产生任何数据项的。但是仍然可以采取以下措施来减少这一可能:

  • Random Malfunction Si(M)S_i(M)Si​(M)
  • Malicious Intelligence 针对人为操作正常的processorprocessorprocessor来扰乱系统的正常运行,可以通过密码学的方法构造SiS_iSi​

当签名被看到的时候就很容易去伪造Si(M)S_i(M)Si​(M),因此,应当避免相同的信息被两次签名,这就意味着当使用SM(m)SM(m)SM(m)重复的发送一个值的时候,需要给值加上序列号以保证其唯一性。

7. 结论

本文提出的应对拜占庭将军问题的解在对时间和消息数量上的花费是很多的。OM(m),SM(m)OM(m),SM(m)OM(m),SM(m)都要求信道数量需要大于m+1条。换句话说,每一个中尉都要去等待指挥官发出的命令并且通过mmm个其他中尉转发该消息。非强连通图的解决算法需要消息传递路径数大于m+dm+dm+d,ddd代表忠诚将军所代表的子图的路径。

几个独立的消息可以被合并发送,但是消息数量的压缩虽有可能但是有待进一步研究。
随机故障下的可靠性是一个难题且其解决方法是很昂贵的。唯一的方法就是去限定错误发生的类型,比如说人们经常假定计算机无法响但是永远无法返回错误的响应,而这种假设在拜占庭将军问题中并不能行。

8. 个人理解&与PBFT的联系与区别

  1. 满足IC1&IC2并不一定会是正确的解,只是达成了共识。
    例如:
    疑问:假设叛徒指挥官发给1&2是y, 发给3是z,最后是否能达成y共识。怎么区别叛徒指挥官的问题
  2. SM(m)SM(m)SM(m)与PBFT的区别(仅仅笔者看出来的,欢迎补充)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EGADYsxO-1596772239280)(2020-07-29-09-38-05.png)]
    PBFT弱化了Liveness强调Safety,PBFT achieves safety even in fully asynchronous network condition, and liveness under period of synchrony, as permitted by FLP. 保证的是最终一致性

参考文献:
L. Lamport, R. Shostak, and M. Pease. The Byzantine Generals Problem. ACM Transactions on Programming Languages and Systems, 4(3), 1982

The Byzantine Generals Problem拜占庭将军问题理解相关推荐

  1. 拜占庭将军问题(The Byzantine Generals Problem)

    注: 该博客后续将不再更新, 最新版本请见本人个人主页. 拜占庭将军问题(The Byzantine Generals Problem)提供了对分布式共识问题的一种情景化描述, 由Leslie Lam ...

  2. 关于“拜占庭将军算法”byzantine generals problem

    一.拜占庭将军算法的背景: 对于系统坏掉的风险,可以这样假设:我们的操作员可能会误操作.可能会被贿赂或背叛,系统本身可能就有木马程序,系统可能会被黑客或病毒占领,我们自己开发的系统可能有漏洞,我们的开 ...

  3. 分布式系统–拜占庭将军问题(The Byzantine Generals Problem)

    本文档作为分布式系统的学习基础,通过拜占庭问题取尝试先了解分布式系统里面可能存在的基础问题.拜占庭将军问题,主要为了解决在已知有成员不可靠的情况下,其余忠诚的将军需要在不受叛徒或间谍的影响下达成一致的 ...

  4. 拜占庭将军问题(Byzantine Generals Problem)

    论文:Lamport L, Shostak R, Pease M. The Byzantine generals problem[M]//Concurrency: the works of lesli ...

  5. The Byzantine Generals Problem 全文要点翻译及理解

    题目:The Byzantine Generals Problem 年份:1982 来源:ACM Transactions on Programming Languages and Systems 作 ...

  6. 分布式概念扫盲(Byzantine generals problem/CAP/TPC/TCC)

    The Byzantine Generals Problem 问题描述 参考维基百科:拜占庭将军问题 投票 Situation1 A:1,B:1,C:0 A收到的指令1和0的比例为:2:1 B收到的指 ...

  7. 拜占庭将军问题OM算法详解(m=1,m=2)

    拜占庭将军问题OM算法介绍 网上关于拜占庭将军问题的讨论有很多了,但是关于OM算法的讨论,并没有太深入,网上能看到比较多m=1的情况,对于m>1的情况,并没有过多的介绍. 本人在一开始,对m=2 ...

  8. 如何理解拜占庭将军问题

    拜占庭问题 拜占庭问题最早由 Leslie Lamport 等学者于 1982 年在论文<The Byzantine Generals Problem>中正式提出,是用来解释异步系统中共识 ...

  9. 什么是拜占庭将军问题

    接触区块链的同学,多少都听说过拜占庭将军问题,经常看到或听到某某区块链使用某某算法解决了拜占庭将军问题,那么究竟什么是拜占庭将军问题呢? 什么是拜占庭将军问题 也被称为"拜占庭容错" ...

  10. 拜占庭将军问题与中本聪

    拜占庭将军问题很多人可能听过,但不知道是什么意思,本文从非专业的角度来讲讲,拜占庭将军问题到底是说什么的. 拜占庭将军问题(Byzantine Generals Problem),首先由Leslie ...

最新文章

  1. 深入JVM锁机制2-Lock
  2. springmvc json 406
  3. Nginx使用http auth basic认证保护后台admin
  4. 4. 分类的线性模型
  5. 职业高中计算机英语教案,职高英语shopping教学设计.doc
  6. java怎么把数组的元素个数_想问一下怎样才可以把一个数 放在已知数组里面
  7. win11怎么添加小组件 window11添加小组件的设置方法
  8. 七彩虹智能主板设置U盘启动教程
  9. Android中启动页ViewPager和ViewFlipper带指示器
  10. 腾讯云数据库TDSQL-学习心得与收获
  11. PS快速去除文字水印图片文字水印去除LOGO
  12. macOS Big Sur 11.5 (20G71) 正式版 DMG、ISO、IPSW 百度网盘下载
  13. 五阶魔方公式java_五阶魔方降阶法公式是什么?
  14. 字节跳动面经(2020春招)
  15. yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1
  16. MATLAB之多项式插值
  17. linux yum使用管理详细使用转载的
  18. STM32单片机硬件I2C读取AHT10温湿度传感器数据
  19. Nutch 2.0 终于来了
  20. 冰冰学习笔记:string类的简单模拟

热门文章

  1. HDFS Rack Awareness详解
  2. python battleship_代做Battleship作业、代写CS/Python编程语言作业、代做PlayerBoard留学生作业...
  3. 高级语言与低级语言如何定义?解释型语言和编译型语言又如何区别?
  4. C#打开文件夹加载图片
  5. 貌似淘宝下拉PopWindow筛选【动画、列表、位置】
  6. 企业长期偿债能力评估-利息收入倍数、财务杠杆比率、资产负债率、利息保障倍数、债务股本比率...
  7. qq大厅连连看外挂:c++实现
  8. 【Python实用工具】暴力破解-2!Python编写八位数密码本
  9. 台式计算机把光驱改成硬盘,笔记本电脑光驱怎么改换硬盘?笔记本光驱改装固态硬盘图文教程...
  10. 从日志统计到大数据分析