【論文閱讀】區(qū)塊鏈共識算法綜述
論文簡介
論文題目:A survey of Blockchain consensus algorithms: mechanism, design and applications
本篇論文提出來一個三段式的分類模型對主流的共識算法進行分類,并對其優(yōu)缺點、安全性以及應(yīng)用場景進行了分析。
區(qū)塊鏈類型
按數(shù)據(jù)結(jié)構(gòu)分類:
- 傳統(tǒng)的鏈式結(jié)構(gòu)區(qū)塊鏈
- 有向無環(huán)圖式(DAG)結(jié)構(gòu)的區(qū)塊鏈

按結(jié)點訪問機制分類:
- 公有鏈
- 聯(lián)盟鏈
- 私有鏈
拜占庭將軍問題和區(qū)塊鏈共識算法
區(qū)塊鏈中的共識算法是用來解決分布式系統(tǒng)中存在多個故障節(jié)點時的數(shù)據(jù)一致性問題。
故障節(jié)點分為兩種:
- 事故故障節(jié)點:這類節(jié)點只是無響應(yīng)不工作了,但不存在惡意行為。
- 拜占庭故障節(jié)點:可以有任意行為,包括向其他節(jié)點發(fā)送錯誤信息,或向不同節(jié)點發(fā)送不同的信息等破壞共識的行為。
只適用于第一類故障節(jié)點的共識算法比較著名的有 Paxos 和 Raft 兩個(不是本文重點討論的內(nèi)容)。
應(yīng)對兩類故障節(jié)點的共識算法
FLP定理指出,在遵循異步通信模型的分布式系統(tǒng)中,只要有一個進程失敗(無響應(yīng)或掛起),就無法達成全面的共識。我們假設(shè)區(qū)塊鏈系統(tǒng)是一個弱同步通信模型:即消息可能會被延遲,但最終會在規(guī)定的時間內(nèi)到達接收者,超過這個時間就認為發(fā)送節(jié)點失敗。
一個可用的共識算法,最基本的就是要保證區(qū)塊鏈的一致性與可用性。較為著名的有 PoW, PoS, PBFT 等算法。
共識算法的流程模型
公式算法的流程模型分為三個部分:選取記賬人(accountant selection), 添加區(qū)塊(block addition), 交易確認(transaction confirmation)
個人呢覺得第三個環(huán)節(jié)叫做“區(qū)塊確認”會好理解一丟丟

選取記賬人(accountant selection)
記賬人負責驗證與收集交易,將其打包成一個區(qū)塊并發(fā)送給其他節(jié)點。主要分為以下三種情況:
- 在每一個記賬輪隨機選取一名記賬者(PoW, PoS等)
- 在每一個記賬輪根據(jù)預定的規(guī)則選取一名記賬者
- 每個節(jié)點都是記賬者,且都只記錄自己的交易(DAG結(jié)構(gòu))
添加區(qū)塊(block addition)
在這個環(huán)節(jié)中,所有節(jié)點都會收到記賬者發(fā)送的節(jié)點,然后對其中的記賬者信息以及交易進行驗證。如果會計和該區(qū)塊都是有效的,那么區(qū)塊可以被添加到區(qū)塊鏈中。
一些共識算法(如PBFT)在向區(qū)塊鏈添加塊之前,還需要獲得大多數(shù)節(jié)點的投票。
交易確認(transaction confirmation)
每個節(jié)點都有一個區(qū)塊鏈的本地副本。這一階段需要節(jié)點根據(jù)自身保留的區(qū)塊鏈副本對新添加的區(qū)塊進行確認,主要有以下兩種情況:
- 需要實時投票:每個區(qū)塊在添加到區(qū)塊鏈上之前就已經(jīng)獲得大多數(shù)節(jié)點的投票,在這種情況下,每個上鏈的區(qū)塊都已經(jīng)是被確認的區(qū)塊了。
- 沒有實時投票:這種情況下的新區(qū)塊即使被連接到區(qū)塊鏈上,但也并不意味著它被確認了。需要在其后面繼續(xù)添加新區(qū)塊來對其進行確認(最長鏈原則)。比如比特幣的確認機制是后面接上6個新區(qū)塊后,該區(qū)塊則能夠被認為是確認區(qū)塊。
區(qū)塊鏈共識算法的分類
根據(jù)共識算法的流程,可以將其分為四個類別:“l(fā)eader-based”類型,“voting-based”類型,“committee + voting”類型,以及“fair accounting”類型

