秦波/QIN Bo
喬鑫/QIAO Xin
(中國人民大學,北京100872)
區塊鏈本質上是一種去中心化的、節點與節點之間地位平等的數據庫,其概念首次出現在中本聰的《比特幣:一種點對點式的電子現金系統》一文中[1]。區塊鏈通過運用加密算法、時間戳、共識機制和獎勵機制,幫助陌生的節點建立了信任,目前廣泛應用于代幣以及分布式系統之中。區塊鏈有著匿名性與安全性的特點,避免了中心化帶來的數據丟失風險和管理問題。在區塊鏈基礎上,又延伸出超級賬本、智能合約等概念。作為區塊鏈中構建信任的核心,共識機制也愈發受到學界的不斷關注。
由于區塊鏈中節點眾多,節點地理分布較廣,且不同節點之間的通信存在延遲,因此需要一種算法決定新塊的記賬權以保證節點數據的一致性,這種算法被稱為共識機制[2]。共識機制以所有誠實節點數據保持一致為目標,同時要求在節點互相平等的情況下明確記賬權的歸屬。由于共識機制的存在,用戶無需信任交易,另一方同時也無需信任第三方機構即可完成交易。區塊鏈支持多種共識機制,這些共識機制在效率、安全性、資源消耗等方面各不相同,因此文章中我們著重探討了常見共識機制的發展歷史、效率以及安全性。
共識機制,即多個個體達成一致的機制。共識機制可以根據達成共識的個體,分為算法共識和決策共識2類[3]。算法共識致力于研究復雜的網絡環境下,去中心化的網絡如何達成一致的問題,本質是多個機器達成共識。決策共識目的是幫助人達成一致,在分布式人工智能領域較為常見。區塊鏈中共識算法屬于前者,目的在于在多個節點中記錄同樣的賬本。區塊鏈中共識機制要求滿足2個性質:一致性,即不同的節點記錄的數據必須相同;有效性,節點記錄的數據格式和內容必須滿足區塊鏈規則。
共識問題,首先在數學界受到關注。早在1959年,EISENBERG E和GALE D研究了特定條件下如何在一組個體中形成共識概率分布問題。隨后共識問題受到了不同學界的廣泛關注。
在計算機界,尤其是分布式系統部分,共識問題引起了廣泛關注。在共識問題的發展過程中,首先僅考慮了節點的可靠性,之后加入了容錯問題,但節點依然要求相對可信。在當前常用的共識算法中,許多算法允許節點隨意加入網絡而不要求較高的可信性。
1989年,LAMPORT L已經提出了Paxos算法[4],但由于Paxos算法過程較為復雜,且文章內容過于晦澀難懂,直到1998年才通過評審。此種算法基于消息傳遞模型,適用于多個過程需要達成共識的場合。
2013年 ,ONGAROD和OUSTERHOUT J在《In Search of An Understandable Consensus Algorithm》一文中提出了Raft共識算法[5]。作者基于Paxos進行了改進,使之更容易理解。它與Paxos相當,對構建實際系統起了促進作用。目前百度公開了Raft開源實現代碼。
驗證池共識機制在基于傳統的共識算法上進行了改進,適用于幾大商業中心的聯合建鏈。該方案是基于傳統的拜占庭容錯(BFT)及其變種的共識方案,需要參與者能夠相互辨識,不需要發幣即可實現。驗證池算法十分高效,可以實現秒級共識。
拜占庭將軍問題,指的是地理上有一定間隔且可能不誠實的節點如何達成一致的問題。BFT指的是在整個系統中節點共有n個,最終要求誠實節點達成一致的情況下最多允許多少非誠實節點。經典算法下,要求非誠實節點數量t與整個系統節點數量n滿足n≥3t+1。最早在1999年 的 《Practical Byzantine Fault Tolerant》[6]一文中作者就給出了容錯量為1/3的算法。在分布式數據庫中,為了避免部分服務器被黑客侵入造成整個網絡崩潰的問題,采用了帶有容錯的公式算法。更進一步地,中本聰在設計區塊鏈網絡時提出了創新算法思路,增加了提出議案的經濟成本,采用經濟懲罰來制約破壞者。
2008年,中本聰提出了工作量證明(PoW)共識機制。該共識機制沿用了PoW的概念[7]。這一算法要求節點在提出議案之前必須進行大量工作(運算),并且提出議案時必須同時提交做出了大量工作的證明,這一方案將節點容錯量轉換為算力容錯量,對女巫攻擊進行了有效防范,可以允許節點自主添加到網絡。在此之后提出的Proof of X的共識方案也是基于此種思想。傳統分布式網絡要求節點需要相對可信且進入網絡需要認證,而這一共識機制使其變為了任意節點均可加入網絡,使比特幣可以應用于現實環境。
早在中本聰提出比特幣之前,BFT算法已經存在,1999年LISKOU B等提出了實用拜占庭容錯算法。該算法達成共識需要“請求、預準備、準備、確認、回應”5個步驟。其中“預準備、準備、確認”3個步驟用于保障一致性。該算法雖然擁有1/3的容錯性,但并不能防范女巫攻擊,因此不能用于公有鏈類型貨幣中。實用拜占庭容錯算法(PBFT)是傳統一致性算法的改進,算法十分高效,在不需要貨幣體系的許可鏈或者私有鏈中較為常用。目前,IBM創建的超級賬本就是使用了該算法作為共識機制。
秉持分布式系統無法同時兼顧一致性、可用性與分區容忍性(CAP)原理[8],中本聰設計了PoW共識機制。現階段常見共識算法其中一類為證明類共識,即Proof of X共識方案,是在PoW共識方案之上的變種,將PoW改換為其余證明。PoW算法現階段依然盛行,使用PoW共識的代表貨幣比特幣依然占據最大市值。
2011年7 月,一 位 名 為MECHANIC Q的數字貨幣愛好者首次提出權益證明(PoS)共識算法[9]。該算法以節點持有幣數乘持有時間作為一個節點的權益,當前權益最高的節點最可能獲得生成新塊的權力。點點幣、黑幣采用了PoW與PoS混合的共識算法,同時以太坊共識機制擬采用PoW與PoS混合的方案。
SCHWARTZ D提出了瑞波協議共識算法,該算法在產生新塊之前要求多輪投票,不需要挖礦。此算法較為高效,但BFT能力為僅(n-1)/5且節點必須提前確定。代表性應用為瑞波幣。
2013年8 月,股份授權證明(DPoS)算法由比特股項目提出。該算法根據權益投票選舉,選舉中得到票數最多的前N個節點成為“代表”,輪流產生新塊。DPoS目前應用于EOS中,支持了EOS的高效率交易。
2015年,小蟻鏈(NEO)白皮書提出授權拜占庭容錯(DBFT)共識算法。DBFT允許大規模節點參與投票,拜占庭容錯量為1/3。DBFT在生成新的區塊前需要先經過投票。為了減少資源消耗,NEO需要通過投票確定多個記賬人組成記賬人團體,記賬人團體間按BFT算法達成一致。
當前階段,共識算法呈現出百花齊放的態勢,例如2-hop[10],限制51%攻擊者在擁有51%以上算力的同時還需要擁有51%以上的權益。目前燃燒證明(PoB)、活躍證明(PoA)等共識機制成為了新研究方向。另外,存在共識算法在PoW基礎上添加了Ghost協議,將無用的挖礦算力轉換為解決有效問題。這些算法大多是PoW、PoS或者傳統一致性算法的改進或混合,《區塊鏈共識算法發展現狀與展望》[3]一文將當前的共識協議進行總結并對其脈絡進行梳理,指出了共識協議的發展方向。
區塊鏈的創新在于在去中心化系統中如何取得信任,并以此獲得可容錯性、抗攻擊性、抗共謀性。而作為取得信任的核心,共識機制是區塊鏈的神韻。目前,共識機制面對場景多種多樣,共識機制的設計也多種多樣,然而共識機制的本質始終相同,即消耗資源以換取信任。因此,共識機制的評判標準可以總結為“消耗多少資源,換取多少節點的信任,換取信任的程度,換取信任的速度,換取是否需要前提條件”,即資源消耗問題、節點擴展性問題、安全性問題、效率問題以及開放性問題。不同的場景中對以上問題的注重程度不同,因此所適用的共識機制不同,例如:大額資金交易過程中安全性的重要程度遠遠高于資源消耗的重要程度,因此大多選擇PoW共識機制。而小額資金交易過程中,對效率要求較高,因此DPoS是一個較好的選擇。
共識機制使用資源換取效率的過程并不是憑空產生的,而是有著一定的前提。當前共識機制信任來源總結如下,其中一種共識機制不一定基于全部信任來源:
(1)對數學、密碼學的信任。任何共識機制都不能離開數學基礎,例如:PoW建立在哈希函數的單向性之上,任何挖礦手段也都需要數學的參與,甚至隨機選擇過程中同樣需要數學知識。對數學的信任是最有力的信任,人為條件不能改變這種信任。
(2)相信節點注重自身利益。此種信任是強有力的信任,中本聰曾經提到:占據整個系統51%算力的節點為了自身利益,會自動維護整個系統,而不至于發動攻擊。這種思想即建立于節點足夠理性、足夠注重利益的基礎之上。同時一些保證金制度、投票制度同樣基于此種信任。
(3)多人信任。多人信任是指大部分認定的即為正確。這種信任借用了在生活中的信任,例如:只需要一定數目的商家支持比特幣支付,那么比特幣就可以流通。在PoW共識中,多算力認定的數據即為正確。多人信任不僅局限于人,同時也可能為算力、權益等。目前存在的“一中央處理器(CPU)一票”思想也是基于此種信任,選舉類共識機制是基于此種信任的典型代表。
(4)人為信任。人為信任包括身份認證和證書等其他事先約定的信任。無論是在傳統的一致性算法還是在區塊鏈共識算法中都十分常見。分布式系統中的管理員是身份認證的典型代表。在區塊鏈中一些聯盟鏈需要證書認證都基于此種信任。基于人為信任會極大影響區塊鏈的去中心化程度,但由于事先約定的緣故,不需要大量資源換取信任,是代價最小的一種方式,同時可能換取效率的提升。
同時,在區塊鏈中共識機制與激勵機制息息相關,許多共識機制的改進是為了更好地設計激勵機制,文章中我們對此不做討論。
目前存在的主流共識機制大多為PoW的改進(PoX系列)、PoS的改進、傳統共識算法的改進或者PoW與PoS的結合。雖然共識機制經過多年改進,仍然有著部分缺陷,面臨著嚴重威脅。本文針對PoW、PoS、DPoS三大共識機制對其基本方案、效率以及面臨攻擊和問題進行探究。
(1)PoW:是目前數字貨幣最為普遍的算法之一,代表案例為比特幣。比特幣效率較低,生成一個區塊時間為10 min,不能適用于小額快速交易。參照《Mastering Bitcoin》[11]中的詳細描述,挖礦公式簡記為H(block header) (2)PoS:是當前數字貨幣的典型共識算法之一,在最早的點點幣版本中,挖礦難度同代幣數量與持有時間的乘積成反比。挖礦公式為:H(H(Bprev),A,t)≤balance(A)m×Age,其中 H 為某一哈希函數,H(Bprev)為對上一塊進行哈希運算,t為時間戳,balance(A)為余額,m為事先定義值,Age為持幣時間。目前改進方案中,權益與Age不再線性相關。由于不再花費大量時間進行運算,PoS速度較快,效率較PoW高。 (3)DPoS:意為股份授權證明,同樣秉持著權益越高越容易計算新塊的思想。該方案類似于股份制公司。用戶根據持有代幣的多少擁有不同數量的選票,同時可以投票選舉相對可信的代表,并且由代表輪流產生新塊。在比特股中,代表的數量被限定為101個。該算法效率極高,使用該共識算法的EOS號稱每秒百萬級處理速度,然而要求代表相對可信,去中心化程度不如前二者。 文章中我們僅討論針對共識機制的攻擊方式,并不考慮例如雙花攻擊、日蝕攻擊、整數溢出攻擊、分布式拒絕服務(DDoS)等針對區塊鏈其余部分的攻擊方式。白帽匯安全學院列舉了5種針對共識機制的攻擊方式[12],部分攻擊方式僅針對部分共識算法。 (1)短距離攻擊。短距離攻擊步驟為:首先向全網提交一個交易,然后攻擊者試圖回滾該交易,攻擊者在該交易之前的區塊上繼續進行挖礦,在該交易得到n次確認后,若不含該交易的分叉區塊數足夠長,則該分叉成為主鏈,成功回滾交易。 短距離攻擊的典型代表是賄賂攻擊。賄賂攻擊的核心思想在于使用賄賂促使節點選擇在對攻擊者有利的鏈。典型攻擊步驟如下: 1)攻擊者購買商品,并使用數字貨幣支付; 2)商戶開始等待交易入鏈; 3)攻擊者宣稱獎勵不包含此次交易的最長鏈,如果這條主鏈被廣泛接受,攻擊者被認為沒有交易; 4)當步驟3中產生的鏈足夠長時,攻擊者使用更大的獎勵賄賂一部分礦工生成包含此次交易的鏈條。雖然存在更長主鏈,但礦工為了自身利益,會選擇從之前開始重新挖礦; 5)在此次交易得到6次確認之后,攻擊者順利地造成了交易得到確認而主鏈上并沒有此筆交易的情況,此時攻擊者停止獎勵; 6)貨物到手,由于包含交易的鏈較不包含交易的鏈短,不包含交易的鏈成為主鏈。 對于礦工而言,如果不存在獎勵(賄賂)的情況下,是否添加攻擊者進行的交易獲得的獎勵是相同的,因此攻擊者在步驟3只需要較少獎勵即可誘使礦工在主鏈中不加入這筆交易。攻擊者在整個攻擊過程中,只需要賄賂金額小于商品金額即可攻擊成功。 對于不等待確認的商戶來說,只需要很小甚至不需要賄賂即可簡單的促使這筆交易失效。 (2)長距離攻擊。長距離攻擊與短距離攻擊不同,指攻擊者在擁有一部分資源的情況下,直接對已經存在的區塊進行分叉,可能獲得更多的挖礦獎勵或者否認某筆交易。 長距離攻擊的代表為51%攻擊,惡意節點占據了整個節點的主要部分。這一攻擊和共識機制的去中心化程度有著密切聯系,常用于采用PoS共識的區塊鏈和小型采用PoW共識的系統中。中本聰在提出比特幣構想中秉持了大多數原則,即大多數算力所在的鏈即為正確的鏈。為了獲得挖礦獎勵,對于誠實的節點而言,在最長的鏈上生成區塊是有利的。由于生成新的區塊的權力只與算力相關,在大部分節點誠實的情況下,對攻擊者有利的鏈長度趕超經過6次確認的合法區塊鏈概率極低。然而,假設攻擊者擁有系統一半以上的算力,那么經過足夠長時間之后必然可以使整個系統按照攻擊者想法運行。中本聰認為:擁有51%算力的攻擊者是系統的實際受益者,在足夠理性的情況下并不會攻擊系統。然而,現實中已經存在51%算力攻擊的實際案例:一些老牌大型PoW共識區塊鏈礦工入侵新型PoW區塊鏈。在PoS中不要求算力,生成塊的速度相對較快。因此,攻擊者可能期望重寫整個區塊鏈。 目前已有學者在在51%攻擊基礎上進行改進,大約只需要1/3的算力即可達到與51%攻擊相同的效果。 (3)幣齡累積。幣齡累積是針對初期PoS共識機制的常見攻擊方式,不存在于PoW。因為持幣時間越長,獲得記賬權的概率越大。在攻擊者擁有足夠代幣之后,可以通過累積時間來達到控制網絡新生成塊的目的。在代幣足夠的情況下,攻擊者甚至可以將自身代幣分散于多個節點,這一攻擊方式可以幫助攻擊者多次生成有利塊,比如回滾以進行雙花攻擊。占有代幣1%的攻擊者可以通過2個月不進行交易來進行攻擊。基于同樣的理由,PoS可能出現冷啟動的問題。 (4)預計算。在新一代的PoS共識機制中,挖礦公式可簡寫為H(H(Bprev),A,t)≤balance(A)m。由于新塊的挖礦只與時間、余額以及上一塊的哈希值有關,因此控制當前塊的生成可以幫助攻擊者得到新塊的挖礦權。在某一節點擁有一定數量代幣以及算力足夠的情況下,該節點可以通過隨機試錯方式控制第N塊的哈希值使得攻擊者有能力對N+1塊進行挖礦。 (5)女 巫 攻 擊 。 在《The Sybil Attack》[13]一文中,DOUCEUR J R詳細地描述了女巫攻擊的全過程。女巫攻擊的核心思想在于:通過控制多數節點或者偽造多個節點進行攻擊。女巫攻擊的條件在于對等網絡中實體為一個運行程序,且同一實體可以擁有多個網絡身份。例如:在一投票的對等網絡中,攻擊者可以通過偽造多個IP達到多次投票的目的。不僅僅在區塊鏈網絡中,現今許多投票項目同樣可以通過女巫攻擊攻破。 (1)挖礦耗能問題。在PoW共識機制中,挖礦僅為簡單的遍歷,浪費了大量的算力。根據加密貨幣信息網站Digiconomist的數據稱:目前投入到比特幣和以太坊挖礦當中的電力可以在所有國家和地區消耗電力中排名第71位,其中比特幣礦機消耗功率為14.54萬兆瓦[14]。這些耗能僅用于交易的確認,造成了巨大的浪費。同時,挖礦造成了顯卡等產品的大量損耗,造成產品單價激增。 (2)去中心化程度不足問題。在PoS以及PoW共識機制中,節點與節點之間地位完全平等,因此去中心化程度較高。然而由于比特幣等貨幣算力不斷上漲,單個設備挖礦已經很難獲得挖礦的獎勵。促使一些“bitcointalk”上的極客開發出一種可以將少量算力合并聯合運作的方法,使用這種方式建立的網站便被稱作“礦池”。對于比特幣而言,目前全球約70%的算力在中國礦池手中,這可能會造成去中心化程度不足與51%攻擊。由于PoS對硬件要求較小,普通計算機可以挖礦,因此去中心化程度更高。對于DPoS而言,節點之間并不完全平等,因此去中心化程度不如PoW與PoS。 (3)冷啟動問題。對于PoS共識機制而言,持幣量和持幣時間的增長會降低挖礦難度。因此在PoS共識下,初期持有代幣的節點更加傾向于不進行交易,以獲得挖礦利潤。這就會造成代幣不流通的問題,系統的啟動較為困難。 (4)賬本分叉問題。在區塊鏈中,通常以最長的鏈作為主鏈,礦工在最長的鏈上進行挖礦。在PoW共識算法下,由于礦工算力有限,面臨多條鏈時,礦工通常會在最長鏈上進行挖礦。然而在PoS共識機制下,礦工為了自身利益,通常會選擇多個鏈進行挖礦,這可能導致區塊鏈的分叉。同時,攻擊者如果使用了預計算與幣齡累積攻擊同樣可能造成賬本分叉。 (1)PoW。由于PoW要求大量運算力,因此賄賂攻擊很難實現,攻擊者需要賄賂大部分節點才可以實現賄賂攻擊,這往往得不償失。同樣由于挖礦需要大量算力,女巫攻擊失去了效果。同時51%攻擊要求攻擊者擁有51%算力,攻擊條件十分苛刻。在新生PoW鏈中,為了防止原有的大型PoW鏈礦工發動51%攻擊,往往改動地址生成過程中的哈希函數。針對PoW耗能過高問題,目前部分節點采用Ghost協議,此協議將無用的挖礦改為了計算大素數等數學問題,部分解決了耗能問題。 (2)PoS。對于短距離攻擊,最常見的解決方式為在PoS共識機制中引入保證金和懲罰措施,這基于“節點注重自身利益”這一條件下,目前以太坊擬采用casper協議抵御攻擊。在引入保證金機制后,節點會為保證金反對做出對區塊鏈不利的決策。懲罰措施可以使節點得不到攻擊者事先聲明的報酬,促使節點做出對區塊鏈有利的決策。針對幣齡累積攻擊,通常限制持幣時間對挖礦難度的降低作用。蝸牛幣提出了股份速率證明(PoSV)機制,將難度函數改進為指數衰減函數。在PoSV共識下,節點累計足夠長的時間之后,繼續累積很難提高收益,解決了幣齡累積攻擊。針對冷啟動問題,目前大多數區塊鏈采取了在鏈初期首先使用PoW機制,中期使用PoW+PoS結合方式,最后采用純PoS共識機制。 (3)DPoS。DPoS機制本身對短距離攻擊與預計算攻擊有較強防范,其余防范方式與PoS基本相似。 共識機制經過了數年的發展,在經過探索和開放式創新之后,勢必進入到性能安全性等的比拼之中。表1分別為PoW、PoS、DPoS面臨的攻擊威脅表。 為了保證較高的安全性,一部分共識算法在效率方面做出了退步,表2為當前主流共識機制性能、特點的對比。 總結來看:當前PoW共識機制的安全性較高、面臨攻擊威脅小,但效率較低;PoS和授權股權證明效率較高,但犧牲了部分安全性。傳統共識機制對各種攻擊防范較為到位并且效率比較高,但是大多不能進行拜占庭容錯。 目前共識機制應用的場景越來越廣泛,且不同場景下對共識機制安全性與效率要求不同,能否找到一種適用于大多數場景的共識成為關鍵。 共識機制的發展目標在于資源消耗問題、節點擴展性問題、安全性問題、效率問題以及開放性問題5個方面的提升,例如:Ghost協議是在PoW基礎之上緩解了部分資源消耗的問題。在5個維度不能同時提升的情況下根據特定情況選擇犧牲一部分換取另一部分的提升同樣是當前研究的熱點。當前為了適應實際生活的交易,犧牲部分安全性以換取效率的共識機制十分常見,例如:DPoS機制。 表1 工作量證明、權益證明、授權股權證明面臨威脅 表2 共識機制性能 根據基于方案的不同,當前共識機制可以歸結為傳統一致性算法的改進、PoW算法的改進、PoS算法的改進,以及PoW與PoS的結合。PoW與PoS的結合是當前共識機制的發展趨勢之一,通常屬于時間效率與安全性的妥協。 根據基于信任來源的不同,當前共識機制許多是在同一信任類型下的替換,例如:Proof of X類型的共識協議,通常是在多人信任之下修改信任的對象。是否可以找到一種可信的并且消耗資源量小的信任對象是當前共識機制改進的重要問題。2.3 共識算法攻擊方式
2.4 可能存在的問題
2.5 共識算法的防范與改進
2.6 共識機制效率與安全性對比
3 結束語

