劉建偉/LIU Jianwei
喻輝/YU Hui
(北京航空航天大學,北京100191)
2008年,化名為“中本聰”的研究人員首次提出了比特幣[1]。在隨后幾年中,數字貨幣發展迅速,出現了像以太坊、萊特幣等具有代表性的一些數字貨幣。而支撐這類數字貨幣的區塊鏈技術也逐漸得到研究人員的重視。
區塊鏈技術保證在不可信、分布式環境下,所有節點通過一定的共識算法對公共賬本達成一致。在區塊鏈中,賬本以區塊的形式構成,每個合法的區塊都以特定的密碼學方式鏈接到前一個塊,這也就是區塊“鏈”的內涵。隨著區塊的不斷生成和添加,歷史區塊內容不能被修改,區塊中記錄的所有內容能夠被網絡中所有節點獲取。
區塊鏈具有去中心化、公開透明、歷史數據防篡改等特點。區塊鏈的共識不需要任何可信的第三方,所有分布式節點參與共識。在公有鏈中,任何節點能夠自由加入、退出網絡,節點數量隨時變化并且不可預知。一旦區塊鏈中區塊數據達到一定的“深度”(例如:在比特幣中,超過6個區塊),則可認定區塊內容很大概率不會被篡改。
目前區塊鏈的體系架構一般分為以下幾個層面:從下到上依次是數據層、網絡層、共識與激勵層、合約層和應用層。數據層包括最基本的交易數據、區塊數據和時間戳等,數據層采用哈希函數、數字簽名等密碼學技術,為區塊鏈提供最基本的安全保證;網絡層采用基于點對點的網絡結構,負責區塊數據、節點間消息的傳播,區塊鏈網絡中節點一般采用八卦協議進行通信;共識與激勵層是區塊鏈技術的核心,決定了區塊以什么方式在節點間達成一致,比特幣采取的共識機制是工作量證明(PoW),而激勵制度是對區塊記錄者進行一定的獎勵分配,從經濟學的角度使區塊鏈系統維持正常運行;合約層主要是在以太坊等新型區塊鏈系統中的智能合約,以腳本代碼的形式完成用戶設定的交易過程;應用層主要指的是區塊鏈系統的綜合應用,如電子投票平臺、食品溯源等。
共識機制作為區塊鏈的核心技術顯得十分重要。共識機制的目的是實現公共賬本的2個關鍵特性:一是一致性,即去掉區塊鏈末端k個區塊(k為區塊鏈的安全參數,比特幣中k=6)之后,誠實節點的區塊鏈能夠互相成為前綴,也就是說,誠實節點的區塊最終會達成一致;二是活性,即誠實用戶上傳的交易,在一定的時間之后,一定會出現在其他所有誠實節點的賬本中。為了更好地保證以上2個特性的實現,許多共識機制應運而生。
BONNEAU J等人[2]對比特幣和其他數字貨幣完成了分類和調研。BANO S等人[3]對區塊鏈時代的共識機制進行了分類和詳細的研究。ZOHAR A[4]分析了以比特幣為代表的加密貨幣的可擴展性和安全性,強調了基于PoW的共識協議中激勵機制的重要性,與整個系統的安全密切相關;CACHIN C和VUKOLIC M[5]討論了經典共識中的重要概念,重點對需要身份準入的區塊鏈系統進行研究;BANO S、Al-BASSAM M 和 DANEZIS G[6]對可擴展區塊鏈的設計給出了具體的發展路線圖;PASS R和SHI E[7]分析了大規模共識的形式化模型,并定義其安全性質。
共識機制分為經典分布式共識和區塊鏈共識兩大類,文中我們主要研究區塊鏈共識,將區塊鏈共識分為基于PoW的共識機制、基于權益證明(PoS)的共識機制、采用單一委員會的混合共識機制、采用多委員會的混合共識機制幾大類,并給出了每一類共識機制的基本流程、典型共識方案和優缺點分析。
PoW共識機制主要利用節點算力來選擇區塊的生產者,節點通過找到滿足要求的哈希函數原像完成PoW的過程。PoS共識機制主要根據節點擁有財產的數量隨機決定區塊生產者,擁有財產越多的節點,成為區塊生產者的概率越大。采用單一委員會的混合共識機制首先利用PoW或PoS的形式選出一定數量的節點組成“委員會”,然后在委員會內部采用經典分布式共識完成區塊的生產和確認。采用多委員會的混合共識也被稱為分片共識,利用多個并行的委員會同時處理交易,實現網絡的可擴展性。
本文對區塊鏈共識的分類和典型方案研究如表1所示。
從總體層面上來講,共識主要分為2類,一類是以實用拜占庭容錯共識(PBFT)為代表的經典分布式共識,通常在授權網絡中,參與節點通過多輪投票的方式達成對某個提議值的一致。另一類是以比特幣為代表的區塊鏈共識,通常在非授權網絡中,節點能夠隨時加入或退出,通過特定算法完成出塊者選舉、區塊生成、節點區塊鏈更新等過程,保證最終誠實用戶手中賬本一致。本文中,我們主要研究區塊鏈中的共識機制。
區塊鏈作為一個分布式的公開賬本,每個區塊相當于一輪產生的賬本,用于記錄本輪內發生的交易;而共識機制首先需要確定的問題便是每一輪的賬本由誰來負責撰寫,我們將其稱之為“出塊者”。出塊者一般有2種:第1種是單一的節點作為出塊者,如比特幣、Bitcoin-NG;第2種是多個節點組成委員會,整個委員會相當于出塊者的角色,完成區塊的生成。出塊者選舉的過程需要防止女巫攻擊,簡單來說就是敵手通過制造多個假身份來增加其成為出塊者的概率,因此需要采用PoW、PoS等機制。通常單一節點作為出塊者為概率性共識,又被稱為弱共識,即區塊鏈可能出現分叉的情況;而委員會作為出塊者的共識為確定性共識,又被稱為強共識,每一輪的區塊是確定的,一般不會出現分叉。
在完成出塊者選舉之后,出塊者負責完成區塊生成的工作。區塊一般要包括本輪產生的交易、上個區塊的哈希值、時間戳等內容。在這里,區塊生成又可以分為2類:第1類是一個出塊者只負責生成一個區塊,下一個區塊由新的出塊者生成,如比特幣;第2類是一個出塊者對應多個區塊,一個出塊者工作的整個時間周期被稱為一個時期,一個時期包括多個輪,每一輪對應一個區塊,如Bitcoin-NG等。出塊者在生成區塊之后,將區塊在全網進行廣播。
網絡中的其他節點在收到新區塊之后,首先驗證區塊的合法性,是否包含上個區塊的哈希值。對于概率性共識,如比特幣中,還需要對區塊中交易的合法性、PoW的正確性進行驗證,驗證通過后節點將本地鏈進行更新,并開始新一輪的“挖礦”;對于確定性共識,節點直接更新本地區塊鏈。
PoW的概念最早是在1993年被DWORK C和NAOR M[8]提出,最初被用來防止垃圾郵件。郵件發送者必須要計算出某個特定數學難題的解才能夠完成郵件的發送。后來在1997年的 Hashcash中,BACK A[9]將其拓展,利用哈希算法作為PoW的核心。因為哈希函數為單向函數,能夠抵抗原像攻擊,因此設定哈希函數的特定輸出值作為難度,輸入值中嵌入隨機數,當輸出值小于或大于難度值時,輸入的隨機數便是哈希函數的解,即完成了PoW的過程。工作量證明的本質是:只有完成了一定數量運算的節點才能夠被授權參與某項活動,即防止敵手制造多個假身份發起的女巫攻擊。PoW與節點算力密切相關[9]。

表1 區塊鏈共識分類和典型方案
(1)比特幣
在比特幣中,平均約每10 min會產生一個最大1 MB的區塊,區塊由區塊體和區塊頭組成,如圖1所示。區塊體主要是本時間段產生的交易,區塊頭包括上個區塊的哈希值Ar-1、當前交易構成的默克爾樹根哈希MerkleTX、時間戳T和隨機數Nonce等。由于區塊頭包含指向上個區塊的哈希值,因此區塊構成了“鏈”狀的結構,所以被稱為區塊鏈。而隨機數Nonce便是工作量證明的解。比特幣中工作量證明的目的是決定區塊的出塊者,并且一輪中只有1個出塊者,對應1個區塊。比特幣中的工作量證明用公式可以簡化表示為H(Ar-1,MerkleTX,Nonce)<D,其中 H()是單向哈希函數,比特幣中使用SHA256(SHA256())實現,輸出字符長度為256 bit。D是當前挖礦難度,比特幣中通過對挖礦難度的動態調整來保持大約每10 min 1個區塊的速度。區塊的時間間隔和區塊大小與比特幣系統的安全性有著密切聯系,不能夠對其進行隨意更改,這也是目前比特幣交易速度只有7交易/秒的原因,因此比特幣的交易處理能力有限,許多諸如鏈下支付通道的研究意在提升比特幣的交易規模。
(2)Bitcoin-NG
由于比特幣交易規模有限,為了提高區塊鏈處理交易的能力,當前研究主要分為線下和線上2個方向。線下解決方案主要指的是利用鏈下微支付通道處理小額交易,線上解決方案主要是對基于PoW的共識機制的改進。線下方案不屬于本文討論范圍,不在此贅述。線上方案代表主要是 Bitcoin-NG,由 EYAL I等人[10]于2016年提出。Bitcoin-NG的PoW機制與比特幣基本一致,只不過出塊者和區塊是“一對多”的關系,即一個出塊者負責多個區塊的生成。在Bitcoin-NG中,區塊分為2種:關鍵塊和微塊,關鍵塊包含上個區塊哈希值、時間戳、挖礦難度、隨機數和出塊者公鑰,關鍵塊不記錄交易,只是負責選擇出塊者。與比特幣類似,Bitcoin-NG平均每10 min生成一個關鍵塊,對應一個時期,在每個時期內,出塊者以小于等于10秒/個的速率產生微塊,記錄每一輪的交易。微塊包含上個區塊的哈希值、當前輪的交易、時間戳等信息。Bitcoin-NG在一定程度上增加了交易規模。
基于PoW的共識機制還有GHOST[11]、Spectre[12]等。

