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实用拜占庭容错算法相关推荐

  1. PBFT实用拜占庭容错算法详解

    分布式架构遭遇的问题 分布式架构会遭遇到以下问题: 1.异构环境的分布式架构首先可能遇到网络传输问题,比如数据丢失.延迟.重复.乱序. 2.欺骗攻击和重播攻击 3.操纵多个失效节点,延迟通讯,制造混乱 ...

  2. PBFT实用拜占庭容错算法深入详解

    PBFT即实用拜占庭容错算法,由Miguel Castro和Barbara Liskov在1999年提出,可以在作恶节点少于三分之一的情况下,保证系统的正确性(避免分叉).与原始的BFT算法相比,算法 ...

  3. 实用拜占庭容错算法 (PBFT)

    一.算法原理     实用拜占庭容错算法 (Practical Byzantine fault tolerance, PBFT)是一种状态机副本复制算法, 每个状态机的副本都保存了服务的状态, 同时也 ...

  4. PBFT(Practical Byzantine Fault Tolerance)实用拜占庭容错算法

    PBFT(Practical Byzantine Fault Tolerance)实用拜占庭容错算法 实用拜占庭容错系统(PBFT)降低了拜占庭协议的运行复杂度,从指数级别降低到多项式级别(Polyn ...

  5. 共识协议(6)PBFT实用拜占庭容错

    1. PBFT实用拜占庭容错(Practical Byzantine Fault Tolerance) 1.1 BFT算法(Byzantine Fault Tolerance) 3f 个节点中最多f ...

  6. php拜占庭容错算法机制,实用拜占庭容错算法(PBFT)

    1.游戏背景 拜占庭帝国即东罗马帝国,拥有巨大的财富,并对邻邦垂诞已久,为此派出了10支军队去包围这个敌人.这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击.基于一些原因,这10支军 ...

  7. 实用拜占庭容错(PBFT)算法详细介绍

    实用拜占庭容错PBFT算法详细介绍 0 摘要 1 概要介绍 2 系统模型 3 服务属性 3.1 安全性 3.2 活性 3.3 为什么是上方的等式?? 3.4 未解决问题 4 算法 4.1 概述 4.2 ...

  8. 第26篇 拜占庭将军问题与拜占庭容错算法

    本文所有内容来自网络. 拜占庭将军问题(The Byzantine Generals Problem)提供了对分布式共识问题的一种情景化描述,由Leslie Lamport等人在1982年首次发表.论 ...

  9. 实用拜占庭容错系统(PBFT)共识算法

    摘拜占庭容错问题简称BFT,实用拜占庭容错系统(PBFT)在区块链中的应用很普遍,简介PBFT算法步骤. 更多区块链技术与应用分类: 区块链应用    区块链开发 以太坊 | Fabric | BCO ...

最新文章

  1. Linux那些事儿 之 戏说USB(15)设备
  2. 用 Python 拓展 GDB(三)
  3. python学习(函数)
  4. docker中创建RabbitMQ并在管理端界面打开
  5. 关于 Repeater 控件嵌套的使用。在嵌套中添加 其它控件(如:按钮),并影响其它控件的方法,很重要哦,测试通过。...
  6. Oracle行列转换小结
  7. Mybatis 一连串提问,被面试官吊打了!
  8. 刷新存储器的容量单位是什么_SRAM的容量扩展
  9. Excel导入导出组件的设计
  10. 语音识别市场竞争激烈,亚马逊崛起与微软衰落形成反差
  11. Comparator 比较器接口
  12. mysql建表指定表空间_Oracle中建表和指定表空间
  13. JAVA打印功能总结文档
  14. stm32的语音识别_基于STM32的嵌入式语音识别模块设计
  15. ant design入门_Umi + ant Design Pro最简单的入门教程(一)初
  16. 浅析WLAN——无线局域网
  17. CSAPP 3e Attack lab
  18. 基于springboot+mybatis+mysql+html企业人事管理系统
  19. hexo搭建github.io博客
  20. openlayers自定义控件 ---仿百度地图指南针

热门文章

  1. FFMpeg安装步骤
  2. android eclipse关联源码,在源码中编译自己的 Android project(eclipse编译的工程加到源码中)...
  3. 深度学习-非线性激活函数
  4. less语法,简单明了
  5. vue - 实现 H5 网站使用腾讯地图,附带地图使用教程 / 当前用户 IP 定位获取位置信息教程(详细配置教程及运行示例源代码,保证新手小白 100% 成功)vue.js 或 nuxt.js都行
  6. js判断时间是否为当天(今天是今天)
  7. 三元表达式 | JSX | 回调函数
  8. Docker Commit Push Weblogic JDBC应用程序
  9. python打印所有的水仙花数_python 打印所有的水仙花数
  10. 可扩展性数据库的架构设计