The Byzantine Generals Problem拜占庭将军问题理解

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

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 V i = Φ V_i=\Phi Vi=Φ
  (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 V i V_i Vi equals ( v v v):
      (ii) he sends the message v : 0 : i v:0:i v:0:i to every other lieutenant.
    (B) If Lieutenant i receives a message of the form v : 0 : j 1 : . . . : j k v:0:j_1:...:j_k v:0:j1:...:jk and v v v is not int the set V i V_i Vi, then:
      (i) he adds v v v to V i V_i Vi;
      (ii) if k < m k<m k<m, then he sends the messages v : 0 : j 1 : . . . : j k : i v:0:j_1:...:j_k:i v:0:j1:...:jk:i to every lieutenant other than j 1 : . . . : j k j_1:...:j_k j1:...:jk.
  (3). For each i: When Lietenant i will receive no more messages, he obeys the order c h o i c e ( V i ) choice(V_i) choice(Vi).

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

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

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

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

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

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

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

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

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

所以无论如何 j j j还是会收到 v v v
综上所述,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)是满足以下条件的点集 i 1 , . . . , i p {i_1,...,i_p} i1,...,ip
    (i) 每一个 i j i_j ij是点 i i i的邻居,且
    (ii) 对每一个不同于 i i i的将军 k k k,存在至少两条从 i j i_j ij k k k的不经过 i i i且只有终点 k k k重合的路径 γ j , k \gamma_j,_k γj,k
  (b) 如果图G的每一个点都有一个由p个点构成的
regular set of neighbors
,那么图G被称为p-正则图(p-regular)。

图6就是一个 3 − r e g u l a r 3-regular 3regular,图7就不是,因为中心点没有有3个点的regular set of neighbors

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

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

引理2 对任意 m > 0 m>0 m>0 p ≥ 2 k + m p \ge 2k+m p2k+m,在最多有 k k k个叛徒的情况下,算法 O M ( m , p ) OM(m,p) OM(m,p)仍然满足 I C 2 IC2 IC2

证明引理2:

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

证明定理3:

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

证明定理4:

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

6. Reliable Systems

6.1 可信系统的要素

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

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

事实上,以上 p r o c e s s o r s processors processors代表中尉,输入单元代表指挥官,诚实意味着 n o n f a u l t y nonfaulty nonfaulty
除了 p r o c e s s o r s processors processors之间互相交流来解决拜占庭将军问题,没有方法能够保证不同的 p r o c e s s o r s processors processors从一个可能发生故障的设备获取的是相同的值。

针对输入设备可能存在提供无意义的输入值的情况,如果该值十分重要的话,可以通过设置多个独立输入设备的方式来提供冗余。当然,冗余输入也不是一定能保证可信,还是得需要确保 n o n f a u l t y p r o c e s s o r s nonfaulty processors nonfaultyprocessors使用这些冗余至计算出相同的输出。

针对正常输入设备可能在不同时有不同值的情况,假设 m a j o r i t y majority majority或者 c h o i c e choice choice取的是中位数,那最后得出的结果很大程度上依赖于输入设备提供的值的范围。

6.2 消息传递系统的约束

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

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

在现实系统中,信道可能随时失效。
O r a l M e s s a g e s OralMessages OralMessages的算法中,两个 p r o c e s s o r s processors processors之间的信道失效则等同于一个 p r o c e s s o r s processors processors失效,因此可以容忍的错误数 m m m包括单纯的 p r o c e s s o r s processors processors故障以及信道失效(当然,一个 p r o c e s s o r s processors processors的多个信道失效等同于那一个 p r o c e s s o r s processors processors故障)。
S i g n e d M e s s a g e s SignedMessages SignedMessages的算法中,如果信道的失效不能导致消息的伪造的话,那么算法 S M ( m ) SM(m) SM(m)其实是对信道失效并不敏感的。这是因为定理4在信道失效的时候依然有效。

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

这一点也是十分必要的,因为一个 f a u l t y p r o c e s s o r faulty processor faultyprocessor不能扮演一个 n o n f a u l t y p r o c e s s o r nonfaulty processor nonfaultyprocessor。实际上,这意味着进程间通信是通过固定线路而不是通过某些消息交换网络进行的。(如果使用交换网络,则必须考虑故障网络节点,然后拜占庭将军问题还会出现)如果 A 4 A4 A4存在的话,其实 A 2 A2 A2是不必要的。因为假扮某一个 p r o c e s s e r processer processer都会表现为伪造他的信息。

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

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

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

对以上两个约束的解释:

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

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

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

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

S i ( M ) S_i(M) Si(M)表示 i i i M M M的签名。为了满足 A 4 A4 A4约束, S i S_i Si必须满足:(a) 如过 p r o c e s s o r i processor i processori正常,那么没有其他 p r o c e s s o r processor processor能够生成 S i ( M ) S_i(M) Si(M);(b) 给出 M , X M,X M,X,任何 p r o c e s s process process都能够验证 X X X是否等于 S i ( M ) S_i(M) Si(M)。性质(a)是无法被确保的,因为 S i ( M ) S_i(M) Si(M)只是一个数据项,而 f a u l t y p r o c e s s o r faulty processor faultyprocessor是可以去产生任何数据项的。但是仍然可以采取以下措施来减少这一可能:

  • Random Malfunction S i ( M ) S_i(M) Si(M)
  • Malicious Intelligence 针对人为操作正常的 p r o c e s s o r processor processor来扰乱系统的正常运行,可以通过密码学的方法构造 S i S_i Si

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

7. 结论

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

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

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

  1. 满足IC1&IC2并不一定会是正确的解,只是达成了共识。
    例如:
    疑问:假设叛徒指挥官发给1&2是y, 发给3是z,最后是否能达成y共识。怎么区别叛徒指挥官的问题
  2. S M ( 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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值