“l(fā)eader-based”類型
這一類型的算法主要關(guān)注在記賬人的選取上,比較著名的有PoW, PoS算法。
具體過程不展開說了,感興趣可以另外找資料看看,隨手可以查的到。
PoW機制的缺點就是在記賬人選出來之前,所有節(jié)點都要進行競爭式的計算,會消耗大量資源。
PoS機制的免除了競爭式的計算,但是缺點就是容易造成壟斷局面
“voting-based”類型
這種類型最為出名的機制莫過于PBFT,在惡意節(jié)點不超過總節(jié)點數(shù)量的1/3的時候PBFT能夠確保區(qū)塊鏈正常運行。
具體過程文章中有,也可以另外查找資料,就不展開細說了。
PBFT的缺點是它的通信量很大,每一次三階段確認的時間復雜度為 O(n^2)
“committee + voting”類型
這一類共識機制將重點放在選取記賬人與添加區(qū)塊這兩個環(huán)節(jié)中。
第一階段選取一個記賬人以及委員會;第二階段則是有委員會的成員(或部分成員)進行投票。算法的核心思想是縮小參與共識過程的節(jié)點范圍,從而降低溝通的復雜性。并且,所有節(jié)點都有機會成為委員,因此不會犧牲系統(tǒng)的分權(quán)。
“fair accounting”類型
這種類型主要應(yīng)用在DAG結(jié)構(gòu)的區(qū)塊鏈上。
在記賬人選取環(huán)節(jié),節(jié)點只負責打包它生成的交易;在添加區(qū)塊環(huán)節(jié),節(jié)點根據(jù)一些鏈接規(guī)則來選擇他們區(qū)塊的父塊;在交易確認環(huán)節(jié),會根據(jù)更為復雜的規(guī)則來判斷區(qū)塊是否基于DAG上的位置達成共識。
共識算法的特點


共識算法的評價維度

針對共識機制的攻擊手法
文章中提到的攻擊手法有:Dos攻擊,女巫攻擊,日蝕攻擊,以及私自挖礦。
Dos攻擊
在區(qū)塊鏈中,針對記賬節(jié)點的Dos攻擊會對整個區(qū)塊鏈系統(tǒng)構(gòu)成嚴重的威脅。
解決方法:
- 使得攻擊者不能提前預測到記賬者的身份
- 建立一個高效的節(jié)點故障處理機制
女巫攻擊
女巫攻擊是指同一個用戶有多個賬號。如果采用投票機制,惡意用戶可能擁有多個投票權(quán),從而可能影響并控制區(qū)塊鏈系統(tǒng)。女巫攻擊主要是破壞區(qū)塊鏈系統(tǒng)的公平性,帶來集中化的風險。
解決方法:
- 記賬者選取的方法不依靠用戶身份的數(shù)量,而采用其他的計量方式(如PoW等)
日蝕攻擊(?)
攻擊者入侵受害者的路由表,通過路由表將攻擊者設(shè)為受害者的中介。從而將受害者與真正的區(qū)塊鏈網(wǎng)絡(luò)分離,并控制受害者的外部聯(lián)系。
解決方法:
- 保護好路由表。。。
私自挖礦
私自挖礦指攻擊者在成功挖掘一個區(qū)塊后,不將挖掘的區(qū)塊發(fā)布和分發(fā)給其他網(wǎng)絡(luò)節(jié)點,而是繼續(xù)挖掘下一個區(qū)塊,以保持了領(lǐng)先地位(此時最長鏈只在攻擊者手中)。當網(wǎng)絡(luò)中的其他礦工將要趕上時,攻擊者再將他手中的最長鏈發(fā)布到區(qū)塊鏈網(wǎng)絡(luò)上,以獲取大量的獎勵。
解決辦法:
- 設(shè)置時間戳,如果一個礦工一次性釋放了一長串連續(xù)的塊,那么網(wǎng)絡(luò)的其他部分可以考慮不接受這些塊。
共識算法應(yīng)用場景選擇


浙公網(wǎng)安備 33010602011771號