拜占庭将军问题

在众多的恶意故障中,存在着这样一种情形: 系统中一个故障部件表现出混乱的行为,例如向系统中的不同部件发送相互冲突的信息。对这样的故障和问题,莱斯利.兰伯特(Leslie Lamporn)等人将其抽象和形式化为“拜占庭将军问题”,并对该类故障的容错进行了系统闸述中。

兰伯特等人将系统假想为一支拜占庭大军,而系统的各个部件是由不同的拜占庭将军所指挥的分布在不同区域的部队。在拜占庭的将军中,有些将军已经叛变,但最初并不知道哪些将军叛变了,哪些将军是忠诚的。那么拜占庭大军所面对的问题是:在观测了敌情之后,分布在不同区域的部队必须通过某种通信方式,达成并实施一个共同的行动计划(或者说,必须达成一致),才能克敌制胜。 在部队之 间的通信过程中,叛变的拜占庭将军会想尽各种办法来阻止部队达成所希望达成的一致行动计划。 兰伯特将拜占庭将军问题表述为:

(BGP1)能否建构一个算法,使得以下的(BGP1. Ⅰ)和(BGP1. Ⅱ)同时成立?
(BGP1.Ⅰ)所有忠诚的将军能采取同样的行动。
(BGP1.Ⅱ)一小部分叛变的将军不会导致忠诚的将军采取错误的行动。

忠诚的将军会按照算法的要求行动,然而叛变的将军则会为所欲为。
因此,需要保证无论叛变的将军做什么,算法都要保证(BGP1. Ⅰ )成立。由于涉及对错误行动进行准确的描述,因此很难对(BGP1.Ⅱ)形式化。因此兰伯特将拜占庭将军问题进一步转换。

令v(i)是第 i 个将军所沟通的信息,每个将军使用相同的方法将v(1), v(2)…v(n)组合成一个行动计划,其中n是将军的数量。
如果v(i)代表第i个将军关于“进攻"还是“撤退”的意见(例如v(i)=0代表第 i 个将军主张撒退,v(i)代表第 i 个将军主张进攻),那么最终的决策将是基于投票的多数原则。使用这种方式,便可以对(BGP1. Ⅱ)进行形式化描述。

兰伯特把拜占庭将军问题进一步表述为:
(BGP2)能否建构一个算法,使得以下的(BGP2.Ⅰ)和(BGP2. Ⅱ)同时成立?
(BGP2.Ⅰ)任意两个忠诚的将军使用相同的v(i)。
(BGP2. Ⅱ)如果第i个将军是忠诚的,那么他发送的值在每个忠诚的将军那里都是v(i)。

通过(BGP2)不难发现,可以把问题聚焦在某个将军如何发送其值给其他人。在此基础上,兰伯特等人最终将拜占庭将军问题表述如下:
(BGP)拜占庭将军问题:一个指挥官必须给其他n-1个副官发送命令,使得:
(BGPⅠ)所有忠诚的副官都遵从同样的命令。
(BGPⅡ)如果指挥官是忠诚的,那么所有忠诚的副官遵从他发送的命令。

在(BGP)中,引入指挥官和副官的角色主要是用于区分消息的发送主体和技收主体,在本质上完全等同于拜占庭将军。如果能够找到(BGP)的解决方案,那么任意第i个将军采用(BGP)解决方案,扮演指挥官的角色,便可以发送命令”使用v(i)作为我的值”,其他 n-1个将军此时扮演副官角色。

经过对拜占庭将军问题的分析,兰伯特等人给出 了拜占庭将军问题的理论上的一个结论:“在拜占庭将军能够发送任意他想要发送的信息(口头消息)的前提下,如果保持忠诚的将军占整个将军数量的比例不超过2/3,那么拜占庭将军问题没有解决方案。"

对于口头清息,兰伯特等人给出个通 算法OM(m),解决出现最多m个叛变将军时,3m+1或更多将军的拜占庭将军问题,其中m是一个非负整数。首先,定义一个函数majority,表示给定的一个集合,从集合中选择出现次数最多的元素作为函数返回值。
OM(m), m=0
其中,
1)指挥官发送一个值给每个副官。
2)副官使用所收到的值作为其值,如果没有收到任何信息,则以默认值RETREAT为其值。
OM(m), m>0
其中,
1)指挥官发送一个值给每个副官。
2)副官调用OM(m-1),以指挥官的身份发送所收到的值(或默认值RETREAT)。
3)对于每个i,i≠j,令vj 是副官 i 在OM(m-1)算法过程中从副官j那里接收到的值。副官 i 使用majority(v1,… ,vn-1)作为其值。

你可能感兴趣的:(区块链)