Java教程

【阿菜读论文】区块链共识算法综述

本文主要是介绍【阿菜读论文】区块链共识算法综述,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

论文简介

论文题目:A survey of Blockchain consensus algorithms: mechanism, design and applications
本篇论文提出来一个三段式的分类模型对主流的共识算法进行分类,并对其优缺点、安全性以及应用场景进行了分析。

区块链类型

按数据结构分类:

  1. 传统的链式结构区块链
  2. 有向无环图式(DAG)结构的区块链

image

按结点访问机制分类:

  1. 公有链
  2. 联盟链
  3. 私有链

拜占庭将军问题和区块链共识算法

区块链中的共识算法是用来解决分布式系统中存在多个故障节点时的数据一致性问题。
故障节点分为两种:

  1. 事故故障节点:这类节点只是无响应不工作了,但不存在恶意行为。
  2. 拜占庭故障节点:可以有任意行为,包括向其他节点发送错误信息,或向不同节点发送不同的信息等破坏共识的行为。

只适用于第一类故障节点的共识算法比较著名的有 Paxos 和 Raft 两个(不是本文重点讨论的内容)。

应对两类故障节点的共识算法

FLP定理指出,在遵循异步通信模型的分布式系统中,只要有一个进程失败(无响应或挂起),就无法达成全面的共识。我们假设区块链系统是一个弱同步通信模型:即消息可能会被延迟,但最终会在规定的时间内到达接收者,超过这个时间就认为发送节点失败。
一个可用的共识算法,最基本的就是要保证区块链的一致性与可用性。较为著名的有 PoW, PoS, PBFT 等算法。

共识算法的流程模型

公式算法的流程模型分为三个部分:选取记账人(accountant selection), 添加区块(block addition), 交易确认(transaction confirmation)

个人呢觉得第三个环节叫做“区块确认”会好理解一丢丢

image

选取记账人(accountant selection)

记账人负责验证与收集交易,将其打包成一个区块并发送给其他节点。主要分为以下三种情况:

  1. 在每一个记账轮随机选取一名记账者(PoW, PoS等)
  2. 在每一个记账轮根据预定的规则选取一名记账者
  3. 每个节点都是记账者,且都只记录自己的交易(DAG结构)

添加区块(block addition)

在这个环节中,所有节点都会收到记账者发送的节点,然后对其中的记账者信息以及交易进行验证。如果会计和该区块都是有效的,那么区块可以被添加到区块链中。
一些共识算法(如PBFT)在向区块链添加块之前,还需要获得大多数节点的投票。

交易确认(transaction confirmation)

每个节点都有一个区块链的本地副本。这一阶段需要节点根据自身保留的区块链副本对新添加的区块进行确认,主要有以下两种情况:

  1. 需要实时投票:每个区块在添加到区块链上之前就已经获得大多数节点的投票,在这种情况下,每个上链的区块都已经是被确认的区块了。
  2. 没有实时投票:这种情况下的新区块即使被连接到区块链上,但也并不意味着它被确认了。需要在其后面继续添加新区块来对其进行确认(最长链原则)。比如比特币的确认机制是后面接上6个新区块后,该区块则能够被认为是确认区块。

区块链共识算法的分类

根据共识算法的流程,可以将其分为四个类别:“leader-based”类型,“voting-based”类型,“committee + voting”类型,以及“fair accounting”类型

image

“leader-based”类型

这一类型的算法主要关注在记账人的选取上,比较著名的有PoW, PoS算法。
具体过程不展开说了,感兴趣可以另外找资料看看,随手可以查的到。
PoW机制的缺点就是在记账人选出来之前,所有节点都要进行竞争式的计算,会消耗大量资源。
PoS机制的免除了竞争式的计算,但是缺点就是容易造成垄断局面

“voting-based”类型

这种类型最为出名的机制莫过于PBFT,在恶意节点不超过总节点数量的1/3的时候PBFT能够确保区块链正常运行。
具体过程文章中有,也可以另外查找资料,就不展开细说了。
PBFT的缺点是它的通信量很大,每一次三阶段确认的时间复杂度为 O(n^2)

“committee + voting”类型

这一类共识机制将重点放在选取记账人与添加区块这两个环节中。
第一阶段选取一个记账人以及委员会;第二阶段则是有委员会的成员(或部分成员)进行投票。算法的核心思想是缩小参与共识过程的节点范围,从而降低沟通的复杂性。并且,所有节点都有机会成为委员,因此不会牺牲系统的分权。

“fair accounting”类型

这种类型主要应用在DAG结构的区块链上。
在记账人选取环节,节点只负责打包它生成的交易;在添加区块环节,节点根据一些链接规则来选择他们区块的父块;在交易确认环节,会根据更为复杂的规则来判断区块是否基于DAG上的位置达成共识。

共识算法的特点

image
image

共识算法的评价维度

image

针对共识机制的攻击手法

文章中提到的攻击手法有:Dos攻击,女巫攻击,日蚀攻击,以及私自挖矿。

Dos攻击

在区块链中,针对记账节点的Dos攻击会对整个区块链系统构成严重的威胁。
解决方法:

  1. 使得攻击者不能提前预测到记账者的身份
  2. 建立一个高效的节点故障处理机制

女巫攻击

女巫攻击是指同一个用户有多个账号。如果采用投票机制,恶意用户可能拥有多个投票权,从而可能影响并控制区块链系统。女巫攻击主要是破坏区块链系统的公平性,带来集中化的风险。
解决方法:

  1. 记账者选取的方法不依靠用户身份的数量,而采用其他的计量方式(如PoW等)

日蚀攻击(?)

攻击者入侵受害者的路由表,通过路由表将攻击者设为受害者的中介。从而将受害者与真正的区块链网络分离,并控制受害者的外部联系。
解决方法:

  1. 保护好路由表。。。

私自挖矿

私自挖矿指攻击者在成功挖掘一个区块后,不将挖掘的区块发布和分发给其他网络节点,而是继续挖掘下一个区块,以保持了领先地位(此时最长链只在攻击者手中)。当网络中的其他矿工将要赶上时,攻击者再将他手中的最长链发布到区块链网络上,以获取大量的奖励。
解决办法:

  1. 设置时间戳,如果一个矿工一次性释放了一长串连续的块,那么网络的其他部分可以考虑不接受这些块。

共识算法应用场景选择

image

这篇关于【阿菜读论文】区块链共识算法综述的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!