拜占庭将军问题 The Byzantine Generals problem(三)

拜占庭将军问题 The Byzantine Generals problem(三)

签字信息的问题求解A solution with signed messages

通过加强条件(发送不可伪造的签名信息)使问题更简单,在之前A1-A3的前提下新增A4:
A4 (a)一个忠诚的将军的签名不可伪造,任何对其签名信息的修改都会被发现
(b)任何人可以验证将军签名的真实性
没有对叛徒的签名做限制,叛徒间的签名可相互伪造。
接下来给出算法可以解决对任意数量>=m+2的将军数下有m个叛徒的情况。在算法中,司令发送带有签名的信息给其他将领,每一个将领添加其签名再信息中再发送给其他将领。算法定义一个选择函数choice,其在一个集合命令信息中选出一个,如下:
1.如果集合V只有一个值v,Choice(V) = v
2.choice(∅) = RETREAT(撤退)。空集情况下。
可以注意到,可选择中值为函数的值。

定义

x:i 表示被将军i签名的值x ,则v:j:i 表示值v被将军j签名以后,然后又被将军i签名。令将军0号为命令的发送者。在算法里每一个将领i都有一个集合Vi ,集合里面包括他收到的被其他将军签名的信息。
算法SM(m).
初始化 Vi =∅.
(1)司令发送其签名信息v:0给每一个将领。
(2)对每一个将领i
(A)如果将领 i 收到从司令v:0,且其Vi =∅。 其操作如下:
(i)他令其Vi ={v};
(ii)他发送v:0:i给每一个其他的将领.
(B)如果将领 i 收到信息v:0:j1:…:jk ,且vVi,则:
(i)他将v加入自己的集合Vi
(ii)如果k<m,则其发送v:0:j1:…:jk:i 给其他的将领∉j1,…,jk
(3)对每一个将领i
当将领i 不再收到信息后,其遵守choice(Vi)
注意到第二步(2),将领i会忽略掉已经在集合Vi中的v值。且第三步没有指定将领如何判断其将不再收到信息。通过分析k的取值情况,可以简单的得出,对每一个将军序列形式j1:…:jkkm,每个将领只能收到一条信息形式v:0:j1:…:jk 在第二步(2)。如果要求将领 jk 发送这样一条信息或者发送一条通知告知其不会发送这样一条信息。(通过前提A3,将领可以发现没有发送其中任何一条的叛徒)。超时设置可以作为信息可接收的判定,其他部分再讨论。
注意到第二步(2),将领i将会忽略到任何没有正确签有一串署名的值形式的信息。…
定理2.对任意的m,在至多m个叛徒的情况下,算法SM(m)解决拜占庭问题。
证明,在司令是忠诚的情况下,没有信息可被篡改。显然成立。
在司令是叛徒的情况下,需要证明IC1成立,则任意两个忠诚的将领ij将遵循第三步获得的一致的命令。所以必须证明 将领ij在第二步将相同的命令信息放进自己的集合。情况分析,可得有以下两种情况,如果将军i获得信息v,他把信息发送给将军j。如果将军i获得信息v:0:j1:…:jk ,且j在签名当中,则j已经把值v放进自己的集合。如果j不在签名当中,分析两种情况:
1.k<m.将军i将会发送信息v:0:j1:…:jk :i给将军j ,所以j获得信息v.
2.k=m.因为司令是叛徒,且有m-1个将领也是叛徒。所以在j1,…,jm 至少有一个将领是忠诚的。这个忠诚的将领必定有将获得的v值发送给将领 j,当他第一次收到这个信息的时候,将领j,必定收到信息。
证明结束。

你可能感兴趣的:(IT)