实用拜占庭容错是 Barbara Liskov 和 Miguel Castro 在 90 年代后期引入的一种共识算法。 pBFT 被设计为在异步(对接收请求的响应没有上限)系统中高效工作。它针对低开销时间进行了优化。它的目标是解决与现有拜占庭容错解决方案相关的许多问题。应用领域包括分布式计算和区块链。
什么是拜占庭容错?
拜占庭容错(BFT)是分布式网络即使在网络中的某些节点无法响应或响应错误信息时也能达成共识(对相同值达成一致)的特性。 BFT 机制的目标是通过采用集体决策(正确和错误节点)来防止系统故障,旨在减少错误节点的影响。 BFT 源自拜占庭将军问题。
拜占庭将军的问题
1982 年,微软研究院的 LESLIE LAMPORT、ROBERT SHOSTAK 和 MARSHALL PEASE 在一篇论文中恰当地解释了这个问题:
Imagine that several divisions of the Byzantine army are camped outside an enemy city, each division commanded by its own general. The generals can communicate with one another only by messenger. After observing the enemy, they must decide upon a common plan of action. However, some of the generals may be traitors, trying to prevent the loyal generals from reaching an agreement. The generals must decide on when to attack the city, but they need a strong majority of their army to attack at the same time. The generals must have an algorithm to guarantee that (a) all loyal generals decide upon the same plan of action, and (b) a small number of traitors cannot cause the loyal generals to adopt a bad plan. The loyal generals will all do what the algorithm says they should, but the traitors may do anything they wish. The algorithm must guarantee condition (a) regardless of what the traitors do. The loyal generals should not only reach agreement, but should agree upon a reasonable plan.
如果网络中正确工作的节点就其值达成一致,则可以实现拜占庭容错。对于丢失的消息,可以有一个默认的投票值,即,如果在特定时间限制内没有收到消息,我们可以假设来自特定节点的消息是“错误的”。此外,如果大多数节点以正确的值响应,我们还可以分配默认响应。
Leslie Lamport 证明,如果我们有 3m+1 个正常工作的处理器,如果最多有 m 个处理器出现故障,则可以达成共识(相同状态的协议),这意味着严格来说,处理器总数的三分之二以上应该是诚实的。
拜占庭故障的类型:
有两类故障被考虑。一种是故障停止(节点发生故障并停止运行),另一种是任意节点故障。下面给出了一些任意节点故障:
- 返回结果失败
- 以错误的结果回应
- 以故意误导的结果作为回应
- 以不同的结果响应系统的不同部分
pbft的优点:
- 能源效率:pBFT 无需进行复杂的数学计算(如在 PoW 中)即可实现分布式共识。 Zilliqa 将 pBFT 与每 100 个区块的类似 PoW 的复杂计算相结合。
- 交易终结:交易不需要多次确认(例如比特币的 PoW 机制,每个节点在将新区块添加到区块链之前单独验证所有交易;确认可能需要 10-60 分钟,具体取决于实体确认的数量新区块)在它们最终确定并达成一致之后。
- 低奖励方差:网络中的每个节点都参与响应客户端的请求,因此可以激励每个节点,从而导致奖励有助于决策的节点的低方差。
pBFT 是如何工作的?
pBFT 试图提供一种实用的拜占庭状态机复制,即使在系统中运行恶意节点时也能工作。
启用 pBFT 的分布式系统中的节点按顺序排列,一个节点是主节点(或领导节点),其他节点称为辅助节点(或备份节点)。请注意,系统中任何符合条件的节点都可以通过从辅助节点转换为主要节点(通常在主节点故障的情况下)而成为主要节点。目标是所有诚实节点使用多数规则帮助就系统状态达成共识。
一种实用的拜占庭容错系统能够在条件函数,恶意节点的最大数目必须不大于或等于三分之一系统中的所有节点。随着节点数量的增加,系统变得更加安全。
pBFT 共识回合分为 4 个阶段(参见下图):
- 客户端向主(领导)节点发送请求。
- 主(领导)节点向所有辅助(备份)节点广播请求。
- 节点(主节点和辅助节点)执行请求的服务,然后向客户端发回回复。
- 当客户端收到来自网络中不同节点的“m+1”个具有相同结果的回复时,请求被成功服务,其中 m 是允许的最大故障节点数。
主要(领导)节点在每次视图(pBFT 共识轮次)期间更改,如果经过预定义的时间量而领导节点没有向备份(辅助)广播请求,则可以由视图更改协议代替。如果需要,大多数诚实节点可以对当前领先节点的合法性进行投票,并将其替换为下一个领先节点。pBFT 的局限性:
pBFT 共识模型仅在分布式网络中的节点数量较少时才能有效地工作,因为通信开销会随着网络中每个额外节点的增加而呈指数增长。- Sybil 攻击:pBFT 机制容易受到 Sybil 攻击,其中一个实体(一方)控制许多身份。随着网络中节点数量的增加,女巫攻击变得越来越难以实施。但由于 pBFT 机制也存在可扩展性问题,因此 pBFT 机制与其他机制结合使用。
- 扩展性:pBFT 不能很好地扩展,因为它的通信(在每一步都与所有其他节点)开销。随着网络中节点数量的增加(随着 O(n^k) 增加,其中 n 是消息,k 是节点数),响应请求所花费的时间也会增加。
使用 pBFT 变体的平台:
- Zilliqa – pBFT 与 PoW 共识相结合
- Hyperledger Fabric – pBFT 的许可版本
- Tendermint – pBFT + DPoS(委托权益证明)
pBFT 的变化:
为了在特定用例和条件下提高 pBFT 的质量和性能,提出并采用了许多变体。他们之中有一些是 :- RBFT – 冗余 BFT
- 摘要
- Q/U
- HQ – BFT 的混合仲裁协议
- 适应
- Zyzzyva – 推测性拜占庭容错
- 土豚