拜占庭将军问题是一个类比,用来描述在分布式系统中达到共识的困难。这些系统是计算环境,其中的组件分布在通过特定网络连接的许多计算机(也称为节点)上。
拜占庭将军问题是一个流行的博弈论问题,研究决策中的理性行为。它借鉴一个假设的历史场景来说明一个常见问题:在一个去中心化的网络中,没有参与者能够验证其他人的身份或信誉,参与者如何知道谁在说真话?
在拜占庭将军问题的场景中,涉及到多个分布在敌方城市周围不同地区的拜占庭军团。
每个团的将军们必须协同作战,发起一次能够克服敌方防御的攻击。每个将军都可以使用信使与其他将军进行通信,但没有办法知道信息是否已被敌人截获并篡改。发起成功攻击的唯一方法是找到一种方式,确保足够多的将军是诚实的,并将他们的军团带入攻击。
解决这个问题的一个潜在方案是,指挥官向所有将军发送进攻或撤退的命令。收到命令后,每个将军必须决定是进攻还是撤退,并将他们的决定反馈给指挥官以及所有其他将军。每个将军收集其他将军的投票,如果有不一致的,他们忽略持不同意见的将军的投票。将军们使用多数决定是进攻还是撤退,将决定传回给指挥官,然后执行。
计算机科学家在 20 世纪 70 年代末首次识别出,在分布式系统中协调共识的问题。
1982 年,Leslie Lamport、Robert Shostak 和 Marshall Pease 发表了一篇名为《拜占庭将军问题》的论文,其中指出:“一个可靠的计算机系统必须能够应对一个或多个组件的失败。一个失败的组件可能会表现出一种经常被忽略的行为——即向系统的不同部分发送冲突的信息。”
在这个定义中,即使一个或多个组件失败了,系统仍然可以被认为是可靠的。这导致了“拜占庭容错”(Byzantine Fault Tolerance)在分布式系统中的概念,它提供了一个系统(或将军)抵抗一定数量失败并仍然协作使系统正常工作的能力的度量。
在 20 世纪 90 年代末,两位研究人员 Barbara Liskov 和 Miguel Castro 开发了一种名为实用拜占庭容错(Practical Byzantine Fault Tolerance,pBFT)的分布式网络共识算法。然而,一个主要的缺陷被发现,随着网络上节点数量的增加,达成共识所需的时间呈指数级增长。尽管如此,它足够重要,以至于 pBFT 的变体今天仍然在如 Zilliqa 和 Cosmos 等现代区块链系统中使用。
2008 年,当中本聪 (Satoshi Nakamoto)发表比特币白皮书,介绍了工作证明(Proof of Work,PoW)算法时,对拜占庭将军问题的解决出现了突破。
比特币依赖于一个去中心化的矿工网络,共同维护着一个 BTC 交易的原始账本。每个矿工必须能够信任添加到账本中的交易是真实的。将比特币与拜占庭将军问题相关联时,矿工们就是将军,而账本和交易就是消息。
在工作证明算法下,所有比特币矿工必须同意交易在添加到区块链之前是有效的。矿工使用账本上的历史信息来验证交易,检查是否有必要的账户余额可用。如果他们遇到与现有数据矛盾的交易,他们有权力拒绝它。
然而,一旦交易经过验证,它就会被永久记录在账本上,这意味着任何人都可以信任交易数据的历史。由于网络上的每个矿工都有相同数据的副本,它总是可以被验证为真实的。
中本聪 (Satoshi) 在解决拜占庭将军问题时最重要的发展之一是使用博弈论来激励矿工以对整个网络有利的方式行事。
矿工投入巨大的能量参与挖矿,并且他们通过自己的努力获得 BTC 作为奖励。如果账本被错误的交易破坏,人们对 BTC 的信任就会下降,价值也会随之下跌。这些激励措施已经被证明是足够有力的,以至于自 2009 年创世区块以来,比特币网络从未遭受过成功的攻击。
工作证明有效地解决了拜占庭将军问题,以至于比特币从未遭受过51%攻击。然而,这并不意味着对比特币发起攻击是不可能的——只是这样做在经济上是禁止性的。