最近我正在阅读论文The Byzantine Generals Problem,并为以下结论感到困惑:“将军少于3m + 1的将领不能解决m个叛徒”。
在论文中显示,对于3名将军而言,我无法理解口头表达的解决方案。但是当涉及到3m个将军时,本文通过矛盾进行了证明:首先使用每个拜占庭将军模拟最多m个阿尔巴尼亚将军,然后表明如果存在针对具有m个叛徒的这3m个将军的解决方案,则存在3个拜占庭将军的解决方案,已经证明是不可能的。
我无法理解。这是否意味着当三个具有相同数量的将军(例如m个将军)的小组行动相同时,我们可以将一组中的m个将军视为一个单一的将军吗?
答案 0 :(得分:1)
我从this question复制了我的答案。该帖子通过说明特定的投票场景,说明了为什么需要3f + 1个副本(3m + 1个将军)来容忍f个拜占庭式错误副本(m个叛徒)。例如,在拜占庭通用术语中,0/1值可能表示攻击/撤退。
我认为我需要通过说明包括主副本在内的恶意副本的协同攻击来详细说明答案。假设在拜占庭容错系统中有n个副本,其中n = 3f +1 = 100,f = 33。在系统中,系统可以容忍f个拜占庭式错误副本。现在我举一个反例来回答你的问题。请考虑以下设置;我将n个副本分成三组;
G1 = {b1,b2,...,b33}对于包括拜占庭基本(b1),| G1 |的拜占庭错误副本。 = 33 对于正确的副本组| G2 |,G2 = {r1,r2,...,r33} = 33 对于正确的副本组,| G3 |,G3 = {r34,r35,...,r67} = 34 因为n = | G1 | + | G2 | + | G3 | = 33 + 33 + 34 = 100,以上分区有意义。 G1由超级天才黑客完全协调地控制,他们对破坏协议特别感兴趣。
现在,我将演示如果提交阶段从协议中消失,上述设置将如何违反安全条件; (安全条件表示G2和G3的状态应该相同)。为了简化说明,共识值被简化为二进制值,而不是带有序列号的请求。
[准备阶段]:Primary(b1)向G2发送一个0值,向G3发送一个值。这种情况不是问题,因为我们假设拜占庭为主。 [准备阶段]:现在,G2和G3中的副本交换主副本中的消息,以检查它们是否具有相同的消息。但是,在此阶段,来自G1的副本将0值发送到G2,并将1值发送到G3。消息交换后,情况如下
a。 G2中的副本收到以下结果; 0票为66票,1票为34票。
b。 G3中的副本收到以下结果; 33票为0值,33 + 34 = 67票为1值。
因为仲裁群大小为2f + 1 = 67,所以G3中的副本接受拜占庭主数据库中与拜占庭副本协调的提议值,而G2中的副本则不这样做。
因此,在系统中,即使系统可以容忍多达33个拜占庭式错误副本(包括主副本),但在您的假设中它立即失败。