圖1 比特幣區塊結構圖
采用PoW的共識機制最大的問題是能源的巨大浪費。以比特幣為例,由于比特幣每10 min產生一個區塊,并且給予區塊生產者一定獎勵(目前是12.5比特幣)和交易費作為激勵,而目前比特幣價格在每比特幣一萬美元左右浮動,因此想要獲得高額回報的“礦工”們利用所有算力資源,進行不間斷的哈希運算,這就造成了巨大的能源浪費。從最初的中央處理器(CPU)挖礦、圖形處理器(GPU)挖礦,到現在的現場可編程門陣列(FPGA)和專用集成電路(ASIC)挖礦,比特幣所消耗的電量成倍增長,據估計目前由于挖礦造成的每年消耗的能源已經超過了31 TWh,已經超過了全球159個國家消耗的能源,而77.7%的算力集中在中國境內,挖礦造成的巨大能源消耗已經使中國電力網絡不堪重負。
此外,基于PoW的共識機制還面臨多種攻擊,包括:自私挖礦[13]、扣塊攻 擊(BWH)[14]、扣 塊 后 分 叉 攻 擊(FAW)[15],利用區塊鏈產生分叉的特點,制定利己的區塊發布策略,獲得高于自身實際算力的高額回報;日蝕攻擊[16]、延時攻擊[17],以及網絡隔離攻擊[18],通過劫持網絡流量或其他方法,將區塊鏈中網絡節點的117個信息輸入通道控制或是將其與其他網絡節點隔離,使其只能接收到敵手發送的信息,在此基礎上發動女巫攻擊、雙花攻擊[19]、分布式拒絕服務攻擊(DDoS)等。
為了解決PoW帶來的巨大能源消耗,PoS的概念被提出。PoS的總體思路是:從所有的持幣者中隨機選取持幣者作為出塊者,持幣者被選中的概率與其持幣數目成正相關,即持有越多的幣,被選中的概率越大。PoS中出塊者的選舉方式一般分為2類:一類是公開選舉,選舉結果能夠被所有參與者獲知,如Ouroboros等;一類是私下選舉,參與者利用私有信息確認是否被選中作為出塊者,在出塊者發布區塊之后,其他參與者能夠驗證其合法性,如Ouroboros Praos等。私下選舉能夠抵抗DoS攻擊,因為在出塊者公布區塊之前,選舉的結果對于其他參與者而言都是未知的;而一旦出塊者公布區塊,區塊被加入到區塊鏈中,此時已經失去了DoS攻擊的意義。
Ouroboros是首個被證明安全的基于PoS的共識機制,由KIAYIAS A等人[20]在2017年提出。在Ouroboros中,參與者首先運行一輪多方計算產生一個隨機種子,然后將隨機種子作為輸入放到偽隨機函數中,該偽隨機函數隨機選取一個參與者作為出塊者,參與者被選中的概率與其持幣數量成正相關。出塊者生成本輪區塊并將其廣播,Ouroboros的出塊者和區塊是一一對應的關系。Ouroboros最主要的貢獻是將PoS共識機制進行形式化定義,并對其安全性給出了嚴格的數學證明。Ouroboros在40個節點參與、出塊間隔為5 s的情況下,能夠達到的交易規模為257交易/秒,交易確認時間大概為30 s。
基于PoS的共識機制還包括PPCoin[21]、Casper[22]、Snow-White[23]等。
PoS在解放工作量證明的同時,引入了一些新的安全問題,其中CHEPURNOY A[24]提出現有PoS機制存在的“無利害關系”問題,即擁有較少財產的用戶,其作為區塊生產者和驗證者進行惡意操作的成本很低,基于理性節點的自利假設,參與者惡意操作可能性較大,可以同時在鏈的不同分叉上挖礦,無需花費額外的成本,導致鏈傾向于分叉,使得這些基于PoS的協議安全性降低。另外,區塊生產者能夠發動粉碎攻擊[25],不斷重新生成新的區塊,直到生成的區塊有利于其成為下面區塊的生產者。與此同時,PoS共識機制可能遭受長程攻擊[26],攻擊者通過賄賂其他人,來獲得他人的私鑰。GAZI P、KIAYIAS A等人[27]提出了針對PoS機制的權益擊穿攻擊,如果PoS共識機制未采用檢查點機制來進行全網狀態統一,攻擊者能夠利用交易費作為激勵的形式,通過長時間的累積制造區塊分叉,進而發動雙花攻擊。
混合共識指的是利用PoW、PoS等防女巫攻擊手段,選舉一定數量的節點作為委員會,即出塊者,委員會內部通過經典分布式共識算法就區塊達成一致。混合共識中利用共識委員會的形式來代替單一的節點,有著更高的容錯能力。
混合共識的2個重要部分是時期內共識和重配置。時期內共識是指在協議正常運行過程中,協議以時期為單位推進,每個時期包括多個輪。在每個時期,委員會的配置是固定的,即委員會成員身份確定且委員會領導者確定。委員會領導者一般通過每一時期的隨機數決定,負責每一輪區塊的提議。通常來說,每一輪委員會內部運行類似于PBFT的分布式經典共識協議,生成一個新的區塊,一個時期對應多個區塊的生成。
重配置指的是時期與時期之間進行的委員會成員的更新迭代。由于敵手的存在,敵手可能會對誠實用戶實施腐化,腐化后的用戶被敵手完全控制。為了防止敵手控制的用戶比例超過一定限制,就必須對委員會成員進行更新。混合共識中,重配置通過PoW或PoS的方法,選取新的節點對舊的委員會成員進行替換。由于委員會需要持續運作,一般只替換掉委員會中的部分成員,而不是每次重配置都全部更新。
2016年KOGIAS E K等人[28]對Bitcoin-NG進行了改進,提出了ByzCoin。ByzCoin將PoW與PBFT相結合,委員會選舉方式采用PoW機制,最新找到PoW的144個節點(或1 008個)進入委員會,并且委員會采用窗口滑動的方式進行更新,即新找到PoW的節點并將最久遠的節點替換,每次只替換一個節點,新找到PoW的節點成為本時期的領導者。在委員會中,委員會成員的權限與其產生區塊的數量成正比,即如果某個用戶在144個區塊中產生了3個區塊,他便有3票的投票權。委員會內部采用改進的PBFT完成共識,利用群體簽名(CoSi)代替傳統PBFT中的消息認證碼(MAC),使得通信復雜度降低為O(log(n)),驗證復雜度為O(1)。ByzCoin中的區塊借鑒了Bitcoin-NG的思想,分為關鍵塊和微塊,關鍵塊主要用來完成委員會成員的選舉和領導者的選舉。微塊由委員會內部共識產生,記錄一輪中產生的交易以及對交易的CoSi簽名認證。在委員會成員1 008個、區塊大小為32 MB的情況下,ByzCoin的交易速度則會超過1 000交易/秒。
其他采用單一委員會的混合共識 還 有 Solida[29]、 Thunderella[30]、Algorand[31]等,其中Algorand采用的是PoS選取委員會的方式。
混合共識機制利用PoW或PoS選舉委員會,然后利用委員會內部共識完成交易區塊的添加,突破了比特幣中區塊大小和出塊速度的限制,所以交易規模有了明顯提升,一般能夠達到每秒鐘上千個交易的量級。與此同時,由于采取的共識是確定性共識,也就是強共識,所以交易確認時間大大縮短。
混合共識機制帶來了新的安全問題。如PBFT之類的委員會內共識算法需要確保委員會中誠實節點占據2/3以上,而通過PoW選舉這樣的委員會會對誠實用戶算力比例產生新的要求。如果不采取相應的措施,由于自私挖礦的存在,誠實節點算力需要占據3/4以上才能確保誠實用戶產生的區塊數量占比在2/3以上,滿足委員會內誠實用戶的占比要求。另外,混合共識中的重配置也是十分重要的問題,在重配置過程中,應當確保以下條件滿足:第一,交易處理的不間斷性,即重配置過程不會影響委員會處理交易;第二,重配置之后的委員會誠實成員占據2/3以上,才能確保委員會不會被敵手控制;第三,重配置的頻率應當被合理設置,充分考慮敵手腐化節點的能力和節點的激勵等問題。
多委員會的混合共識機制在單一委員會基礎上進行設計,主要為了解決全網節點處理交易的可擴展性問題。可擴展性指的是網絡處理交易能力隨著全網節點的增加而增加。單一委員會的混合共識機制雖然在很大程度上增大了交易處理規模,但是當全網節點增多,導致交易數量增多,此時如果委員會成員數目不變,那么其交易處理能力并不會改變。多委員會的混合共識機制又被稱為分片共識機制,其原理是將網絡節點分為多個并行的片區,每個片區由各自的委員會負責并行處理對應的交易。當網絡節點增多時,片區增加,交易處理能力隨之增加。分片共識中不同交易分屬于不同的片區,分別完成交易的處理和存儲過程。分片共識中最關鍵的問題是跨區交易的處理,所謂跨區交易指的是一個交易有多個輸入,而輸入由多個片區掌管,因此跨區交易的處理牽涉到多個委員會的共同處理,需要設計合理高效的跨區交易處理方式來避免交易鎖死等可能出現的情況。
分片共識比較典型的方案是Omniledger,由 KOGIAS E K 等人[32]在2018年提出。Omniledger主要貢獻如下:第一,實現了交易的原子性,跨區交易只能處于失敗或成功2種狀態,避免了交易鎖死的狀態;第二,實現了交易的可擴展性,網絡的交易處理能力隨節點數的增加而線性增長;第三,實現了交易確認的低延時,網絡能夠持續處理交易。在Omniledger中,有2種區塊:第1種是身份區塊,用于記錄每一時期參與共識的委員會節點的身份;第2種是交易區塊,每個片區單獨處理本片區內交易,并形成各自的區塊鏈。為了處理跨區交易,Omniledger設計了鎖定-解鎖的原子性跨區交易處理方法。客戶端將交易上傳至交易輸入對應的分片,如分片1和分片2,每個分片各自判斷交易輸入是否可用,即是否屬于未花費交易池(UTXO)。如果交易輸入可用,則生成對應的接受證明(PoA),即交易輸入在UTXO中的默克爾樹路徑;如果不可用,則生成對應的拒絕證明(PoR)。當分片1和分片2都提供PoA時,交易鎖定,經過交易輸出分片3的共識,完成交易的解鎖和確認。當分片1或分片2中任意一個提供PoR時,交易解鎖并放棄。在Omniledger中,每個時期都會利用RandHound[33]分布式隨機數生成算法生成隨機數,用于委員會領導者的選舉和委員會成員重配置時替換節點的選擇。
采用多委員會的共識機制還包括 ELASTICO[34]、 ChainSpace[35]、RapidChain[36]等。
多委員會的混合共識能夠實現交易的可擴展性,交易處理性能隨節點數目增多、分區數增多而線性增長,交易規模進一步增大。Omneledger在每個分區人數為70,分區數為16時交易處理速度能夠達到5 000交易/秒。多委員會的混合共識主要需要解決的問題是跨區交易處理問題、委員會重配置問題、抗偏置隨機數生成問題等。
區塊鏈共識算法是區塊鏈技術研究的重點,未來主要的發展趨勢是:將拜占庭容錯算法與區塊鏈技術相結合,在開放的區塊鏈網絡中建立動態、封閉的共識委員會,實現安全、高效的混合共識;將區塊鏈技術和可信硬件或其他最新密碼技術結合;對區塊鏈共識委員會中成員身份進行高效管理;實現對惡意委員會的檢測和恢復;防止擁有大算力或高權益礦工對委員會的控制;共識算法中充分考慮網絡的一致性和活性等。