PBFT实用拜占庭容错算法

PBFT实用拜占庭容错算法原理

本篇文章开启区块链共识算法的普及——我以 PBFT (Practical-Byzantine-fault-tolerant)实用拜占庭容错共识算法打头阵。

为什么先是PBFT呢?

一个原因是觉得这个算法的名字很酷,实际上它也有着有趣的历史背景。另一个原因呢,就是最近在接触联盟链,而这个算法呢,正是联盟链的共识算法的宠儿。

共识算法概览

概览

联盟链有两个共识算法:一个是本章将去讲的PBFT,另一个就是DBFT(Delegated Byzantine fault tolerance)委托拜占庭容错共识算法。

在区块链中有一个著名的问题,就是拜占庭将军问题,对于拜占庭将军问题,这里不再做普及,因为网上相关的文章已经很多了。不了解的同学移步至此拜占庭将军问题

PBFT为何而来

PBFT 刚开始是在MIT的Miguel 和 Barbara Liskov在1999年的学术论文中提出的,他们的本意是为设计一个低延迟存储系统设计系统,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行,主要是为了应用于不需要大交易量但需要处理许多事件的数字资产平台,每个节点都可以发布公钥,这是被允许的。

节点将签名所有通过节点的消息,以验证其准确性。当得到一定数量的签名想用,此交易就被认定为有效。

解决了BFT(原始拜占庭容错算法)效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。

PBFT对付恶意节点

几个数字

了解即可,后面会提到

f 是恶意节点数,N是总结点数

  1. 3f : 临界点数
  2. 3f + 1 :总结点最小数
  3. (N-1)/3 :最大容错节点数

当节点数>3时,拜占庭将军问题的有解情况将会比较复杂;

For example:

N = 3f

恶意节点数f = 1时,总结点数N = 3f = 3时,问题将会无解,如下图所示

在这里插入图片描述

显而易见,在f = N/3的时候,整个节点系统都将无法做出正确的决定;因为恶意节点恶意传递结果,导致无论恶意节点时发令者还是接令者,都会坏了整个结果的输出;

N > 3f

恶意节点数f = 1时,总结点数N > 3f = 4时,问题将会得到解决,如下图所示:

在这里插入图片描述

在这里插入图片描述

无论恶意节点如何恶意地传递信息,由于还存在着其他三个公平节点,因此最后总是能够少数服从多数,得到最终的结果。

为什么最大容错节点数是(N-1)/3 ?

假定节点总数是N,作恶节点数为f,那么剩下的正确节点数为N - f

意味着只要收到N - f个消息且N - f > f就能做出决定,但是这N - f个消息里可能有f个是由作恶节点冒充的(或因网络延迟导致f个恶意节点的消息先被收到),那么正确的消息就是N - f - f个。

为了多数一致,正确消息必须占多数,也就是N - f - f > f ,所以N最少是3f + 1个。

总结

1.优点

  • 节能。
  • 吞吐量高。
  • 分叉几率很低。
  • 节点数适当时交易延时极低。
  • PBFT中的主节点并不具备很大权限,与普通节点地位相对平等,如果主节点出现问题,普通节点可以拒绝其请求并可以很容易地将其替换。

2.缺点

  • 节点需要选举或许可,不像PoW可以随意加入,去中心化程度相对较弱。
  • 不能很好的存贮记录交易信息,黑客能够截取一些失效的副本,这可能会让信息外漏。
  • 系统节点是固定的,无法应对公有链的开放环境。因此只适用于节点数量少且网络环境更可信的联盟链或私有链。
  • 安全边界较Pow等算法相对较低。Pow对网络内恶意算力容忍度为不超过1/2,PBFT对恶意节点数的容忍度则为1/3。
  • 受节点数量限制,可扩展性差,由于每个副本节点都需要和其它节点进行P2P的共识同步,因此随着节点的增多,性能会下降的很快。

更多区块链技术干货请关注

岚链技术论坛
77Brother的技术小栈

参考

深入浅出PBFT
PBFT原论文
深入剖析区块链的共识算法 PBFT

PBFT (Practical Byzantine Fault Tolerance) 是一种经典的分布式一致性算法,它旨在处理具有恶意行为的节点,也就是所谓的拜占庭故障(Byzantine Faults)。模型算法的核心思想是通过协议确保在面对某些节点可能失效、欺骗或执行不可预测行为的情况下,系统仍能维持安全性和一致性。 该模型主要包括以下几个关键组件和过程: 1. **角色分工**:PBFT将网络分为三种角色: - Primary: 当前负责处理交易请求的节点。 - Secondary: 准备接收并验证交易的一组节点。 - View Change: 触发新视图选举的节点集合。 2. **三个阶段的交易流程**: - Pre-Prepare: 提议者 Primary 发起新的交易提案,向第二阶段的Secondary们广播预准备消息。 - Prepare: Secondary 收到预准备消息后验证并转发Prepare消息给其他节点,表示接受提案。 - Commit: 超过半数的Secondary同意(包括自身),向全网发出Commit,表示交易正式确认。 3. **容错机制**:通过超过一半的正常节点参与决策(F+1节点中的F是容错度),保证即使有F个节点异常,也能维护正确的交易顺序。 4. **故障恢复**:当Primary或超过半数的Secondary失败时,会触发View Change过程,重新选举新的Primary继续服务。 PBFT通过这套复杂但有效的协议,实现了对等网络环境下的强一致性。每个步骤都有严格的顺序和确认机制,确保了数据的一致性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值