论文题目:A survey of Blockchain consensus algorithms: mechanism, design and applications
本篇论文提出来一个三段式的分类模型对主流的共识算法进行分类,并对其优缺点、安全性以及应用场景进行了分析。
按数据结构分类:
按结点访问机制分类:
区块链中的共识算法是用来解决分布式系统中存在多个故障节点时的数据一致性问题。
故障节点分为两种:
只适用于第一类故障节点的共识算法比较著名的有 Paxos 和 Raft 两个(不是本文重点讨论的内容)。
FLP定理指出,在遵循异步通信模型的分布式系统中,只要有一个进程失败(无响应或挂起),就无法达成全面的共识。我们假设区块链系统是一个弱同步通信模型:即消息可能会被延迟,但最终会在规定的时间内到达接收者,超过这个时间就认为发送节点失败。
一个可用的共识算法,最基本的就是要保证区块链的一致性与可用性。较为著名的有 PoW, PoS, PBFT 等算法。
公式算法的流程模型分为三个部分:选取记账人(accountant selection), 添加区块(block addition), 交易确认(transaction confirmation)
个人呢觉得第三个环节叫做“区块确认”会好理解一丢丢
记账人负责验证与收集交易,将其打包成一个区块并发送给其他节点。主要分为以下三种情况:
在这个环节中,所有节点都会收到记账者发送的节点,然后对其中的记账者信息以及交易进行验证。如果会计和该区块都是有效的,那么区块可以被添加到区块链中。
一些共识算法(如PBFT)在向区块链添加块之前,还需要获得大多数节点的投票。
每个节点都有一个区块链的本地副本。这一阶段需要节点根据自身保留的区块链副本对新添加的区块进行确认,主要有以下两种情况:
根据共识算法的流程,可以将其分为四个类别:“leader-based”类型,“voting-based”类型,“committee + voting”类型,以及“fair accounting”类型
这一类型的算法主要关注在记账人的选取上,比较著名的有PoW, PoS算法。
具体过程不展开说了,感兴趣可以另外找资料看看,随手可以查的到。
PoW机制的缺点就是在记账人选出来之前,所有节点都要进行竞争式的计算,会消耗大量资源。
PoS机制的免除了竞争式的计算,但是缺点就是容易造成垄断局面
这种类型最为出名的机制莫过于PBFT,在恶意节点不超过总节点数量的1/3的时候PBFT能够确保区块链正常运行。
具体过程文章中有,也可以另外查找资料,就不展开细说了。
PBFT的缺点是它的通信量很大,每一次三阶段确认的时间复杂度为 O(n^2)
这一类共识机制将重点放在选取记账人与添加区块这两个环节中。
第一阶段选取一个记账人以及委员会;第二阶段则是有委员会的成员(或部分成员)进行投票。算法的核心思想是缩小参与共识过程的节点范围,从而降低沟通的复杂性。并且,所有节点都有机会成为委员,因此不会牺牲系统的分权。
这种类型主要应用在DAG结构的区块链上。
在记账人选取环节,节点只负责打包它生成的交易;在添加区块环节,节点根据一些链接规则来选择他们区块的父块;在交易确认环节,会根据更为复杂的规则来判断区块是否基于DAG上的位置达成共识。
文章中提到的攻击手法有:Dos攻击,女巫攻击,日蚀攻击,以及私自挖矿。
在区块链中,针对记账节点的Dos攻击会对整个区块链系统构成严重的威胁。
解决方法:
女巫攻击是指同一个用户有多个账号。如果采用投票机制,恶意用户可能拥有多个投票权,从而可能影响并控制区块链系统。女巫攻击主要是破坏区块链系统的公平性,带来集中化的风险。
解决方法:
攻击者入侵受害者的路由表,通过路由表将攻击者设为受害者的中介。从而将受害者与真正的区块链网络分离,并控制受害者的外部联系。
解决方法:
私自挖矿指攻击者在成功挖掘一个区块后,不将挖掘的区块发布和分发给其他网络节点,而是继续挖掘下一个区块,以保持了领先地位(此时最长链只在攻击者手中)。当网络中的其他矿工将要赶上时,攻击者再将他手中的最长链发布到区块链网络上,以获取大量的奖励。
解决办法: