什么是拜占庭容错?(BFT)

拜占庭容错(Byzantine Fault Tolerance, BFT)是衡量分布式系统在一个或多个组件故障时继续运行能力的指标。

比特币以太坊这样的区块链的一个显著特征是,它们由开放的节点网络运行,任何人只要有必要的硬件和软件,都可以匿名无需许可地加入。它们是去中心化的,没有中央实体协调活动。相反,规则和通信协议管理着网络的运作和节点达成共识的方法。

但如果一个节点或一组节点决定通过传播有关虚假交易的信息来攻击网络,试图盗取资金怎么办?网络抵抗此类攻击并继续无间断运行的能力被称为拜占庭容错。

拜占庭容错的历史

拜占庭容错这个术语起源于拜占庭将军问题(Byzantine Generals’problem),这是一个博弈论问题,提出了一组假想的拜占庭将军们面临的困境,他们驻扎在敌人城市外,希望协调一次攻击。为此,他们需要一种安全的通信手段,以识别其他将军是否在传输不可靠的信息,可能是为了颠覆攻击。这是一个简单的类比,但它很好地总结了分布式系统开发者面临的挑战。

拜占庭将军问题最初在 1982 年由三位计算机科学家 Leslie Lamport、Robert Shostak 和 Marshall Pease 的论文中概述。"故障"(fault)一词已经是描述拜占庭将军问题所述失败的常用术语;因此,拜占庭容错成为了描述对这类失败的抵抗力的术语。

在 1990 年代,研究者开发了一种称为“实用拜占庭容错”(Practical Byzantine Fault Tolerance, pBFT)的算法,它使得网络中的节点在不依赖中央实体协调的情况下达成共识。然而,它的实际应用受限,因为与网络增长率相比,达成共识所需的时间呈指数级增加。

2008 年,中本聪发布了比特币白皮书,提出了一种基于工作量证明(Proof of Work, PoW)协议的新型拜占庭容错共识方法。自比特币启动以来,区块链研究者通过开发其他区块链共识方法,如权益证明(Proof of Stake, PoS)等,推进了这些工作,这些方法也旨在实现拜占庭容错。

区块链共识协议如何实现拜占庭容错

在任何区块链网络中,无论使用何种共识方法,矿工或验证者必须在交易添加到区块链账本之前就其有效性达成共识。为了检查交易是否有效,它会与账本上的历史数据进行比较,如果行动与历史数据不一致——例如,如果有人试图发送他们账户中没有的资金——则该交易会被废弃。然而,经过验证的交易会作为永久不变的记录包含在账本中,该账本与所有参与者共享。因此,所有参与者都有共享的真实点,以验证未来的传入交易。

共识协议依靠博弈论原理,为网络参与者提供足够的激励,促使他们为了网络利益行事,而不是发起攻击。多亏了它们奖励结构的激励力量,像比特币和以太坊这样的大型网络多年来保持了安全性。

理解区块链中的拜占庭容错

拜占庭故障被定义为任何分布式系统故障,该故障对不同观察者表现出不同的症状。由于区块链网络旨在就账本状态达成共识,拜占庭故障通常表现为关于交易数据的冲突信息,这可能涉及矿工或验证者提出无效区块或试图验证无效交易。

在某些情况下,出现此类故障的节点运营商可能试图发起恶意攻击,但节点也可能因硬件或软件故障而无意中提供错误信息。一个网络越大,这类故障出现的可能性就越大。

因此,共识协议的目的不是消除这类故障并实现 100% 的拜占庭容错,而是确保系统能够继续运行,尽管拜占庭故障不可避免地会发生。共识协议只需要确保大多数节点在为网络利益行为时能够达成共识,区块链就会继续运行,交易账本保持完整。

尽管拜占庭容错是区块链的特性,它也是核电站、飞行控制系统和太空旅行等应用中使用的其他类型分布式系统的特性。

拜占庭容错要点

  • 拜占庭容错是指分布式系统对一个或多个组件故障的抵抗力。
  • 区块链通过应用共识协议实现拜占庭容错,这些协议使网络节点能够验证交易。
  • 共识协议的目标不是消除拜占庭故障,而是确保系统对故障有足够的容忍度,前提是大多数参与者为网络利益行动。