在一个网络中还可能存在“恶意”节点。例如,一些节点通过发送错误的记账信息,试图修改账本、篡改交易数据等。这一类问题可能对分布式系统的稳定和安全带来很大挑战。针对这类挑战,人们提出了经典的“拜占庭将军”问题。
关于“拜占庭将军”问题的讨论始于1982年,学者们基于古代战场场景描述出一个决策问题。拜占庭是东罗马帝国的首都。由于国土辽阔,许多拜占庭将军的军队在地理上相隔很远,这些将军只能通过信使相互传递消息。当战争发生时,这些将军需要达成共识,所有的将军都意见一致才向敌军发起攻击。由于可能会有将军反叛,部分错误信息可能导致整个决策出现偏差,影响战局。例如,在9位将军中,有4个同意进攻并发出信息,另外4个同意撤退并发出信息,剩余的一个将军如果向这两方发出不同的信息,可能误导他们分别做出“进攻”和“撤退”的共识。显然,这是假的共识,在战场上会导致严重的失败。这种情形被称为“拜占庭失败”。
拜占庭将军问题是对存在潜在错误或恶意节点的情况下的分布式系统一致性决策的一种模型化描述。
根据理论分析,假设一个包含 n 个节点的分布式系统,其错误或恶意节点数量为 f ,当 n ≥3 f +1时,可以设计出共识算法来保障所有节点达成正确共识。拜占庭将军问题及其理论边界被提出后,学者们开始研究“拜占庭容错”的共识算法。