《CSA GCR:2023共識算法與共識安全白皮書(74頁).pdf》由會員分享,可在線閱讀,更多相關《CSA GCR:2023共識算法與共識安全白皮書(74頁).pdf(74頁珍藏版)》請在三個皮匠報告上搜索。
1、 2023 云安全聯盟大中華區版權所有1 2023 云安全聯盟大中華區版權所有22023 云安全聯盟大中華區-保留所有權利。你可以在你的電腦上下載、儲存、展示、查看及打印,或 者訪問云安全聯盟大中華區官網(https:/www.c-)。須遵守以下:(a)本文只可作個人、信息獲取、非商業用途;(b)本文內容不得篡改;(c)本文不得轉發;(d)該商標、版權或其他聲明不得刪除。在遵循 中華人民共和國著作權法相關條款情況下合理使用本文內容,使用時請注明引用于云安全聯盟大中華區。2023 云安全聯盟大中華區版權所有3致 謝致 謝云安全聯盟大中華區(簡稱:CSA GCR)區塊鏈安全工作組在 2020 年
2、2 月份成立。由黃連金擔任工作組組長,9 位領軍人分別擔任 9 個項目小組組長,分別有:知道創宇創始人&CEO 趙偉領銜數字錢包安全小組,北大信息科學技術學院區塊鏈研究中心主任陳鐘領銜共識算法安全小組,賽博英杰創始人&董事長譚曉生領銜交易所安全小組,安比實驗室創始人郭宇領銜智能合約安全小組,世界銀行首席信息安全架構師張志軍領銜 Dapp 安全小組,中國移動集團信安中心高工于樂博士領銜去中心化數字身份安全小組,北理工教授祝烈煌領銜網絡層安全小組,武漢大學教授陳晶領銜數據層安全小組,零時科技 CEO 鄧永凱領銜 AML 技術與安全小組。區塊鏈安全工作組現有 100 多位安全專家們,分別來自中國電子
3、學會、耶魯大學、北京大學、北京理工大學、世界銀行、中國金融認證中心、華為、騰訊、知道創宇、慢霧科技、啟明星辰、天融信、聯想、OPPO、零時科技、普華永道、安永、阿斯利康等六十多家單位。本白皮書主要由共識算法安全小組專家撰寫,感謝以下專家的貢獻:原創作者:陳 鐘關 志王 珂審核專家:黃連金 江 洪郭鵬程姚 凱關于研究工作組的更多介紹,請在 CSA 大中華區官網(https:/c- CSA GCR 秘書處給與雅正!聯系郵箱:researchc-;國際云安全聯盟 CSA公眾號。2023 云安全聯盟大中華區版權所有4序 言序 言從早期的分布式一致性算法的緩慢發展到現如今區塊鏈共識的百花齊放,共識算法的
4、發展已經走過了四十年左右的時光。隨著區塊鏈技術的快速發展,共識算法也在不斷演進和提高,不同的共識算法的側重點不同,因此它們所面臨的問題、環境也不一樣。共識算法,可以理解為是為了實現分布式一致性協議而產生的一系列流程與規則。當分布在不同地域的節點都按照這套規則進行協商交互之后,最終總能就某個問題得到一致的決策,從而實現分布式系統中不同節點的一致性。共識算法與共識安全白皮書深入介紹了 CFT 類共識算法、經典拜占庭共識和開放 BFT 類共識等三大類共識算法,并延伸到了共識算法安全性分析和測試方法。報告旨在提供一份系統的關于共識算法安全的知識,從共識算法理論和實現兩方面展開安全測試和分析,理論分析主
5、要從算法本身展開分析,實現分析從算法的具體參數、代碼實現、應用部署等都方面進行安全分析和測試?;跍y試方法和標準,對共識算法安全的典型安全進行分析,并給出分析過程和結論。報告以超級賬本和以太坊共識算法為例,探索這些項目在共識算法安全領域的實踐經驗。報告旨在為區塊鏈開發者、投資者、組織機構在共識算法安全領域提供指導,通過詳細數據和案例進行論證,力求將理論與實踐更好結合,希望能為您提供有關共識算法的有益信息,幫助您更好地理解和應用這項技術。李雨航 Yale LiCSA 大中華區主席兼研究院院長 2023 云安全聯盟大中華區版權所有5目錄1 共識算法介紹共識算法介紹.61.1介紹.61.2 CFT
6、類共識算法.61.3 經典拜占庭共識.91.4 開放 BFT類共識.172 共識算法安全性分析共識算法安全性分析.362.1安全建模.362.2 分析方法.392.3 攻擊方法.413 共識算法安全測試方法和標準共識算法安全測試方法和標準.483.1 共識算法安全理論分析和模擬.483.1.1 共識算法安全理論分析.483.1.2 安全性與惡意攻擊類型.493.1.3 應對策略.503.1.4 共識算法安全模擬.513.2 共識算法安全滲透測試和代碼安全審查.553.2.1 安全指標.553.2.2 滲透測試.573.2.3 滲透測試工具和代碼安全審計.583.3 共識算法安全 CheckLi
7、st.594 共識算法安全案例分析共識算法安全案例分析.624.1 51%攻擊.624.2 DDoS 攻擊.634.3 BGP 劫持攻擊.645 共識算法安全的最佳實踐共識算法安全的最佳實踐.645.1 超級賬本的共識算法安全最佳實踐.645.2 以太坊共識算法安全最佳實踐.66參考文獻參考文獻.69 2023 云安全聯盟大中華區版權所有61 共識算法介紹1.1介紹共識問題是社會科學和計算機科學等領域的經典問題,計算機科學領域的早期共識研究一般聚焦于分布式一致性,即如何保證集群中所有節點中的數據完全相同并且能夠對某個提案(Proposal)達成一致,主要解決的問題是因節點失效、節點間網絡故障及
8、分布式系統的運行速度的差異而帶來的系統不一致問題。Fischer等在 1985年提出了 FLP 不可能原理,即在網絡可靠,但允許節點失效(即便只有一個)的最小化異步模型系統中,不存在一個可以解決一致性問題的確定性共識算法1。Eric Brewer在 1998年提出了 CAP 理論,指出在異步的網絡模型中,所有的節點由于沒有時鐘,僅僅能根據接收到的消息作出判斷,系統最多只能同時滿足一致性(Consistency)、可用性(Availability)和分區容忍性(Partition Tolerance)這三項中的兩項2。FLP 不可能性可以采用更弱的終止條件或者更強的網絡假設解決,Ben-Or 在
9、 1983年提出了完全異步模型下概率終止的共識算法3,Dwork等人在 1988年提出了部分異步模型下的共識算法,保證在網絡同步的時侯算法能夠確定性終止4,Leslie等在 1982年提出了同步模型下的共識問題5。早期的共識算法一般也稱為分布式一致性算法,與目前主流的區塊鏈共識算法相比,分布式一致性算法主要面向分布式數據庫操作、且大多不考慮拜占庭容錯問題,即假設系統節點只發生宕機和網絡故障等非人為問題(CFT,Crash Fault Tolerance),而不考慮惡意節點篡改數據等問題(BFT,Byzantine Fault Tolerance,拜占庭容錯)。拜占庭容錯問題是Leslie 在
10、1982年提出的分布式領域容錯問題,它是分布式領域中最復雜、最嚴格的容錯模型5。在該模型下,系統不會對集群中的節點做任何的限制,節點可以向其他節點發送隨機數據、錯誤數據,也可以選擇不響應其他節點的請求.這些無法預測的行為使得容錯這一問題變得更加復雜。1.2 CFT類共識算法CFT 類共識算法只保證分布式系統中節點發生宕機錯誤時整個分布式系統的可靠性,而當系統中節點違反共識協議的時候無法保障分布式系統的可靠性,因此 CFT共識算法目前主要應用在企業內部的封閉式分布式系統中。目前流行的 CFT共識算法主要有 Paxos算法及其衍生的 Raft共識算法。此外,獲得較多研究關注的共識算法還有兩階段提交
11、(Two-Phase Commit)算法、三階段提交(Three-Phase Commit)算法、Zab、Kafka 等。2023 云安全聯盟大中華區版權所有71.2.1 Paxos共識算法Paxos共識算法是基于消息傳遞的一致性算法,由 Leslie Lamport 在 1990年提出6,該算法基于同步性假設,通過引入超時(Timeout)概念規避了 FLP 不可能問題,如果在確認下個值的過程沒有進展,Paxos會等到超時,然后重新進行共識的步驟。Paxos的算法步驟如下:階段階段 1:準備請求:準備請求1)提案者選擇新的提案號(n),然后向接收者發送“準備請求”。2)當接收者收到準備請求(
12、“prepare,”n),且 n 比已經接收到的其他準備請求大,接收者會發出消息(“ack,”n,n,v)或(“ack,”n,)。3)接收者承諾不會再接納任何提案號小于 n 的準備請求。4)如果有的話,接收者會發出具有最高提案號的提案值(v),反之則發出空消息 。階段階段 2:接收請求:接收請求1)如果提案者收到大多數接收者的響應,則可以發出帶有提案號 n 和價值 v 的接收請求(“accept,”n,v)。2)n 是準備請求中出現的數字。3)v 是響應中具有最高提案號的提案值。4)當收到接收請求(“accept,”n,v)時,除非接收者已經采納了大于 n 的提案號,否則接收者就會采納這個請求
13、。階段階段 3:學習階段:學習階段1)每當接收者采納了一個提案,就會向所有學習者返回(“accept,”n,v)。2)學習者從多數接收者那兒得到(“accept,”n,v),選定最終的值 v,然后向其他學習者發送(“decide,”v)。3)學習者收到(“decide,”v)和最終決定的值 v。2023 云安全聯盟大中華區版權所有8圖1Paxos算法示意為了提供部署的靈活性,Paxos 描述的許多主要特性都是開放式的,比如領導者選舉、偵錯、日志管理等內容。這種設計選擇后來成為 Paxos 最大的缺點之一,使得 Paxos不僅難以理解,而且難以實施。1.2.2 RAFT 共識算法因為 Paxos
14、晦澀難懂,2013 年 Ongaro 和 Ousterhout 為 Raft 復制狀態機提出了一種新型共識算法7,其核心目標是可理解性,主要有兩方面的改進:1)將整體算法的描述分解為子問題)將整體算法的描述分解為子問題Raft 算法將其整體劃分成了幾個子問題,每個子問題都可以獨立解釋,從而理解 Raft算法只需要相對獨立地理解幾個子問題即可。Raft 算法可分為以下幾個子問題:Leader election:描述如何從集群節點中選舉出 Leader;Log Replication:描述如何將日志同步到各個節點從而達成一致;Safety:定義了一組約束條件保證 Raft 算法的強一致性;Memb
15、ership changes:描述如何變更集群關系(增加或者減少節點)。2)簡化狀態空間)簡化狀態空間Raft 算法盡可能地確定各個環節的狀態。典型地,Raft 算法采用 strong leader 模型,每個日志的讀寫均由 Leader 從中主動協調,整體系統的數據流變得非常簡單:從 Leader流向 Follower。而且每個節點的狀態也只有 3 種:Leader,Candidate 和 Follower。如圖 2所示:2023 云安全聯盟大中華區版權所有9圖2 RAFT數據流此外,Raft 使用兩個超時機制控制領導人選舉,分別是選舉超時及心跳超時。在 Raft中,如果節點宕機并重啟后,在
16、試圖聲明成為領導者(Leader)之前,需要至少等待一個超時周期,并且一定會有所進展。1.3 經典拜占庭共識經典拜占庭共識算法能夠保證當系統中不超過一點數量的節點發送拜占庭行為時,系統仍能夠保持一致性。經典拜占庭容錯系統普遍采用的假設條件包括:(1)拜占庭節點的行為可以是任意的,拜占庭節點之間可以共謀;(2)節點之間的錯誤是不相關的;(3)節點之間通過異步網絡連接(如 Internet 網絡),網絡中的消息可能丟失、亂序到達、延時到達;(4)服務器之間傳遞的信息,第三方可以知曉但不能篡改或偽造信息的內容,可以通過簽名技術實現這一點。目前主要有兩種類型的經典拜占庭協議,一種是基于狀態復制的,稱為
17、 Agreement-Based協議,通過節點間的相互通信達成對請求序列的共識;另一種是 Quorum-based協議,客戶端直接與節點交互,樂觀地執行請求。前者一般通信復雜度較高,后者處理爭議的代價比較高。BFT 類算法效率一般較低,很難實用,學術界和業界對 BFT 協議進行了大量改進,其優化的主要思路是針對無拜占庭錯誤的場景,盡可能降低協議復雜度,提高效率。1.3.1 Agreement-based BFT 協議Agreement-based BFT 協議通常需要有一個主節點作為網絡中的樞軸,與其他節點相比,主節點在共識過程中起最主要的作用,但通常也會成為系統性能的瓶頸。主節點需要將客戶端
18、發來的請求排序后發送給所有的備份節點,所有節點通過互相通信后達成一致,2023 云安全聯盟大中華區版權所有10實現安全性(Safety),大多數協議中所有節點也會向客戶端回復響應,實現活性(Liveness)。該類協議通常需要 3f+1個節點實現對 f個拜占庭節點的容錯。1.3.1.1 PBFT協議PBFT是 Castro和 Liskov在 1999年提出的8,是第一個“實用”的拜占庭容錯算法,解決了原始拜占庭容錯算法效率不高的問題,將算法復雜度由指數級降低到多項式級(2),使得拜占庭容錯算法在實際系統應用中變得可行。首次提出在異步網絡環境下使用狀態機副本復制協議,并且通過優化在早期算法的基礎
19、上把響應性能提升了一個數量級以上。PBFT中的很多機制都受到 Paxos的影響。PBFT在保證活性和安全性(Liveness&Safety)的前提下,提供了(n-1)/3的容錯性,即如果系統內有 n個節點,那么系統最多能容忍的惡意/故障節點為(n-1)/3個。PBFT是一種狀態機副本復制算法,所有的副本在一個視圖(view)輪換的過程中操作,主節點通過視圖編號以及節點數集合確定,即:主節點 p=v mod|R|。v:視圖編號,|R|節點個數,p:主節點編號。算法主體流程如圖 3所示,共分為 5個階段:圖3 PBFT算法流程1.REQUEST客戶端 c向主節點 p發送請求并簽名,其中 o為請求的
20、具體操作,t 為時間戳,c為客戶端標識,REQUEST 包含消息內容 m,以及消息摘要 d(m)。2.PRE-PREPARE主節點對收到的請求做校驗,如果校驗通過,則分配一個編號 n,編號 n主要用于對客戶端的請求排序,然后主節點廣播一條,m消息給其他副本節點并簽名,其中 v為視圖編號,d 為客戶端消息摘要,m為消息內容。3.PREPARE 2023 云安全聯盟大中華區版權所有11副本節點 i 收到主節點的 PRE-PREPARE 消息,進行校驗,如果校驗通過,則向其他節點包括主節點發送一條消息并簽名,其中 v,n,d,m與上述 PRE-PREPARE消息內容相同,i 是當前副本節點編號。記錄
21、 PRE-PREPARE和 PREPARE 消息到 log中,用于 View Change過程中恢復未完成的請求操作。4.COMMIT主節點和副本節點收到 PREPARE消息,需要進行校驗。如果副本節點 i 收到了 2f+1個驗證通過的 PREPARE消息,則向其他節點包括主節點發送一條消息并簽名,其中 v,n,d,i 與上述 PREPARE 消息內容相同。記錄 COMMIT 消息到日志中,用于 View Change 過程中恢復未完成的請求操作。記錄其他副本節點發送的 PREPARE 消息到 log中。5.REPLY主節點和副本節點收到 COMMIT 消息,需要進行校驗。如果副本節點 i 收
22、到了 2f+1個驗證通過的 COMMIT 消息,說明當前網絡中的大部分節點已經達成共識,運行客戶端的請求操作 o,并返回給客戶端,其中 r是請求操作結果,客戶端如果收到 f+1個相同的 REPLY 消息,說明客戶端發起的請求已經達成全網共識,否則客戶端需要判斷是否重新發送請求給主節點。記錄其他副本節點發送的 COMMIT 消息到 log中。如果主節點作惡,它可能會給不同的請求編上相同的序號、或者不去分配序號、或者讓相鄰的序號不連續,副本節點應當有職責主動檢查這些序號的合法性??蛻舳嗽O置超時機制。如果主節點掉線或者由于作惡而不廣播客戶端的請求,一旦超時,則向所有副本節點廣播請求消息。副本節點檢測
23、出主節點作惡或者下線,發起 View Change協議。為了確保在 View Change的過程中,能夠恢復先前的請求,每一個副本節點都記錄一些消息到本地的 log中,當執行請求后副本節點需要把之前該請求的記錄消息清除掉。最簡單的做法是在 Reply消息后,再執行一次當前狀態的共識同步,但這樣做的成本比較高,因此可以在執行完多條請求 K(如 100條)后執行一次狀態同步。這個狀態同步消息就是CheckPoint消息。PBFT算法由于每個副本節點都需要和其他節點進行 P2P的共識同步,因此隨著節點的增多,性能下降得很快,但在較少節點的情況下可以有不錯的性能。2023 云安全聯盟大中華區版權所有1
24、21.3.1.2 Chain協議Chain協議是 Van Renesse等在 2004年提出的一個共識協議9,與 PBFT 不同的是其采用鏈式傳播路徑:從主節點開始,每一次傳播時即加入該節點的摘要信息。當客戶端較多時,Chain通常會比 PBFT、Zyzzyva 等有更高的吞吐量。1.3.1.3 Ring協議Ring協議是 Guerraoui等在 2010年提出的共識協議10。該協議使用環形拓撲方式傳遞消息,即每個節點都有消息的上一個發送者和下一個接收者,以此方式降低對部分節點分配更多工作而形成的性能瓶頸問題。對有無錯誤的不同場景,Ring分別采用兩種運行模式:快速模式(Fast Mode)和
25、彈性模式(Resilient Mode),并采用 ABSTRACT 框架進行切換。1.3.1.4 Honey Badger BFTHoney Badger BFT 是 Miller等人在 2016年提出的共識協議61。該協議基于異步網絡假設,是第一個實用的異步 BFT共識算法。相比于 PBFT,Honey Badger BFT在現實的網絡環境下具有更好的吞吐量及確認延遲。Honey Badger BFT 并不分主節點和從節點,每個節點都公平的接收交易,每個節點都各自維護交易池。每輪開始時,每個節點會從交易池里隨機選擇出交易組成交易集合 Ui,并利用 Reliable broadcast(RBC
26、)協議廣播給其它節點。RBC協議是為了降低廣播帶寬而設計的,其主要思路是發送節點將消息分割成 n份,分別發送給其它的 n個節點,n個節點直接通過相互廣播即可恢復出消息,其中為了能夠容納 f個惡意節點,只需要其中 n-f個碎片即可恢復出消息。接著節點運行二元拜占庭協議(Binary Byzantine Agreement,BBA)剔除無效交易和重復交易,得到一個異步公共交易子集(Asynchronous CommonSubset)。受 FLP不可能定理所限,Honey Badger BFT 協議的在異步網絡下為一個非確定性共識協議,可能無法終止。1.3.1.5 HotstuffHotstuff是
27、 Yin等人在 2019年提出的共識協議62。HotStuff是一個三階段投票的BFT類共識協議,通過引入門限簽名及新型網絡拓撲結構實現了 O(n)的通信復雜度,并通過流水線技術提高了共識效率。2023 云安全聯盟大中華區版權所有13Hotstuff將視圖切換流程和正常流程進行合并,不再有單獨的視圖切換流程,降低了視圖切換的復雜度。為此,Hotstuff為正常流程引入了新的確認階段,把 PBFT 的兩階段確認擴展成了三階段確認:pre-commit 階段、commit 階段及 decide 階段。為了減少通信量,HotStfuff引入了門限簽名技術。在 HotStuff 的三階段確認中,從節點
28、會對消息進行門限簽名并發送給主節點,當主節點收到足夠多的簽名時,將簽名聚合導出完整簽名,并在向從節點廣播下一階段消息時附上該簽名,供從節點驗證。Hotstuff 用門限簽名和鏈式結構把節點輪換、區塊鏈出塊以及拜占庭共識結合了起來,使得無論是出塊、拜占庭共識還是區塊輪換都有了一個非常簡潔并且完全一致的形式,并且將節點輪換和拜占庭共識的通信復雜度降到了 O(N)。但缺點是由于多了一輪共識,其交易確認延遲相比其它 BFT算法要高。1.3.1.6 LibraBFT作為 Facebook DIME項目(曾經命名為 Libra)的共識算法,LibraBFT 在 HotStuff 的基礎上引 入顯示活躍度的
29、機制并提供了具體的延時分析。LibraBFT 在 3f+1 個驗證節點之間收集投票,這些驗證者可能是誠實的節點也可能是拜占庭節點。在網絡中有 2f+1 個誠實節點的前提下,Libra 能夠抵御 f 個驗證節點的雙花攻擊和分叉攻擊。LibraBFT 在一個有全局統一時間(GST),并且網絡最大延時(T)可控的 PartialSynchrony 的網絡中是有效的。并且,LibraBFT 在所有驗證節點都重啟的情況下,也能夠保證網絡的一致性。嚴格說來,LibraBFT 是基于 HotStuff 的一個變種,叫鏈式 HotStuff(ChainedHotStuff)。鏈式 HotStuff 是在基本
30、HotStuff(Basic HotStuff)上引入流水線概念,進一步提升效率的一個改進共識協議。libraBFT 最初會選擇一些在不同地理上分布的創始成員做共識節點,以后逐漸的將共識節點對外開放,并基于 libra 穩定幣的多少選擇共識節點,也就是轉變成 PoS 機制。libraBFT 的共識流程是分為不同輪次(Round),每一輪中一個 Leader 主節點被選 出。主節點會提議一個區塊,里面包括多個交易。該區塊將廣播給其它共識節點。其它共識 節點會驗證區塊里的交易,并對其投票。主節點收到大多數(超過 2f+1,f 是系統中能容忍的拜占庭節點數)節點的投票后,主節點把確認消息發給所有共識
31、節點確認。如果主節點沒收到大多數投票,或者主節點出現故障,副本共識節點的定時將超時,副本節點會發起新一輪提議。2023 云安全聯盟大中華區版權所有14libraBFT 在 HotStuff 基礎上的改進主要在于提供一個詳細的參與同步輪次的Pacemaker 設計和實現。并提供對實際交易確認的活性分析。LibraBFT 提供對共識節點投票權力的重配置機制。同時它給出了對提議節點和投票節點激勵的機制。LibraBFT 的白皮書給出了如何檢測投票節點破壞正確性的行為,為今后在協議中加入懲罰機制打下基礎。同時白皮書也詳細討論如何同步,使得投票節點能同步它們的狀態。libraBFT 白皮書采用Rust
32、語言描述協議。在 LibraBFT 中,為了更好地支持 Libra 生態系統的目標,LibraBFT以多種方式擴展 和調整了核心 HotStuff 協議和實現。重要的是,LibraBFT 重新定義了安全條件,并提供了 安全、活性和更高響應度的擴展證明。LibraBFT 還實現了一些附加功能。首先,通過讓驗證器對塊的結果狀態(而不僅僅是交易序列)進行集體簽名,LibraBFT使協議更能抵抗非確 定性錯誤,還允許客戶端使用法定人數證書來驗證讀取的數據庫。其次,LibraBFT 設計了 一個發出明確超時的起搏器,驗證器依靠法定人數進入下一輪而不需要同步時鐘。第三,LibraBFT 打算設計一個不可預
33、測的領導者選舉機制,其中一輪的領導者由最新提交的塊的提議者使用可驗證的隨機函數 VRF 確定。這種機制限制了攻擊者可以針對領導者發起有效拒絕服務攻擊的時間窗口。第四,LibraBFT 使用聚合簽名保留簽署仲裁證書的驗證者的 身份。這使我們能夠為有助于仲裁證書的驗證人提供激勵,聚合簽名也不需要復雜的密鑰閾值設置。具體實現細節如下:LibraBFT 共識組件最主要的是實現了 Actor 程序模型,使用消息傳遞在不同的子 組件之間進行通信,其中 tokio 框架用作任務運行時。Actor 模型的主要例外是(因為它是由幾個子組件并行訪問的)是共識數據結構 BlockStore。BlockStore管理
34、塊、執行、仲裁證書和其他共享數據結構。共識組件中的主要子組件是:TxnManager 是內存池組件的接口,支持拉取交易以及刪除已提交的交易。提議者使用來自內存池中的按需拉取交易形成提議塊。StateComputer 是訪問執行組件的接口。它可以執行塊,提交塊,并可以同步狀態。BlockStore 維護提議塊樹、塊執行、投票、仲裁證書和持久存儲。它負責維護這些數據結構組合的一致性,并且可以由其他子組件同時訪問。EventProcessor 負責處理各個事件,如 process_new_round、process_proposal、process_vote。它公開每個事件類型的異步處理函數和驅動協
35、議。2023 云安全聯盟大中華區版權所有15Pacemaker 負責共識協議的活性。它由于超時證書或仲裁證書而改變輪次,并在它是當前輪次的提議者時提出阻止。SafetyRules 負責共識協議的安全性。它處理仲裁證書和分類信息以了解新的提交,并保證遵循兩個投票規則 即使在重啟的情況下(因為所有安全數據都持久保存到本地存儲)。所有共識消息都由其創建者簽名,并由其接收者驗證。消息驗證發生在離網絡層最近的地方,以避免無效或不必要的數據進入協商一致協議。1.3.2 Quorum-based BFT 協議Quorum機制是一種分布式系統中常用的機制,用來保證數據冗余和最終一致性的投票算法。其主要思想來源
36、于抽屜原理,常用于分布式系統的讀寫訪問控制11。該類共識協議不需要節點間相互通訊,而是由節點直接執行并響應客戶端發來的請求。當受到足夠數量的響應后,客戶端才會將結果最終提交。但是當出現拜占庭錯誤場景時,通常會花費較大的代價解決。另外,由于缺少對請求的排序機制,Quorum方法無法處理有競爭(Contention)的情況。1.3.2.1 Q/U協議Q/U協議(Query/Update)是 Abd-El-Malek在 2005年提出的一個基于 Quorum的協議12,該協議沒有主節點為請求排序,而是由客戶端直接向節點發送請求并由節點反饋結果,最多能容忍(n-1)/5個惡意/故障節點。1.3.2.2
37、 HQ協議HQ 協議(Hybrid Quorum)Cowling等人在 2006年提出的共識協議13,該協議綜合參考并優化了 Q/U協議和 PBFT協議,最多能容忍(n-1)/3個惡意/故障節點。對沒有競爭的情況,該協議對 PBFT節點間通訊做了簡化,將共識分為兩個階段:第一階段是客戶端發送請求并收集節點的狀態信息;當收到結果表明 2f+1個節點狀態相同且可以執行請求后,開始第二階段信息發送并由節點執行請求。如果發現有競爭,則采用類似 PBFT的解決過程,性能退化為和 PBFT類似。1.3.2.3 Quorum協議Quorum協議是 Guerraoui等人在 2010年提出的基于 Quorum
38、機制的一個共識協議14,主要為沒有客戶端競爭的非異步網絡設計,只需要 3f+1個節點進行拜占庭容錯。當沒有錯誤產生時,Quorum協議的傳播路徑和 Q/U類似,節點獨立執行請求并自己維護一個執 2023 云安全聯盟大中華區版權所有16行歷史記錄。當客戶端數量較少時,其吞吐量和延遲等性能指標均比其他 BFT類共識更好。但其缺點也和 Q/U類似,無法處理客戶端有競爭的情況。1.3.2.4 Zyzzyva協議Zyzzyva 是 Kotla等人在 2007年提出的一個協議15,需要 3f+1個節點對 f個惡意節點進行拜占庭容錯。Zyzzyva 同樣需要主節點將客戶端發來的請求排序后轉發給副本節點,但采
39、用了更加樂觀的策略,節點不需要通過需要消耗大量系統代價的 3階段提交過程即可響應客戶端的請求,節點同意由主節點發出的排序請求即給客戶端返回結果。由客戶端而不是節點來負責考慮一致性問題,客戶端會根據節點返回的一致性結果數量分別執行不同的動作。在樂觀情況下,該協議具有線性的復雜度,但如果發生錯誤,主節點的更替仍然需要(3)的時間復雜度。Abraham等人在 2017年指出 Zyzzyva 協議存在安全漏洞16,并在 2018年給出了修正方案17。1.3.2.5 Zeno協議在 Zyzzyva 協議的基礎上,Singh在 2009年提出的一個新的共識協議 Zeno18,該協議將 Zyzzyva 原有
40、的強一致性替換為一個較弱的最終一致性保證,它允許客戶端偶爾忽略其他更新,但是當網絡不穩定時,所有節點的狀態需要進行合并以達成一致。1.3.3 基于拜占庭鎖的共識協議拜占庭鎖是拜占庭協議的擴展,通過利用 IO 絕大多數時間里不會出現競爭的特性達到降低服務器響應時間、提高吞吐量與擴展性的效果。Hendricks等在 2010提出的 Zzyzx 協議最早引入的拜占庭鎖的概念19,協議包括加鎖和解鎖兩個部分。加解鎖過程均基于現有拜占庭協議達成對客戶端授權的一致。當授權完成,獲得鎖的客戶端可直接進行操作,去掉了主節點排序、節點間通訊等操作,從大幅度提高了吞吐量。但當有多個客戶端需要頻繁切換時,其性能也會
41、大幅下降,因此該協議較為適用于客戶端不會頻繁發生變化的情況下。2023 云安全聯盟大中華區版權所有17針對無拜占庭錯誤的場景優化的共識協議,當遇到拜占庭錯誤時,其性能一般較低,甚至很難保證系統活性。為了解決這個問題,Aardvark協議20、Prime協議21、Spinning協議22、RBFT 協議23等針對發生特定的拜占庭行為的場景進行了優化,降低了系統在有無拜占庭錯誤這兩種場景下的表現差異。1.3.4 其它共識協議此外,Pass等人將可驗證隨機數與中本聰共識相結合,提出了 Sleepy協議24,該協議大大降低了共識協議的復雜性,并將通信復雜度降低到線性,但是該協議的確認時間較長,且無最終
42、確定性。Baird將 BFT 共識協議與 DAG 結合,提出了 Hashgraph協議25,將整個共識過程融入到 gossip通信中,降低了通信復雜度。1.4 開放 BFT 類共識傳統的共識算法一般都假設網絡是有準入機制的,因此無法應用于開放網絡,2008年中本聰在發表的比特幣白皮書引入了基于工作量證明(Proof of Work,PoW)的共識算法26,為解決開放網絡中的分布式一致性問題提供了新的思路,使得協調復雜網絡環境中的成千上萬節點成為可能。此后,受比特幣啟發,誕生了一大批適用于開放網絡的共識算法,如權益證明(Proof of Stake,PoS)、空間證明(Proof of Spac
43、e,PoSpace)、混合共識(Hybrid Consensus)等。1.4.1 PoW類共識工作量證明的思想最早由 Dwork等人在 1993年提出,主要用來解決垃圾郵件的問題27。1999年 Jakobsson等人正式提出了“工作量證明”的概念,Adam Back 在 1997年提出并在 2002年正式發表了基于工作量證明機制的 HashCash,用以解決垃圾郵件問題28,與 Dwork的工作量證明所不同的是,HashCash的工作量證明機制更具隨機性。Dwork的工作量證明需要解決一個難題,這意味著一臺速度更快的電腦總能比一臺速度慢的電腦更快解決問題,而 Hashcash允許速度較慢的計
44、算機在某些時候更快地找到正確答案,僅在統計學上速度快的電腦能夠更快的找到答案(這一點對 PoW共識非常重要)。HashCash為比特幣的提出奠定了基石。1.4.1.1中本聰共識中本聰通過引入經濟激勵及工作量證明保證比特幣網絡分布式記賬的一致性,其核心思想是通過分布式節點的算力競爭保證數據的一致性和共識的安全性。比特幣系統的各節點基于各自的計算機算力相互競爭共同解決一個求解困難但是驗證容易的數學難題(求 2023 云安全聯盟大中華區版權所有18Hash的原象),最快解決該難題的節點將獲得下一區塊的記賬權和挖塊獎勵。共識流程如下:1)客戶端生成交易并向全網進行廣播;2)比特幣礦工節點將收到的交易放
45、到交易池中,交易池中的交易會按照一定的優先級順序打包進區塊;3)礦工節點不斷嘗試為自己的區塊找到一個具有足夠難度的工作量證明;4)當礦工節點找到了一個工作量證明,就向全網進行廣播該區塊;5)其它節點對收到的塊進行驗證:打包的交易是否合法、工作量證明是否有效、引用的父塊是否有效、時間戳是否有效等;6)若區塊有效且以該區塊結尾的鏈具有更大累積難道的工作量證明,則接受該區塊并在該區塊后繼續出塊。中本聰共識基于同步網絡假設,比特幣出塊間隔維持在 10分鐘左右,這就保證了區塊能夠在下一個區塊產生前傳播到幾乎所有節點。當拜占庭節點的算力不超過 50%時中本聰共識能夠保證系統的安全性。相比于傳統共識算法,中
46、本聰共識無法達成最終一致性,但由于每個區塊都引用了上一個區塊,因此每個區塊都是對之前所有區塊的確認,隨著確認區塊的增加,區塊被修改的可能性也不斷降低,從而實現統計意義上的最終一致性。Garay等人在 2015年對比特幣共識協議進行了理論分析,提出了 Bitcoin BackboneProtocol44,從理論層面解決了在只有隨機出塊節點競選而沒有顯式的 BFT委員會投票機制情況下,Bitcoin的“最長鏈法則(the longest-chain-rule)”的有效性。BitcoinBackbone Protocol最早給出了在半同步前提下,線性表結構區塊鏈的三個基本的共識特征:1)Common
47、 Prefix:共有前綴,任意一對網絡中誠實節點移除本地鏈(view)上最多k個最新塊以后,得到的剩余區塊相同,對應 BFT協議里面 Agreement 特性要求;2)Chain Quality:區塊鏈質量,在鏈上任意 k個連續塊里,由攻擊者生成的塊的比例有上界,對應 BFT協議里 validity特性要求;3)Chain Growth:區塊鏈單向增長率,任意誠實節點在先后兩個 time slot 之間觀察到鏈上生成的區塊數有下界,對應 BFT 的 liveness特性要求。1.4.1.2 GHOST為了保證安全性,比特幣將出塊間隔定為 10分鐘,從而導致其低吞吐量(10Tps)和長確認時延,
48、通過增加區塊大小及減小出塊間隔可以解決這個問題,但這將導致:(1)分叉率增高,導致安全性降低;(2)公平性被破壞,網絡延遲低的節點更有可能獲得獎 2023 云安全聯盟大中華區版權所有19勵;(3)攻擊成本降低,由于誠實節點的算力有一部分浪費在分叉上,惡意節點可以使用低于 51%的算力完成攻擊。圖4 Gost協議示意為解決這個問題,Sompolinsky 提出了 GHOST協議30,與中本聰共識協議相比,GHOS 協議修改了最長鏈規則,在每次分叉的時候選取擁有最重子樹的分叉節點,如圖 4所示。以太坊的共識協議是 GHOST 協議的一個變體,其出塊間隔做到了 15秒左右。1.4.1.3 Bitco
49、in-NGBitcoin-NG 是 Eyal 等人在 2016年提出的一個共識協議,其目的是提高比特幣交易的吞吐量31。Bitcoin-NG 將比特幣出塊分為了兩個階段,分別是 leader選舉及交易序列化,分別對應兩種區塊 Key區塊及 Micro區塊,如圖 5所示。Key區塊產生與比特幣區塊產生一樣,平均間隔約 10分鐘生成一個,需要工作量證明。一旦 Key區塊被挖出,挖出該區塊的礦工將負責生成后續的所有 Micro區塊,直到下一個 Key區塊被挖出。Micro區塊的生成不需要工作量證明,但為了防止生成的 Mircro區塊過多而阻塞網絡造成 Key區塊分叉率增高,協議規定了最大的 Micr
50、o區塊出塊速率。圖5 Bitcoin-NG區塊結構示意 2023 云安全聯盟大中華區版權所有20所有的交易都被打包在 Micro區塊中,Micro區塊需要被下一個區塊引用才有效,為了鼓勵當前的 Key區塊引用上一個 Key 區塊產生的 micro區塊,將 micro 區塊的交易手續費的 60%發放給下一個區塊,如圖 6 所示。圖6 Bitcoin-NG經濟激勵模型Micro區塊的產生不需要工作量證明,因此節點能夠快速廉價的產生微塊,從而惡意節點可以通過產生微塊分叉發起雙花攻擊。為解決這個問題,Bitcoin-NG 引入了“毒藥交易(Poison Transaction)”,允許后面的出塊者對惡
51、意節點舉報,舉報成功惡意節點的酬金將被罰沒,舉報者獲得惡意節點酬金的 5%作為獎勵。1.4.1.4 FruitChains由于比特幣挖礦難度較大,礦工為平衡收益易聯合形成礦池,造成算力集中,并且利用自私挖礦,惡意節點可以通過創造分叉提高自己的挖礦收益,損害了系統的公平性。為了解決這個問題,Pass等人在 2017年提出了 FruitChains協議32。如圖 7所示,FruitChains中將區塊分成了兩種,分別是正常區塊及水果(Fruits),生成正常區塊及水果都是通過尋找工作量證明完成,但是生成水果的難度要遠低于生成正常區塊的難度,由于水果與正常區塊具有相似的區塊結構及相同的工作量證明難題
52、,因此水果與正常區塊的挖礦可以同時進行。圖7 Fruitchains結構示意 2023 云安全聯盟大中華區版權所有21交易被打包在水果中,新挖出的水果只有被打包進正常區塊才有效,如果攻擊者通過藏匿區塊進行自私挖礦或者扣塊攻擊,由于包含交易的水果總是會被其它誠實節點產生的區塊打包,所有攻擊會失敗。隱私 FruitChains能夠有效地防止自私挖礦。FruitsChain中挖礦獎勵及交易手續費會平均分發給所有的 Fruits,由于產生 Fruits的難度要遠低于產生區塊的難度,礦工獲得回報的頻率將大大提高,從而不需要通過加入礦池來提高回報頻率,避免了算力集中化。1.4.1.5 SpectreSpe
53、ctre是 Sompolinsky等人在 2016年提出的基于有向無環圖(DAG)的共識協議33,其本質是利用區塊之間的引用關系對交易順序進行投票。不同于比特幣,Spectre沒有主鏈的概念,區塊可以同時引用多個之前的區塊,所有的區塊最終構成一個有向無環圖(DAG)。與比特幣最長鏈原則不同,當存在沖突區塊時,Spectre選擇擁有最多子區塊(投票)的區塊,如圖 8所示。圖8 Spectre結構示意因為 Spectre能夠同時處理多個區塊,其交易處理速度會明顯提高,但是由于 Spectre無法提高交易的全局序,僅能提供相對排序,因此其很難支持像智能合約這種對時許要求較高的功能。1.4.1.6 C
54、onfluxConflux是由 Chenxing Li 等人在 2018年提出的基于 DAG 的共識協議34,該協議解決了基于 DAG的共識算法無法提供全局序的問題。Conflux采用延遲排序交易的方式,先樂觀地并行執行交易(不論是否有依賴或者沖突)和出塊(不論是否會產生分叉),然后經過一段時間再全局地對所有的交易排序,并刪除那些有沖突的交易。2023 云安全聯盟大中華區版權所有22同 Spectre不同的是,Conflux采用了兩種關系定義區塊之間的關系:父邊(ParentEdge)和引用邊(Reference Edge),一個區塊只能有一條指向父節點的父邊,但可以有多條指向其它節點的引用邊
55、。其排序算法如下(如圖 9所示):1)按照 GHOST 規則排序只包含父邊的塊,形成一個樞軸鏈(Pivot Chain);2)根據樞軸鏈將區塊劃分成紀元(Epoch),然后對每個紀元里面的區塊進行拓撲排序。確定 epoch包含的區塊的原則是:區塊沒有被之前的 epoch包含且能夠通過樞軸鏈的父邊或者引用邊遍歷到;3)根據 happens-before原則對不同 epoch之間的塊進行排序圖9 Conflux結構示意1.4.1.7 NC-MAXZhang Ren等人對 PoW共識中孤塊的產生進行了分析35,將區塊廣播與新交易廣播并行化,有效地縮短了區塊廣播時延,進而降低了孤塊率。具體的,NC-M
56、ax 設計了一個交易兩步確認機制,在致密區塊中既包含新交易的哈希值(propose 交易),又包含老交易的哈希值(confirm 交易)。Propose交易的目的是通知其他礦工同步新交易,confirm交易是將交易打包上鏈,confirm 交易必須是前幾個塊中已經通知過的新交易,留給礦工足夠的時間對新交易進行同步。該機制實現了交易確認與交易同步的解耦,在同樣的出塊間隔下,孤塊率得到顯著的改善。此外,區塊鏈網絡的狀況并非一成不變,將出塊間隔設置為固定時間并不能充分利用網絡帶寬。NC-Max指出孤塊率是區塊鏈要穩定的目標,于是 NC-Max 改變了難度調整的策略,以孤塊率作為難度調整的依據。當孤塊
57、率大于預設的安全閾值時,難度上升,區塊間隔上升,從而使得孤塊率回落到安全閾值,反之亦然,從而使得 NC-Max 的吞吐量能夠達到安全閾值下網絡所能承載的最大吞吐量。1.4.2 PoS類共識PoW共識算法需要消耗大量的能源,為了解決這個問題,一位名為 Quantum Me-chanic 的數字貨幣愛好者在比特幣論壇首次提出了基于權益證明(PoS)的共識算法36。2023 云安全聯盟大中華區版權所有23權益是指節點或用戶擁有的資產(如代幣),并根據用戶擁有資產比例決定其成為下一個區塊生產者的概率。擁有資產比例越高,其成為生產者的概率就越大。PoS 一定程度上解決了 PoW 算力浪費的問題,并為共識
58、優化帶來了新思路:通過代理人制度縮小共識范圍,從而縮短達成共識的時間,提供系統的吞吐量。1.4.2.1 PeercoinPeercoin是由 King等人在 2012年提出的,首次引入了權益證明(PoS)概念37。Peercoin將區塊分成了兩種,分別是 PoW區塊與 PoS區塊。PoW區塊生成同比特幣一樣,需要工作量證明。PoS區塊的生成則需要消耗幣齡(幣的持有時間),節點擁有的幣數量越多,擁有幣的時間越長,其被選為出塊者的概率越大。具體的,Peercoin將隨機散列運算的搜尋空間與幣齡掛鉤,限制了搜尋次數,避免了因大量計算而造成的能源消耗。但 Peercoin 的幣齡機制存在被攻擊的可能,
59、該機制無法充分激勵節點始終保持在線狀態,節點可以先保持離線狀態,在積累一定的幣齡之后才參與共識網絡,然后再次離線。1.4.2.2 Casper FFGCasper FFG 是由 Buterin 和 Griffith 在 2017年提出的基于 PoS的共識協議38,其目的是為以太坊的 PoW共識協議引入即時確定性(Instant Finality)。Casper FFG 許多設計受到 PBFT 的啟發,并可以被視為改良后的 PBFT 它繼承了 PBFT 的重要設計,同時添加了新的機制并簡化了若干規則。在 Casper FFG 中,區塊產生仍然依靠以太坊的 Ethash工作量證明算法,每隔一定高度
60、(如 50)的區塊被稱為檢查點(Checkpoints),檢查點組成檢查點樹(CheckpointTree),驗證者需要通過投票對檢查點形成共識,投票的內容是由兩個不同高度的檢查點組成的連結(Link),其投票過程與 PBFT 類似。節點可以通過抵押以太幣成為驗證者,節點被選中成為檢查者的概率與抵押以太幣的數量成正比,被選中的節點需要經過網絡中現有驗證者的共識才能最終成為驗證者。為了使 Casper FFG具有抵抗共謀的能力,系統會對驗證者的違規行為做出懲罰,違規投票的驗證者的押金會被罰沒。由于驗證節點集合會動態地隨著時間變化,驗證者的某些違規行為無法進行歸責,為此 Casper FFG引入了
61、縫合機制(Stitching Mechanism),確保每個錯誤都能夠被歸責。Casper FFG 更多的是作為一個過渡協議,使得以太坊能夠從 PoW成功過渡到 PoS,目前在研究中的還有 Casper CBC 版本,可以視為以太坊切換到 PoS后的一個更好的版本。2023 云安全聯盟大中華區版權所有241.4.2.3 Snow WhiteSnow White是由 Bentov 等人在 2016年提出的基于 PoS的共識協議39,同比特幣類似,Snow White出塊也是需要找到某個低于目標值(target)的 hash值的原象。不同的是,Snow White中節點只能每隔一段時間嘗試一次尋找
62、(通過將時間作為唯一隨機源實現),此外 target 的大小與參與者抵押的押金成正比,從而實現參與者出塊概率與抵押押金成正比。Snow White 采用與 Fruitchains32相同的區塊結構機激勵機制,挖礦收益交易放在水果中,水果放在區塊中,將連續幾個區塊的獎勵和其中包含的交易費平均分給水果的生產者,實現了公平性。Snow White基于弱同步假設,并采用睡眠模型(sleepy model)的網絡模型,即假設節點不會保持永久在線,可能在某段時間內離線,又在某段時間內在線,間斷的參與共識,該模型中節點的狀態更加符合現實網絡中節點的狀態,因此適應性更廣。1.4.2.4 OuroborosKi
63、ayias等人在 2017年提出的共識協議 Ouroboros 40并對其安全性給出了形式化的證明,Ouroboros是第一個可證明是安全和健壯的 POS算法。Ouroboros協議基于同步網絡假設,其本質是通過多方運行 coin-tossing協議生成隨機數種子,用以隨機選取出塊節點及下一輪的出塊節點候選人集合。Ouroboros將時間劃分為一個個的 epoch,每個 epoch又被劃分為多個 slot,每個 slot產生一個區塊,如果產生的區塊非法或者出塊者不在線,則該 slot會被跳過。Ouroboros假設每個 epoch內權益的分布是不變的,即權益是根據每個 epoch開始前的歷史計
64、算,當前 epoch權益分布的變化只能在以后的 epoch中體現。在每個 epoch的開始階段會有一個該 epoch的創世區塊,記錄了該 epoch的出塊節點候選人及隨機種子,但該創世區塊并不上鏈。隨機種子是在上一個 epoch中通過多方的 coin-tossing協議生成的。Epoch中的每個 slot都會從該 epoch出塊節點候選人中隨機選擇一個出塊節點,候選人被選中的概率與其權益的占比成正比,即=,,其中 Se為候選人集合,為該 epoch的隨機種子,j 代表第 j個 slot。為了確保激勵出塊節點始終遵循該協議,Ouroboros在每個 slot除會選出一個單一的出塊節點外,還會選出
65、多個稱為“背書節點”(endorsers)的驗證節點。背書節點會對交易的正確性進行檢查并為其背書,區塊中所包含的交易必須均已由背書人背書的情況下才有效。此外為了激勵除出塊節點外的其它節點在線,Ouroboros會按貢獻度為權益持有者發放獎勵。2023 云安全聯盟大中華區版權所有25但原始的 Ouroboros協議存在問題:(1)由于偽隨機函數是公開的,惡意節點可以在epoch開始時推測出整個 epoch中所有的出塊節點,從而進行針對性的賄賂或 DDoS攻擊;(2)用于計算隨機種子的安全多方計算的計算協議性能會隨參與節點的增多而降低;(3)其安全性論證基于同步網絡模型假設。為了解決這些問題,Da
66、vid等人在 2018年提出了Ouroboros Praos協議41。Ouroboros Praos協議的主要改進是采用可驗證隨機函數(VRF)代替公開偽隨機函數進行出塊節點的選舉。節點通過可驗證隨機函數 VRF 產生可驗證隨機數,如果其數值低于某個目標值,則可確定被選中為出塊節點,出塊節點在生成區塊時會附帶產生的隨機數和證明,網絡中其他節點可以據此確認其合法性。因為每個節點隨機函數是獨立的,所以Praos并不能像原始 Ouroboros那樣保證每個 slot 都剛好有且只有一個出塊節點,可能沒有人選中,也可能選中多個。不過 praos已經證明,在半同步網絡模型上其依然可以保證原來的安全屬性。
67、同時 praos的 slot 時長也比原始協議要低。Badertscher等人對 Ouroboros Praos協議進行了改進,并參考了 Snow White協議針對節點離線的情況的設計,提出了 Ouroboros Genesis協議42,解決了困擾 PoS的長鏈攻擊問題(Long-range Attack),并基于 UC Framework證明了其安全性。Ouroboros Genesis 保留了 Praos協議里 VRF的部分,考慮到 Praos的 VRF會像 PoW一樣可能在同一個 slot 里選出多于一個的合法出塊節點而導致分叉,Ouroboros Genesis 修改了基本的最長鏈原
68、則(Longest-chain-rule),新節點在加入網絡時,需要從不同節點獲得多個鏈,并進行對比,最終選定的區塊鏈需要與其他鏈具有共同前綴且是最長鏈。這個新的設計保證新加入節點或者掉線節點能夠在不引入需要附加信任機制的鏈上檢查點(Checkpoint)的情況下正確自啟(Bootstrap)。Kerber等人在 2019年提出了 Ouroboros Crypsinous43,首次對支持隱私保護的 PoS區塊鏈協議進行了形式化分析,并引入 SNARKs 及 key-private forward secure encryption,使其能夠更好的抵抗適應性攻擊(Adaptive Attacks
69、)。Ouroboros Crypsinous與 OuroborosGenesis協議基本一致,區別主要在于出塊節點的選取及交易處理。1.4.3 PoSpace類共識空間證明(PoSpace)是為了解決 PoW算法能源浪費提出的,節點需證明其在一定的磁盤空間中存儲了特定的數據,節點被選中成為出塊節點的概率與其所能證明的磁盤空間大小成正比。Burst是首個基于空間證明的區塊鏈項目??臻g證明最大的問題是,因為挖 2023 云安全聯盟大中華區版權所有26礦不需要付出代價,某個擁有大量磁盤資源的節點可以不費代價的覆蓋整條鏈,從這條鏈最初的創世區塊開始,把整個鏈重新挖一遍,獨吞所有的區塊獎勵。1.4.3.
70、1 PermacoinPermacoin 是 Miller 等人在 2014年提出的共識協議45,Permacion 本質上仍是一個 PoW共識協議,不過為了使挖礦變得有“價值”,Permacoin 會強制礦工存儲一部分數據,并在出塊時向其它節點證明一直存儲著該數據,否則將無法出塊。1.4.3.2 SpacemintSpacemint是由 Park等人在 2015年提出的基于空間證明的共識協議46,Spacemint詳細分析了 PoSpace協議所存在的兩個問題 Grinding和 mining multiple chains,并給出了解決方案。同 Permacoin不同的是,Spacemin
71、t 存儲的是無用數據,但是避免了因不斷“搜尋”而引起的能源浪費。Spacemint的空間證明本質上是求解單向函數的逆,逆的求解很難在短時間內通過純計算完成,但通過將函數的象及原象預先存儲在磁盤上,通過查找磁盤就可以在極短的時間內找到答案,而找到答案的數量(或質量)與所用的磁盤空間成正比,從而實現了容量證明。首先,Spacemint劃分了一段段固定的時間,每一段固定時間內只能出一個塊,其出塊過程為:每一段固定時間都有對應的挑戰(challenge),礦工根據挑戰在磁盤上搜尋對應的答案,找到答案的礦工會廣播自己的答案并與其它礦工的答案進行對比,擁有最高質量的答案的礦工獲得出塊權。由于 Spacem
72、int 挖礦不需要代價,擁有大量磁盤空間的惡意節點可以私下構造一條具有更高質量(Chain Quality)的鏈而覆蓋掉原有的鏈(Challenge-grinding Attack),為了解決這個問題,Spacemint 在計算 chain quality時加入了衰減因子,使新的塊占有更大的比重,從而增加了攻擊難度。此外對應同時在分叉上出塊,Spacemint 引入了懲罰機制,促使礦工在單一分叉上出塊以加快收斂速度。1.4.3.3 Chia盡管 Spacemint 在計算 chain quality時加入了衰減因子企圖解決 challenge-grindingattacks,但仍然有被攻擊的可
73、能,為了解決這個問題,Bram Cohen利用可驗證延遲函數,將空間證明與時間證明結合,在其設計的 Chia協議中,創造性地提出了時空證明機制(Proof of Space And Time)47。2023 云安全聯盟大中華區版權所有27可驗證延遲函數(VDF)使一類數學函數,在允許同時使用少量 CPU 進行并行計算的情況下,能夠使得該函數的計算需要至少一段已知的時間,驗證者能夠對函數的輸出結果進行驗證,一般驗證時間要遠低于計算時間。同 Spacemint 一樣,礦工仍需要對challenge在其磁盤空間中搜尋答案,擁有最高質量答案的節點獲得出塊權,不同的是出塊節點會將塊廣播給 VDF服務器,
74、VDF服務器需要提供一段時間流逝的證明,以證明兩相鄰塊之間間隔了足夠的時間,系統中會有多個 VDF服務器,最先完成 VDF計算的服務器進行最終出塊。通過引入時間證明機制,Chia解決了 challenge-grinding attack,因為攻擊者如果想覆蓋整條鏈的話,其不但要付出存儲空間資源,還需要 CPU 的時間資源,而后者將使攻擊很難進行。1.4.3.4 FilecoinFilecoin是 Benet等人在 2018年提出基于容量證明的區塊鏈協議48,其共識機制與Chia、Spacemint 等共識機制最大的不同是,其磁盤中存儲的是有用數據,避免了磁盤資源的浪費。Filecoin的共識機
75、制是預期共識(Expected Consensus,EC),Filecoin的礦工在每一輪里會獨立的檢查是否滿足:如果滿足則獲得出塊權,其中 H為 hash函數,L為函數值位數,為第 t 輪的全網統一隨機數,為第 t 輪礦工 i 的存儲空間,為啥出塊節點的選取不可預測,定義為:礦工獲得出塊權力的概率與礦工已擁有的有效存儲空間占全網存儲空間的比重成正比。因為計算相互獨立,因此 Filecoin會出現在 t輪沒有節點或有多個節點獲得出塊權的情況。此外,Filecoin設有抵押機制,會強制礦工選擇一條鏈,對同時挖多個鏈的礦工進行懲罰,有效促進礦工收斂。為計算礦工算力及存儲的有效性,保證 EC共識機制
76、的運行,Filecoin協議中采用了復制證明(Proof-of-Replication)和時空證明(Proof-of-Space-time)兩種算法,其中復制證明用來驗證礦工已經存儲了某文件,時空證明用證明礦工一直存儲了該文件。2023 云安全聯盟大中華區版權所有28復制證明的目的是防范三種常見的攻擊:女巫攻擊,外源攻擊和生成攻擊,以保證礦工實際存儲的數據大小與其聲明存儲的數據大小一致。時空證明可以理解為持續的復制證明,即礦工必須不斷的生成證明,并在一個提交周期內提交存儲證明。如果存儲服務商沒有在提交周期內連續及時提交證明,會被系統扣除部分代幣。生成時空證明的過程跟復制證明非常相似,只是時空證
77、明的輸入是上一次生成的證明的輸出,從而形成證明鏈,利用時間戳錨定這些證明鏈,這樣即使驗證者(Verifier)不在線,也能夠在將來去驗證礦工在該段時間內生成了證明鏈,PoSt會被提交到鏈上用來產生新的數據區塊。1.4.4 proof of elapsed time消逝時間證明是基于硬件芯片執行某個命令的等待時間實現的,其實質是利用可信硬件(TEE)產生隨機數決定下一個區塊生產者。在 Hyperledger Sawtooth項目中,參與者使用英特爾可信芯片 Intel SGX 中的“飛地”模塊,根據預定義的概率分布生成一個隨機的等待時間,等待時間最短的節點被選為領導節點,SGX 可幫助節點創建區
78、塊、生成該等待時間的證明,而這種證明易于被其他 SGX 節點驗證。Zhang 等人在 2017年提出了資源高效利用挖礦(Resource-Efficient Mining,REM)的共識協議 PoUW49。在 PoUW協議中,CPU 在承擔原來的工作之外,還可以同時承擔區塊鏈的工作,該協議核心仍是采用可信硬件來計算 PoW,用時最短的節點將獲得出塊權。1.4.5 混合共識機制:單一委員會混合共識機制本質上是將共識范圍縮小以提高共識效率。經典的分布式共識機制共識效率高、確認延時低,但由于存在女巫攻擊,無法適用于開放的網絡環境?;旌瞎沧R機制將經典分布式共識機制與區塊鏈共識機制相結合,即采用 PoW
79、 或 PoS 的方式進行委員會選舉解決女巫攻擊,在委員會內部運行經典分布式共識機制,提高共識效率?;旌瞎沧R機制可分為單一委員會制度或者多委員會制度,采用單一委員會的混合共識機制選舉一個委員會負責全網所有交易的處理,而采用多委員會的混合共識機制選舉多個并行運作的委員會,將全網劃分為多個片區,分片處理網絡中的交易(扁平),或者對系統進行分層,由不同的層處理不同的邏輯(垂直)?;旌瞎沧R機制的一般過程如下:1)委員會成員選舉?;旌瞎沧R機制首先需要選舉一個小型的委員會,為防止女巫攻擊,委員會成員通過 PoW 或 PoS 的方式選舉,節點被選中的概率與節點所擁有的算力或持有的權益成正比。2)委員會成員間共
80、識。委員會成員間運行改進的 PBFT協議或類似算法,實現委員會內部的拜占庭容錯,進而產生區塊。2023 云安全聯盟大中華區版權所有293)廣播區塊。委員會成員將生成的區塊廣播至全網,使得網絡中非委員會的節點和客戶端收到新產生的區塊,更新交易和區塊鏈。4)委員會重配置。為防止敵手腐化/DDos委員會成員,在工作一定時期后,委員會成員應當更新,可以一次更新一個或多個成員,也可以全部更新。如果更新過慢,則會給敵手 DoS 攻擊提供穩定有效的目標,但如果更新過快,更新委員會的成本更高且需要激勵新一輪被選中者持續在線。單一委員會的混合共識機制面臨的安全問題主要是惡意節點干擾委員會選舉和重配置過程。1.4
81、.5.1 PeerCensus比特幣共識機制較弱,只能提供最終一致性,導致其交易確認速度過慢。為了解決這個問題,Decker等人在 2016年提出了共識協議 PeerCensus 50,首次將經典分布式一致性算法 PBFT 與 PoW算法相結合,其主要想法是解耦區塊創造過程和交易確認過程,以便共識速度可以顯著提升。如圖 10所示,PeerCensus底層仍然是一般的區塊鏈(如比特幣),礦工挖到區塊后將區塊提交到上層的 Chain Agreement(CA),Chain Agreement 運行 PBFT協議對區塊確認,確認后的區塊再返回給底層區塊鏈。節點加入委員會需要提交工作量證明并經過委員會
82、其它成員共識后才能加入。但 PeerCensus 委員會管理存在一定問題,它采用離開檢測機制來判斷節點是否離開。正常節點通過發送 ping 消息判斷其它節點是否離線,如果離線則發起對該離線節點的“離開”提議,提議通過委員會共識后,委員會才完成重配置。這樣的問題是,如果惡意用戶不斷制造“離開”提議,整個系統的運行效率將大大降低。圖10 PeerCensus結構示意 2023 云安全聯盟大中華區版權所有301.4.5.2 ByzCoinByzCoin是 Kogias等人在 2016年提出的51,是首個能夠支持比特幣中工作量證明的基于動態成員關系的拜占庭共識協議。Byzcoin將 PoW與 PBFT
83、協議相結合實現了交易的即時確認并能夠提供前向安全性。同時 Byzcoin通過引入聯合簽名方案減小 PBFT輪次的開銷,使其能夠支持更多的共識節點。ByzCoin借鑒了 Bitcoin-NG 的思想,將區塊分為關鍵塊(Keyblock)和微塊(Microblock),關鍵塊決定委員會成員和領導者。首先 ByzCoin定義了一個窗口大?。?44個關鍵塊或者 1008個關鍵塊),窗口會隨著關鍵塊的產生不斷往前移動,處于窗口內的關鍵塊的生產者組成委員會,成員的投票權由其產生的關鍵塊的比例決定。同Bitcoin-NG 一樣,一旦一個節點生成了關鍵塊,它將成為首領,被允許以固定速率生成微區塊,微區塊包含交
84、易等信息。Byzcoin架構如圖 11所示。圖11 Byzcoin架構示意委員會成員采用改進的 PBFT算法對微塊進行共識,為了提高效率,ByzCoin 利用聯合簽名(Scalable Collective Signing)將 PBFT的通信復雜度降到了 O(n),使其能適用于規模較大的共識節點。此外為了激勵委員會成員保持活躍,ByzCoin會將部分挖礦獎勵分發給參與共識的委員會成員。1.4.5.3 SolidaSolida是由 Abraham等人在 2016年提出的基于 PoW和 BFT 共識的混合共識機制52。相比于 PeerCensus及 ByzCoin,Solida給出了更加詳細的協議
85、設計,尤其是委員會成員的重配置機制,解決了重配置時可能出現的問題。此外,Solida嚴格證明了當惡意節點算力不超過 1/3時,協議能夠保證安全性及活性。2023 云安全聯盟大中華區版權所有31礦工可以通過求解 PoW謎題加入委員會,一旦找到一個對應的 PoW,礦工可以向委員會成員廣播該 PoW,委員會成員通過運行重配置協議,將該礦工加入到委員會中。Solida 的領導者選舉方式借鑒了 Paxos 的思想,委員會每個成員都會被賦予一個等級元組(c,e,v),并依次按 c、e、v進行排序,其中:c 代表委員會序號,每當新節點通過委員會重配置加入到委員會中后,委員會中節點的等級元組會由(c,e,v)
86、變為(c+1,0,0),新加入的節點成為委員會領導者;e 代表一個 PoW 對應的生存時期,如果有節點新找到 PoW,則其等級元組(c,e,v)變為(c,e+1,0),新找到 PoW 的節點成為領導者。v 的含義是視圖,當現任領導者停滯不前,利用函數 L(c,e,v)=H(c,e)+v mod n在委員會內部選出新的領導者,領導者元組由(c,e,v)變為(c,e,v+1)。領導節點負責打包交易并創建區塊,委員會成員通過運行改進的 PBFT協議對區塊進行共識,除此之外,委員會成員還需對重配置事件進行共識,以順利更新委員會成員及領導節點。1.4.5.4 Hybrid Consensus混合共識 H
87、ybrid Consensus是由 Pass等人在 2017年提出的共識機制53,將經典共識與區塊鏈共識結合,提高非授權網絡下的交易確認速度。Hybrid Consensu證明了在異步或者半異步假設下(網絡傳播延遲上限不可知),非授權網絡下的共識無法保證一致性及活性。Hybrid Consensus通過對系統進行更強的假設,通過混合共識機制實現了交易的快速響應,即交易的確認時間與網絡真實時延有關,而與網絡時延上限無關,協議的一致性及活性也被嚴格證明。在 Hybird Consensus中,底層鏈成為 snailchain,是一條 PoW鏈,委員會的成員由最近出塊的礦工組成,委員會成員之間運行
88、DailyBFT 協議對交易進行確認。Hybrid Consensus解決了 ByzCoin中存在的因自私挖礦導致誠實節點維護的關鍵塊鏈質量下降的問題,即在自私挖礦存在的情況下,要想誠實節點產生的關鍵塊的比例超過2/3,以使委員會中有足夠多的誠實節點,那么敵手所占的算力不能超過 1/4。1.4.5.5 ThunderellaThunderella是 Pass等人在 2018年提出的混合共識機制54,與其它混合機制不同的是,委員會成員之間并不運行完整的 BFT類共識協議,如果要發生視圖切換(ViewChange)及狀態恢復,則通過底層的 PoW協議實現。Thunderella提出了樂觀響應的概念
89、,2023 云安全聯盟大中華區版權所有32即在樂觀情況下,由上層的委員會快速處理交易,而一旦遭到攻擊,則退回到底層 PoW協議進行安全處理。Thunderella的委員會選舉可以通過 PoW進行也可以通過 PoS進行。如果通過 PoW進行,則最新找到 PoW的 n個節點成為委員會成員,并按順序依此替換老節點。如果通過PoS的方式進行選舉,節點需要現在底層鏈上抵押一部分保證金,系統隨機從抵押保證金的節點中選擇 n個節點作為委員會成員,選舉方法與 snow white類似。如果領導節點誠實且委員會中誠實節點數量超過 3/4,則系統處于樂觀期,此時客戶端將交易提交給領導節點,領導節點對交易進行排序并
90、廣播給其他委員會成員,委員會成員對交易進行簽名,如果超過 3/4個委員對交易進行了簽名,則交易被最終確認。此外領導節點會定期的發送快速通道的哈希值給委員會成員確認,如果確認成功則該哈希值會作為心跳標記(Heartbeat)寫入底層鏈,心跳機制保證了在回退時只會影響最后一個心跳標記后的交易。如果不滿足樂觀條件則系統進入寬限期(如 Yell Transaction 長時間未被確認,心跳標記長時間未出現),此時委員會成員停止對來自領導節點的消息進行簽名,但允許節點發布經過公證但沒有包含在最近心跳標記中的交易到慢速鏈上,寬限期包含 k個區塊,寬限期結束后,節點輸出所有已確認和未確認交易,進入底層區塊鏈
91、確認期。底層區塊鏈確認期采用底層鏈共識機制,所有的交易處理和傳統區塊鏈沒有區別。系統會等待足夠的區塊鏈數量后,重新進入樂觀期,重啟快速通道。Thunderella協議總體的安全性繼承于底層鏈的安全性,底層鏈基于同步假設,實現了1/2的容錯性,為部分同步假設下的上層 BFT共識提供了 1/2的容錯能力。1.4.5.6 AlgorandAlgorand是 Gilad等人在 2017年提出的基于同步假設的混合共識機制,Algorand將PoS共識與經典分布式一致性算法相結合,并利用可驗證隨機數(VRF)進行委員會秘密選舉,避免了被定向攻擊的可能。同經典的 PoS共識一樣,節點需要先抵押一定數量的代幣
92、才能參與到共識中。在每一輪共識開始時,每個符合條件的節點都可以通過 VRF獨立驗證自己是否是潛在的領導節點或委員會成員,即如果,1,1 1/則成為本輪的領導節點,如果滿足,1,1/則成為本輪委員會成員,其中 H為哈希函數,_ 為簽名函數,1是第 r-1輪的種子,為第 r-k輪符合條件的公鑰 2023 云安全聯盟大中華區版權所有33數,k為回溯系數。如果有多個候選 leader,最終上述哈希值最小的 leader 將在后續的共識中成為本輪最終的 leader。委員會成員通過運行改進的分布式一致算法 BA*對區塊進行共識。BA*包括分級共識協議(Graded Consensus,GC)和二元拜占庭
93、一致協議(Binary Byzantine Agreement,BBA),Algorand 利用 GC將對整個區塊哈希值的共識轉化為對二元數值的共識,并通過BBA 對二元數值達成一致從而確認本輪區塊。BBA 可以在誠實節點超過 2/3的情況下快速達成共識,其具體過程是一個 3 步循環,循環中每一步都有 1/3的概率達成共識。盡管概率非常低,Algorand仍然有可能發生分叉。如果發生分叉,Algorand采用中本聰共識中的最長鏈法則進行恢復。1.4.6 混合共識機制:多委員會多委員會的混合共識機制是通過設立多個委員會,每個委員會負責不同的任務,以提高交易的處理能力,按委員會的拓撲結構不同,可分
94、為分層結構(如 RSCoin,ELASTICO)和扁平結構(如 Chainspace,Omniledger)。相比于單委員會機制,多委員會機制在選舉委員會成員后,需要將新選舉的委員會成員分配到不同委員會中,按照委員會成員分配方式的不同可分為通過鏈上隨機數分配(如 Omniledger)、通過投票分配(如 Chainspace)及通過 PoW分配(如 ELASTICO)。1.4.6.1 ELASTICOELASTICO 是 Luu等人在 2016年提出的混合共識機制。ELASTICO 的核心思想是把網絡中的節點分成多個小的委員會,每個委員會處理互不相交的交易集合。這些不相交的交易集被成為分片(S
95、hard)。委員會選舉是通過 PoW進行的,完成 PoW的節點隨機分到某個委員會中,由于每個委員會中的節點數量足夠小,所以委員會內部可以運行經典的拜占庭共識協議。由于委員會之間交易處理是并行的,所以 ELASTICO 幾乎完成了對吞吐量的線性擴展。為了降低委員會成員建立連接時的通信復雜度,ELASTICO 設有一個特殊的委員會,稱作目錄委員會。目錄委員會為其它委員提供委員會分配委員會成員身份和委員會成員身份列表服務。同其它普通委員會一樣,目錄委員會也有 c個成員,前 c 個找到工作量證明的節點進入目錄委員會。目錄委員會滿員之后,后續找到工作量證明的節點會將工作量證明及身份信息發送給所有目錄委員
96、會成員,目錄委員會根據提交的哈希值將其分配進相應的委員會。當所有委員會成員到達 c 之后,目錄委員成員會會把每一個普通委員會的成員列表廣播給相應的委員會成員。2023 云安全聯盟大中華區版權所有34目錄委員會中拜占庭節點比例最多為 1/3,因此每個普通委員會成員將會收到最少2c/3個正確的成員列表,把收到的所有身份做了一個并集,就創建了一個至少擁有 c 個委員會成員的視圖。每個委員會內部運行 PBFT 算法,就本輪自身委員會內部交易集合達成共識,并將交易集合和對其確認簽名發送至最終委員會,最終委員會是從所有普通委員會中隨機選出的一個委員會。最終委員會會收集所有普通委員會確認的交易集合,并組成本
97、輪的總區塊,其中交易是所有之前收到的有效交易集的并集,然后內部運行 PBFT協議,達成共識后將總區塊廣播到網絡中。此外,最終委員會運行隨機數生成協議,生成用于下一輪尋找 PoW的隨機數集合,該過程仍需要運行 PBFT協議,以達成對隨機數集合的共識。雖然 ELASTICO 極大的提高了區塊鏈系統的吞吐量,但與其它的混合共識機制相比,其交易延遲過大。1.4.6.2 OmniledgerOmniledger是 Kokoris-Kogias等人在 2018年提出的混合共識機制57,其設計與ELASTICO 大致相同,但是解決了 ELASTICO 存在的幾個問題:(1)分片較小,在抵御25%攻擊時有較高
98、的失敗率;(2)選舉不是強抗偏見的,礦工可以選擇性的忽略 PoW來得到特定的結果;(3)交易確認延遲較高;(4)不能保證跨分片交易的原子性,易鎖死。如圖 12所示,Omniledger 有一條身份鏈和多條交易鏈組成。身份鏈用于記錄協議每個時期參與的節點和其對應的分片信息,每個時期更新一次。交易鏈用于記錄交易信息。Omniledger使用 RandHound協議,將所有的驗證節點分成不同組,并隨機的將這些組分配到不同的交易鏈,驗證以及共識區塊。圖12 Omniledger結構示意Omniledger委員會選舉方式與 ByzCoin 類似,即選取大小為 n的滑動窗口,區塊處于滑動窗口內的出塊者選為
99、委員會成員。委員會通過可驗證隨機數(VRF)選出領導者,領 2023 云安全聯盟大中華區版權所有35導者啟動隨機數生成算法 RandHound生成隨機數 r并廣播,其它委員根據隨機數 r確定自己所在的分片,組成小委員會。小委員會之間運行 ByzCoinx協議對交易進行確認,ByzCoinx協議相比于 Byzcoin協議具有更好的健壯性但是犧牲了部分性能。Hydrand58 改進了 Omniledger 使用的隨機數生成算法改進,采用公開可驗證秘密,確保了隨機數的不可預測性、抗偏置性和公開可驗證性,并且確保了隨機數的持續生成。1.4.6.3 ChainspaceChainspace是由 Al-B
100、assam等在 2017年提出的混合共識機制59,Chainspace 將智能合約的執行和驗證步驟分離開來,并且提出了跨片交易處理的原子承諾協議(ShardedByzantine Atomic Commit,S-BAC),S-BAC 的實質是 BFT 和原子承諾(Atomic Commit)的結合。每個分片委員會內部運行 BFT協議,對客戶端提交事務進行決策,以暫時決定是在本地接受還是中止事務,并將其本地決策預接受(pre-accept)或預中止(pre-abort)廣播給其他相關分片。每個分片收集來自其他相關分片的響應,如果所有分片都使用預接受響應則提交事務,否則中止事務。這些分片通過向用戶
101、發送接受(accept)或中止消息(abort),將此決定傳遞給用戶以及輸出分片,如圖 13所示。圖13 Chainspace示意1.4.6.4 RapidChainRapidChain是 Zamani 等人在 2018年提出的混合共識協議60。RapidChain基于同步網絡假設,最多能容納 1/3拜占庭節點。Rapidchain主要包含三個階段,分別是啟動階段(Bootstrapping Phase)、共識階段(Consensus Phase)和重配置階段(ReconfigurationPhase)。啟動階段只在 RapidChain開始時運行一次,這個階段是為了創建一個初始隨機源,并隨機
102、選出一個特殊的委員會,叫做參考委員會(Reference Committee),再由這個參考委 2023 云安全聯盟大中華區版權所有36員會對節點進行隨機分配,構成一個個分片委員會。該階段使 RapidChain不需要任何可信第三方和可信啟動的存在,便能夠完成協議的初始化。RapidChain將時間劃分成了一個個 epoch,每個 epoch由共識階段和重配置階段組成,共識階段又分為了多個 round,即委員會在一個 epoch內可以進行多輪共識。在共識階段開始時,委員會會利用當前 epoch的隨機種子隨機選擇出領導節點,然后委員會成員運行實用同步拜占庭容錯協議,對交易進行共識。重配置階段會對
103、委員會成員進行更新,網絡中的其它節點可以通過尋找 PoW加入委員會,PoW須依賴于上一個 epoch的隨機源,參考委員會驗證收到的 PoW,如果驗證通過則通過有界布谷鳥規則(Bounded Cuckoo Rule)將節點隨機分配到各個委員會中。有界布谷鳥規則可以使新節點盡量替換掉原本委員會中不活躍的節點。此外,在重配置階段,參考委員會的成員還會運行 DRG 協議(Distribute RandomGeneration Protocol)生成一個無偏差隨機數并達成共識。RapidChain共識階段采用同步網絡模型,交易確認時延與網絡真實時延無關,只與網絡延遲上限有關,導致交易確認不能滿足快速響應
104、特性,但 RapidChain 協議其他部分采用部分同步網絡模型,能夠滿足快速響應特性。1.4.7 其它除此之外,基于 Proof-of-X的共識機制還有 Proof-of-Burn(PoB)、Proof-of-Personhood、Proof-of-authority等共識機制,但應用都不廣泛。恒星共識協議(Stellar ConsensusProtocol,SCP)提出了一種聯邦拜占庭協商協議(Federated Byzantine Agreement,FBA),FBA 的健壯性來源于群體切片,即由單個節點的個體信任決策共同決定系統級別的仲裁63。2 共識算法安全性分析2.1安全建模2.1
105、.1 安全屬性一個安全的共識算法應滿足:(1)一致性(一致性(Agreement/Consistency/Integrity),所有的誠實節點要么都接受某個值,要么都拒絕某個值;(2)終止性(終止性(Termination),所有的誠實節點最終都會對某個值達成共識;2023 云安全聯盟大中華區版權所有37(3)合法性(合法性(Validity),所有誠實節點達成共識的值都是由誠實節點提議的。在區塊鏈共識算法中,更多提及的是安全性(Safety)及活性(Liveness),這兩者本質上是等價的,正確性和一致性決定了安全性,而終止性就是活性。另一個評價共識算法比較重要的特性是彈性(Resilien
106、cy),即最壞情況下最多能對多少惡意節點容錯、最多需要幾輪共識才能終止、最大通訊復雜度是多少等。對于一致性,又可分為強一致性(Strong Consistency)與弱一致性(WeakConsistency/Eventual Consistency),強一致性是指共識結果是確定的,具有強一致性的共識被稱為確定性共識,大部分經典的共識算法都是強一致性的。弱一致性是指共識結果是不確定的,只是隨著時間的推移其結果被推翻的概率會越來越小,大部分區塊鏈共識算法都是弱一致性的。相比于弱一致性共識算法,強一致性共識算法能夠保證前向安全性并實現更低的確認時延。此外,對于區塊鏈共識算法,還有一些重要的性質64:
107、(1)公共前綴(Common Prefix),即對任意兩個誠實節點所提交的區塊鏈,一定能找到某個正整數 k使得它們 0 到 k個區塊是相同的;(2)鏈質量(Chain Quality),任意誠實節點的鏈除去最新的 k0后,任意 k 個連續的區塊中,惡意區塊的比例不超過安全參數 u;(3)鏈增長(Chain Growth),對于任意輪 r r0,假設誠實節點 P 在第 r 輪的輸出的區塊鏈為 C1,在第 r+s 輪輸出的區塊鏈為鏈 C2,則滿足 2 1 ,其中 t、r0、s 為安全參數;(4)公平性(Fairness),誠實節點產生的區塊所占主鏈比例與其算力(或者權益)占比一致;(5)前向安全性
108、(Forward Security),達成一致的共識結果不能在之后被推翻;(6)快速響應特性(Responsiveness),是指交易確認時間與網絡真實時延有關,與網絡時延上限無關。(7)自一致性(Future-Self Consistency),在任意兩個時刻 r、s,任意誠實節點在r、s時刻,除最后 t 個區塊外剩余區塊不相同的概率可以忽略不計。2.1.2 網絡模型在共識網絡中有主要有兩種網絡結構,分別是點對點通道(Point-to-Point Channels)及點到點擴散(Peer-to-Peer Diffusion)。在點對點通道傳輸模型中,節點分別與其它各節 2023 云安全聯盟大
109、中華區版權所有38點建立可靠的通道,直接進行消息傳輸,在傳輸過程中,消息的發送方與接收方均能識別對方的身份信息,該傳輸模型也叫做可靠信息傳輸(Reliable Message Transmission)。在點到點擴散傳輸模型中,節點只與網絡中的部分節點建立連接,消息通過廣播的方法發送給與其連接的節點,收到消息的節點再以同樣方式進行廣播,最終將消息傳遞至整個網絡,消息接收者無法確認消息發送者的身份,消息發送者也無法確定接收者接收消息的順序。對于共識協議分析及設計另一個重要的網絡特征是同步性,目前對于網絡主要有三種同步假設,分別是:(1)同步網絡(同步網絡(Synchronous Network)
110、,所有消息都必然在某個可以預先確定的時間內傳達,并且網絡中的所有參與者都知道消息需要傳遞多久。在同步網絡中,協議可以以輪的形式進行,在每一輪中,誠實用戶發出的消息能夠在下一輪之前到達其他所有誠實用戶。(2)半同步網絡(半同步網絡(Semi-Synchrony Network),參與者無法確切地知道網絡延遲,但消息傳遞時間可以由隨機變量建模,該隨機變量的概率分布對于協議中的參與者來說是已知的。(3)部分同步網絡(部分同步網絡(Partially Synchronous Network),網絡延遲存在上限,但網絡中的參與者不知道該上限的確切值,時延上限不能作為協議的參數使用,部分同步網絡是區塊鏈協
111、議分析中常用的網絡模型。(4)異步網絡(異步網絡(Asynchronous Network),僅保證誠實用戶的消息能夠到達彼此,但消息傳遞的順序可能被打亂,消息的時延可能無限長。2.1.3 啟動模式(Setup Assumptions)根據協議開始時所依賴的信息不同,可以有三種不同的啟動模式,分別是無狀態啟動(No Setup)、公共狀態啟動(Public-State Setup)、私有狀態啟動(Private-State Setup)65。無狀態啟動是指共識啟動前不設置任何啟動函數,沒有初始狀態,因此惡意節點可以在協議開始前進行預計算。公共狀態啟動是指協議依賴于一個特定的隨機狀態,該隨機狀態
112、可以在協議開始時被隨機取樣,惡意節點可以通過某些手段干預隨機狀態的生成。私有狀態啟動是指協議啟動依賴于一組狀態 1,,n為參與成員個數,si由成員 i秘密隨機生成的。2023 云安全聯盟大中華區版權所有392.1.4 安全性假設同其他密碼學協議一樣,共識協議主要有兩種安全性假設,分別是信息論安全性(Information-Theoretic Security)與計算安全性(Computational Security),前者假設敵手有無限的計算資源,后者假設敵手僅能對多項式復雜度的問題進行計算。對于信息論安全性又可分為完美安全性(Perfect Security)和統計安全性(Statisti
113、calSecurity),前者指協議的安全性質在任何情況下都不會被破壞,后者指協議的安全性性質可能會被破壞,但被破壞的概率可以忽略不計。2.1.5 腐化模型腐化(Corruption)是指敵手通過向目標節點發動攻擊,獲取目標節點的秘密信息,進而控制目標節點的輸入輸出消息,使其完全受到自身的控制。共有三種腐化模型,分別是靜態敵手(Static Corruption)、T-溫和敵手(T-Mildly Corruption)及適應性敵手(Adaptive Corruption)64。靜態敵手是指敵手只能在協議開始前選定其腐化的目標,協議運行期間,敵手不能夠再去腐化其它誠實節點,其控制的節點數量也不會
114、發生改變。T-溫和敵手是指敵手需要一定的時間 t完成對一個節點的腐化,在敵手實施腐化的 t 時間內節點仍然屬于誠實節點。t-溫和敵手是區塊鏈協議分析中經常采用的腐化模型。適應性敵手是指敵手能夠根據協議運行過程中搜集的信息,動態且適應性地對目標節點實施腐化,適應性敵手是三種腐化模型中最強大的。2.2 分析方法2.2.1 經典分布式理論Fischer、Lynch和 Patterson在 1985年證明了:在網絡可靠,但允許節點失效(即便只有一個)的最小化異步模型系統中,不存在一個可以解決一致性問題的確定性共識算法,被成為 FLP定理1。FLP定理從理論層面指出為異步網絡設計在任何場景下都是安全的共
115、識算法是不可能的。2000年 7月,加州大學伯克利分校的 Eric Brewer教授在 ACM PODC 會議上提出CAP 猜想。2年后,麻省理工學院的 Seth Gilbert和 Nancy Lynch從理論上證明了 CAP 猜想。之后,CAP 理論正式成為分布式計算領域的公認定理。簡單來說,CAP 定理是指一個分布式系統,最多只能同時滿足一致性(Consistency)、可用性(Availability)和分區容錯性(Partition Tolerance)這三項中的兩項。2023 云安全聯盟大中華區版權所有40一致性是指分布式系統中的所有節點在同一時刻具有相同的數據??捎眯允侵赶到y中部分
116、節點發生故障后系統仍然能響應客戶端的請求。系統如果不能在時限內達成數據一致性,就意味著發生了分區,分區容錯性是指系統在遇到某節點或網絡分區故障的時候,仍然能夠對外提供滿足一致性或可用性的服務。一般來說,網絡分區是一個自然的事實,分區容錯無法避免,因此可以認為 CAP 的 P 總是成立,即由 CAP 定理可知,共識協議一般無法同時做到可用性與一致性。實際上網絡分區的情況極少出現,系統大多數時間能夠同時滿足一致性及可用性,Pritchett基于這個觀察提出了 BASE理論66,其核心思想是當滿足可用性時,即使無法做到強一致性,但每個節點可以采用適當的方式來使系統達到最終一致性(Eventually
117、Consistency)。最終一致性強調的是系統中所有的數據副本,在經過一段時間的同步后,最終能夠達到一個一致的狀態。因此,最終一致性的本質是需要系統保證最終數據能夠達到一致,而不需要實時保證系統數據的強一致性。2.2.2 協議分析方法目前對于計算安全性的協議主要有兩種證明方法,分別是 Simulation-Based Approach與 Game-Based Approach。Simulation-Based Approach的主要思路是用用理想模型模擬現實模型,證明敵手無法區分模擬模型與現實模型,從而證明現實模型是安全的。Game-BasedApproach的思路是通過證明沒有敵手能夠實現
118、其目標從而證明協議是安全的,其主要過程為:描述協議、描述敵手目標、描述敵手能力、構造安全模型(利用困難問題構造)、歸約證實(歸約到困難問題不可解上)。Simulation-Based Approach的主要構造形式有 Trusted-party Paradigm、UniversalComposability及 black-box Simulatability。Trusted-party Paradigm 是由 Goldreich等人在1986年提出的67,該方法假設存在一個可信第三方去執行協議并且可信第三方能夠看到協議的所有輸入。如果現實敵手執行該協議,其輸出與可信第三方輸出完全一致,則可認為
119、該協議是安全的。Universal Composability(UC)即通用可復合安全,是由 Canetti在 2001年提出的68,是解決協議組合問題的重要工具。作為一種可證安全的方法,UC框架中定義了一整套安全性模型來證明復雜環境下組合協議的安全性。UC安全采用模塊化的思想,在 UC 框架中被證明是 UC 安全的協議,在復雜的網絡環境中作為一個模塊與其他協議進行組合時不破壞組合后協議的安全性,即幾個分別在 UC框架中被證明是 UC 安全的協議,組合以后仍然是安全的69。2023 云安全聯盟大中華區版權所有41目前在共識協議證明中使用比較多的是 Trusted-party Paradigm
120、及 universalComposability。2.2.3 區塊鏈建模Garay等人在 2015提出了 Bitcoin Backbone Protocol44,最早提出了半同步假設下的線性表結構區塊鏈的三個基本共識特征:公共前綴(Common Prefix)、鏈質量(ChainQuality)和鏈增長(Chain Growth)。Bitcoin Backbone Protocol從理論上解決了在只有隨機出塊節點競選而沒有顯式的 BFT委員會投票機制情況下,比特幣“最長鏈法則(TheLongest-Chain-Rule)”的有效性。同時作者證明了任何滿足這些屬性的區塊鏈協議都可以被用來構造公共
121、賬本,公共賬本滿足:(1)持續性(Persistence),如果消息被添加到公共賬本,它永遠不會被刪除;(2)活性(Liveness),如果所有誠實參與者想要向賬本添加一些消息,那么最終消息應該出現在賬本上面。目前已知的鏈式區塊鏈共識協議分析大多基于 Bitcoin Backbone Protocol 提出的這三個基礎特性。2017年 Garay對 Bitcoin Backbone Protocol協議進行了擴展70,對比特幣的難度調整進行了理論分析,并對公共前綴(Common Prefix)和鏈質量(Chain Quality)的定義進行了適當的修改,證明了可以基于滿足上述兩個共識特征的區塊
122、鏈構建安全的公共賬本。此外,Kiayias 和 Panagiotakos 證明了只要滿足 Chain Quality與 chain Growth 就可以不依賴具體協議地證明協議的活性(Liveness)71。在 2017年,Rafael Pass 等人對異步網絡環境下的區塊鏈協議進行了系統性的分析以及抽象,給出了形式化的模型和主要定理72。根據這些模型和定理,可以準確地理解區塊鏈協議各種安全屬性的依賴條件以及邊界。這篇論文為后續區塊鏈協議的安全性證明打下了基礎,包括 Ouroboros 和 DFINITY 在內的熱門項目的論文均以該論文中提出的模型和部分結論為基礎進行安全性證明。2.3 攻擊方
123、法本節對共識算法安全威脅進行全面的調研,并給出分類和進一步的分析。目前已知有多種針對不同共識算法的安全威脅,其中有理論上的安全風險,也存在實際部署中容易被利用的漏洞,下面初步例舉如下:2.3.1 女巫攻擊(Sybil Attack)女巫攻擊是在對等網絡中節點通過創建多個虛假身份標識進而提高系統中所控制節點的比例,從而對系統進行破壞。通過女巫攻擊可以提高惡意節點在共識系統中的投票權,2023 云安全聯盟大中華區版權所有42使其超過系統所能容忍的最大惡意節點數量,從而破壞共識。如果將傳統的 BFT類共識協議直接應用于公開網絡環境,由于失去了準入機制的保護,協議將會因為女巫攻擊的存在而不可用。為了解
124、決這個問題,就需要引入基于 PoW/PoS/PoSpace等的準入機制,提高節點復制身份的成本,從而避免女巫攻擊的發送。2.3.2 自私挖礦(Selfish Mining)自私挖礦是 Eyal 等人在 2014年針對 PoW共識協議提出的一種攻擊手段73。傳統觀點認為,比特幣的挖礦協議是激勵相容的,它可以抵御少數群體的合謀攻擊,并激勵礦工按照協議規定的方式進行挖礦。Eyal 等否定了這個觀點,并給出了一種挖礦策略(自私挖礦),可以使惡意礦工獲得比誠實挖礦更高的收益。自私挖礦會造成區塊鏈網絡分叉增加,影響網絡的安全性。自私挖礦的基本策略是惡意礦工故意延遲公布其計算得到的新塊,并創造一條私有分支,
125、基于私有分支繼續挖礦,而誠實礦工則繼續基于公開的分支進行挖礦,當私有分支長于公開分支時,惡意節點將繼續隱藏私有分支,但當公共分支接近私有分支的長度時,惡意節點將公布私有分支,從而使公開分支上的最近幾個塊無效。以上過程可以用一個馬爾科夫鏈描述,通過自私挖礦期望收益如圖 14所示,可見當算力超過 1/3時,惡意節點可以通過自私挖礦來提高收益。圖14自私挖礦收益示意Nayak 等在 2016年提出了一種新的挖礦策略“Stubborn”,該策略對“自私挖礦”策略進行了擴展,相較于使用“自私挖礦”策略,使用該策略的惡意節點的收益將提高13.94%。作者還進一步對“Stubborn”策略進行了優化,并提出
126、了兩個新的策略,即“the 2023 云安全聯盟大中華區版權所有43EqualFork Stubborn”和“Trail Stubborn”,這兩個策略進一步提高了惡意節點的挖礦收益。Carlsten研究了交易手續費對于“自私挖礦”策略的影響75。Gbel等人進一步擴展了“自私挖礦”模型,將惡意節點與誠實節點之間的通信時延加入了模型76?;诖四P?,作者提出了一種通過監測“孤立塊”比例檢測“自私挖礦”異常行為的方法。Houy則考慮了一個更加通用的假設,利用貝葉斯博弈公式對“自私挖礦”礦工在策略中的選擇行為建模,進一步優化了挖礦策略77。PoW共識機制及以 PoW為基礎的混合共識機制都會受到自私
127、挖礦的影響,一些針對自私挖坑的解決方案被提出。Solat在 2016年提出了 Zeroblock78,要求一個塊在塊的時間戳之后的特定時間間隔內被其它節點接受,否則該塊就會過期無效,這種機制在一定程度上可以防止惡意節點進行自私挖礦。Pass等人提出了 Fruitchain32,通過將出塊獎勵平坦到一個個小的水果區塊解決了自私挖礦問題。Zhang等通過設計基于分叉率的難度調整算法,使節點無法通過自私挖礦提高收益35。2.3.3 長程攻擊(Long range attack)長程攻擊(Long Range Attack)則是權益證明協議中最大的威脅之一。由于權益證明協議有弱主觀性并且能進行無代價模
128、擬,這種攻擊比在工作量證明協議中更為危險。長程攻擊就是攻擊者創建了一條從創世區塊開始的長區塊鏈分支,并試圖替換掉當前的合法主鏈,該分支上可能存有和主鏈不同的交易和區塊,所以這種攻擊又被稱 替換歷史攻擊或歷史覆寫攻擊。弱主觀性指的是區塊鏈網絡中的新節點或是長期離線的節點加入到網絡中時無法分辨出哪些分支是從屬于主鏈的?;?PoW的共識協議可以通過最長鏈原則來選取主鏈,但是當遭遇 51%攻擊時這個原則也會失效。但 51%攻擊的代價非常高昂,因此弱主觀性并不能對基于 PoW協議造成實質威脅。但是對于基于 PoS的共識協議,從頭構建一條鏈幾乎是零代價的,僅僅依靠最長鏈原則不足以判斷哪一條是主鏈,從而就
129、造成了攻擊的可能。目前總共有三種不同類型的長程攻擊,分別是簡單攻擊(Simple Attack)、變節攻擊(Posterior Corruption)和權益流損(Stake Bleeding)。簡單攻擊是指通過偽造區塊時間戳達到偽造的鏈具有更大鏈長度的目的,該攻擊適用于不驗證時間戳的權益證明協議區塊鏈中。變節攻擊是指對于已經退出區塊鏈的節點,其私鑰仍然可以用來產生歷史區塊,攻擊者可以收買這些私鑰偽造區塊,增大其覆蓋主鏈的概率。變節攻擊可以使用密鑰演進加密技術(Key-Evolving Cryptography)和移動檢查點技術(Moving Checkpoint)應對。2023 云安全聯盟大中
130、華區版權所有44權益流損攻擊是指為了增加攻擊的成功率,攻擊者可以拖延主鏈的正常運行,如果攻擊者持有的權益占比足夠多,這種行為可能會演變為一次活性凍結攻擊(Liveness DenialAttack)。每當攻擊者選為主鏈上的出塊節點時,都會跳過出塊,但這并不意味著別的節點可以替代其工作。相反,在該區塊位置處不會有新的區塊加入到主鏈中。而攻擊者在自己的分支上積極出塊。通過采用這樣的策略,一方面拖延主鏈的出塊速度,一方面在分支鏈上盡可能多的出塊,攻擊者最終可以在自己的分支鏈上獲得絕大部分的權益,并且比主鏈更快地產生區塊,最終覆蓋主鏈。權益流損攻擊一般需要的時間比較長。權益流損攻擊可以通過采用移動檢查
131、點的策略應對。2.3.4 Difficulty Raising AttackDifficulty Raising Attack是由 Bahack在 2013年提出的一種攻擊方法79,該方法允許任意算力的攻擊者只要等待足夠長的時間就可以以 100%的概率覆蓋主鏈。該攻擊方法的主要思路是攻擊者私下構造一個區塊,該區塊難度是主鏈分支上所有區塊難度的和。只要時間足夠長,攻擊者一定能找到一個這樣的區塊從而覆蓋掉主鏈分支。由于攻擊者需要根據主鏈的出塊情況不斷地調整目標難度,控制難度調整速度上限可以在一定程度上緩解該攻擊,實際是目前大部分帶難度調整的區塊鏈共識協議都規定了一次調整所能調整的上限。此外由于該攻
132、擊所需要的時間非常長,在實際場景中并不太可能發生。2.3.5 無利益攻擊(Nothing at Stake)除長程攻擊外,無利益攻擊是基于 PoS共識協議所面臨的另一個主要威脅。無利益攻擊問題的本質是“作惡無成本,好處無限多”。因為在基于 PoS共識的協議中出塊是無成本的,當在系統出現分叉的情況時,出塊節點可以在“不受任何損失”的前提下,同時為多條鏈出塊,從而有可能獲得“所有收益”,極大破壞共識的收斂性,甚至導致共識無法收斂。該攻擊對基于 PoSpace的共識協議也有效。解決無利益攻擊的一個主要手段是引入懲罰機制,對同時在多個分支上出塊的節點進行經濟懲罰(Slashing),從而迫使節點選擇一
133、個分支出塊,加快收斂。2.3.6 權利壓迫攻擊(Grinding Attack)權利壓迫攻擊是指惡意節點通過影響出塊節點的選舉過程,加大自己被選為出塊節點的概率。在基于 PoS、PoSpace的共識協議中,隨機性來自于鏈本身的原始數據。惡意節點在出塊時,可以通過嘗試生成不同的區塊以找到對自己有利的隨機數,增大自己后續選為出塊節點的可能性。2023 云安全聯盟大中華區版權所有45可以通過減少采樣頻率的方法降低權利壓迫攻擊的影響,比如每隔 10個區塊采樣一次,10個隨機數由采用值不斷 Hash生成,這樣惡意節點僅能影響其中一個隨機數的生成。2.3.7 雙花攻擊(Double Spending At
134、tacks)雙花攻擊是指攻擊者通過某些方法將之前確認的交易推翻,雙花攻擊一般有三種方法:(1)Race Attack,對于同一筆錢攻擊者發送兩筆轉賬交易到區塊鏈網絡,其中一筆轉向自己,由于轉向自己的交易附有較高的手續,有更高概率被礦工打包;(2)Finney Attack,惡意節點通過預先挖到的區塊推翻發出的轉賬交易;(3)51%Attack,當惡意節點的算力超過 51%時,可以通過創建更長鏈推翻之前區塊上的交易。盡管不同的共識算法試圖緩解此漏洞并采用不同的機制來解決該漏洞,但在區塊鏈系統中無法完全避免重復支出,并且理論上可能一直在發生。2.3.7 交易拒絕攻擊(Transaction den
135、ial attacks)交易拒絕攻擊(Transaction Denial Attacks)是指攻擊者阻止某筆交易成功完成,破壞了區塊鏈系統的活性。交易拒絕攻擊可以通過控制 P2P網絡,進而使交易無法被正常廣播,也可以通過通過控制礦工節點,使交易無法被打包。2.3.8 無法同步攻擊(Desynchronization Attacks)無法同步攻擊是指攻擊者通過某些手段使系統中的節點無法與其它節點同步。該攻擊通常是發生在基于 PoW、PoS、PoSpace 共識的開放網絡中,由于 BFT類共識協議其節點不會直接暴露在開放網絡中,且節點之間一般直接連接,因此共識節點很難產生無法同步的問題。2.3.
136、9 日蝕攻擊(Eclipse Attack)區塊鏈網絡的正常運行依賴于區塊鏈節點間路由信息的共享。Eclipse攻擊是指攻擊者通過侵占節點的路由表,將足夠多的虛假節點添加到某些節點的鄰居節點集合中,從而將這些節點“隔離”于正常區塊鏈網絡之外。當節點受到 Eclipse攻擊時,節點的大部分對外聯系都會被惡意節點所控制,由此惡意節點得以進一步實施路由欺騙、存儲污染、拒絕服務以及 ID 劫持等攻擊行為。Eclipse攻擊者通過不斷地向區塊鏈節點發送路由表更新消息影響區塊鏈節點的路由表,試圖使普通節點的路由表充滿虛假節點。當區塊鏈節點的路由表中虛假節點占據了較高的比例時,區塊鏈網絡的正常行為,包括路由
137、查找或者資源搜索,都將被惡意節點隔絕。2023 云安全聯盟大中華區版權所有46Eclipse攻擊破壞了網絡的拓撲結構,減少了節點數目,使得區塊鏈網絡資源共享的效率大大降低。在極端情況下,Eclipse攻擊能完全控制整個區塊鏈網絡,把它分隔成若干個區塊鏈網絡區域。2.3.10 DDOS 攻擊DDoS 攻擊是一種對區塊鏈網絡安全威脅最大的攻擊技術之一,它指借助于 C/S技術,將多個計算機聯合起來作為攻擊平臺,對一個或多個目標發動攻擊,從而成倍地提高拒絕服務攻擊的威力。根據攻擊方式的不同,基于區塊鏈的 DDoS攻擊可分為主動攻擊和被動攻擊兩種?;趨^塊鏈的主動 DDoS 攻擊是通過主動地向網絡節點發
138、送大量的虛假信息,使得針對這些信息的后續訪問都指向受害者以達到攻擊效果,具有可控性較強、放大倍數高等特點。這種攻擊利用反射節點在短時間內發送大量通知信息,不易于分析和記錄,并且可以通過假冒源地址避過 IP檢查,使得追蹤定位攻擊源更加困難。此外,主動攻擊在區塊鏈網絡中引入額外流量及虛假的索引信息,會降低區塊鏈網絡的查找和路由性能、影響文件下載速度?;趨^塊鏈的被動 DDoS攻擊通過修改區塊鏈客戶端或者服務器軟件,被動地等待來自其它節點的查詢請求,再通過返回虛假響應達到攻擊效果。通常情況下,需采取一些放大措施增強攻擊效果,如:部署多個攻擊節點、在一個響應消息中多次包含目標主機、結合其它協議或者漏洞
139、等。被動攻擊屬于非侵擾式,對區塊鏈網絡流量影響不大,通常只能利用局部的區塊鏈節點。如果共識協議中出塊節點的選擇可以被預測,則可以針對出塊節點進行 DDoS攻擊,從而達到拒絕打包某些交易或者禁止某些節點出塊的目的,破壞區塊的安全性及活性。2.3.11 51%攻擊51%攻擊即網絡中惡意節點的算力或權益占到了 50%以上。對于 PoW機制,惡意節點掌握了全網絡 51%的算力,那么該攻擊者構造一個合法區塊的平均時間會少于其他礦工,從而在相同的時間內可以構造出更多區塊,并以最長合法鏈被網絡接受,這樣整個網絡都可能在該惡意節點的控制下。在 PoS算法中,51%攻擊轉變為掌握網絡中的大多數權益。在拜占庭類算
140、法中,控制 33%的節點即可阻止達成共識,控制 2/3的節點就可操縱共識結果。2023 云安全聯盟大中華區版權所有472.3.12 賄賂攻擊賄賂攻擊是指在區塊鏈中存在一個擁有足夠資源的賄賂者,通過額外的獎勵激勵其他節點采取特定行動的攻擊行為,也就是“收買”現有節點對區塊鏈進行攻擊。該攻擊可以不用花大成本去掌握 51%的算力,就可以對區塊鏈造成分叉??梢砸氡WC金和懲罰措施防范此類攻擊。2.3.13 歷史多數攻擊(Past Majority Attacks)歷史多數攻擊是指歷史上對某區塊鏈擁有控制權(出塊權)的組織或個人,利用自己歷史上存在的對該網絡的控制權,從這個歷史時間點開啟新的分叉,甚至覆
141、蓋主鏈。該攻擊對基于 PoS的共識協議影響較大,因為在歷史上存在權益的節點,從歷史時間點構造一條新的分叉幾乎不費任何代價。2.3.14 BGP HijackingBGP 劫持攻擊即利用 BGP操縱路由路徑,如誤導或攔截流量等,進而可以破壞區塊鏈中共識機制、交易等信息。目前有數據統計大多數比特幣節點都保管在少數特定的幾個互聯網服務提供商中,比特幣網絡的集中化更容易遭受 BGP 劫持攻擊。2.3.15 P+Epsilon 攻擊P+Epsilon攻擊也是賄賂攻擊。假設每個礦工都需要投票給 0,若達成共識則每個礦工都可以獲得 P收益,若有人投票給 1則收益為 0。攻擊者進入系統,告訴每個礦工若他投票給
142、 1而其他人不投票,則他可以額外獲得 Epsilon收益。每個礦工由于并不知道攻擊者也告訴了其他礦工,因此有很大概率會選擇投票給 1增加收益,最終所有礦工都投票給 1,達成了不利于區塊鏈的共識。而此時攻擊者甚至都不需要支付賄賂費用,對攻擊者造成了雙贏的局面,但對區塊鏈影響重大。2.3.16 冷啟動攻擊PoS機制中,由于持幣量會對挖礦難度產生影響,因此當一個基于 PoS的代幣系統啟動時,早期獲得代幣的持有者就會沒有動力去花費或者轉移代幣。而且這些持有者會更容易挖礦,因此會出現初始代幣流通性不好的問題。2.3.17 幣齡累積攻擊幣齡攻擊針對 PoS和 DPoS算法,節點獲得記賬權的可能性與賬戶中持
143、幣的數量和每個幣的持幣時間有關,當節點擁有的幣越多,持幣時間越長時,獲得記賬權的可能性就越 2023 云安全聯盟大中華區版權所有48大。這樣就會導致部分節點買入一定數量幣后,持有足夠長時間后達到 51%以上的算力,從而控制整個網絡。2.3.18 預計算攻擊預計算是指當 PoS中的某一節點有了一定量算力之后,就有能力控制挖礦參數使得挖礦難度在自己算力范圍內。2.3.19 藏塊攻擊(Block withholding attack)藏塊攻擊是指攻擊節點將一部分算力加入礦池挖礦,另一部分算力獨自挖礦,加入礦池的那部分算力正常響應礦池發來的挑戰,但是如果找到可以出塊的答案,則不發送給礦池,由于找到可以
144、出塊的答案的概率比較小,不會影響礦池計算其在礦池中所占的份額,這樣做會導致整個礦池的收益降低,但是會降低挖礦難度,提高攻擊者獨立挖礦算力的收益,從而使其整體收益提高,破壞了區塊鏈共識協議的公平性。3共識算法安全測試方法和標準本節從共識算法理論和實現兩方面展開安全測試和分析,理論分析主要從算法本身展開分析,不涉及算法的代碼實現和具體應用部署環境。實現分析從算法的具體參數、代碼實現、應用部署等都方面進行安全分析和測試。3.1 共識算法安全理論分析和模擬本節主要考慮算法本身和參數方面是否存在安全缺陷,通過模擬方式測試、驗證共識算法在網絡部署時的安全性。3.1.1 共識算法安全理論分析對于共識算法理論
145、上是否滿足安全性,主要考察共識算法是否滿足一些屬性,Bonneau對文獻448182的工作進行了總結,提出了共識算法一般需要滿足以下五個安全特性80:(1)最終一致性,即在任何時候,所有合法節點都對最終能成為有效區塊鏈的前綴鏈達成共識。但是不能要求任何時候最長的鏈最終都能成為有效區塊鏈的前綴,因為存在臨時分叉,有些塊會被丟棄。(2)指數收斂,即長度為的分叉出現的概率為(2),這會給用戶高度信心,區塊被確認的規則將使用戶的交易永遠包含在有效區塊中。2023 云安全聯盟大中華區版權所有49(3)活性,即新的區塊會持續添加到鏈上,并且擁有合理交易費的有效交易會包含在區塊中。(4)正確性,即最長合法鏈
146、只包含有效交易。(5)公平性,即擁有占總算力的礦工將挖出約比例的區塊。有了以上標準,就按照此標準來從理論上初步判定一個共識算法是否具備安全性。共識算法中包含許多參數,這些參數一般都會影響共識算法的安全性,Bonneau在文章中列舉幾個重要參數:(1)出塊間隔和難度調整窗口:出塊間隔定義了礦工將區塊寫入區塊鏈中需要等待的時間,出塊間隔越短,確認交易就會越快,區塊過期的可能性就越高,因此可以觀察其出塊時間判定共識算法的安全性。共識算法會自動調整對抗性難題的難度,以便在固定時間內出塊,難度較低就會使網絡中的塊數量較多,出塊速度較快,難度較高就會導致塊數量較少。若出塊速率過快,那么受到網絡延遲的影響,
147、礦工通常會在這些塊被傳播之前就找到冗余塊,較容易出現分叉。若出塊速率過慢,那么就增加了用戶等待事物確認的時間。因此,難度調整窗口會影響攻擊者對最長合法鏈的攻擊能力,并且為了防止雙花攻擊,使得商家可以安全接受交易,還需要調整交易確認需要等待的塊數。(2)塊大小限制:通常情況下,區塊有大小限制,比如比特幣的塊大小為 1MB。隨著交易量穩步增長,這一限制可能很快就會達到。一旦達到該限制,交易者就需要支付更高的交易費用競爭資源。攻擊者可能會利用塊大小限制發起 DDoS 攻擊和女巫攻擊,通過發起數筆交易來使合法用戶受到阻塞。通過觀察塊大小限制可以初步判定共識算法安全性。(3)貨幣政策:共識算法中通常會規
148、定貨幣政策,比如比特幣會規定新貨幣的鑄造速度,還有一些 PoS算法會規定幣齡上限。貨幣政策通常會影響初始代幣的價格,若是通貨緊縮的貨幣政策,那么最終可能會導致沒有人愿意購買新的代幣,囤積該幣會更加有利可圖,造成流通性不好的局面。而一些 PoS算法中,幣齡與算力成正相關,最終可能會導致攻擊者持有 51%的算力發起攻擊。3.1.2 安全性與惡意攻擊類型攻擊行為一般發生在交易或者區塊鏈前后的共識階段。在共識過程中,為了保證區塊鏈的穩定性,共識安全性的評估是非常有必要的。倘若區塊鏈的安全性出現問題,那么即便區塊鏈吞吐量(TPS)再高或者共識節點再多,區塊鏈也無法保證其交易數據不可篡改和真實有效性。本小
149、節將從理論的角度分析共識算法安全性和惡意攻擊之間的關系。2023 云安全聯盟大中華區版權所有50對共識的惡意攻擊主要類型在 2.3 節已經介紹.3.1.3 應對策略對于共識的攻擊,主要有以下幾種應對策略:1)增加創建節點的成本。提高創建身份的成本可以有效減輕惡意攻擊的風險。例如,在燃燒證明算法中,用戶需要購買然后燃燒一定量的代幣(通過將一些硬幣發送到不可逆的地址)驗證其身份。在堆棧證明中,用戶需要在堆棧中放入一些代幣。在工作量證明中,用戶需要擁有并花費一些計算能力。該策略的主要挑戰是如何找到理想的身份創建成本,以有效減輕惡意攻擊的風險,并且不限制普通人加入網絡。創建節點的成本也可能隨時間變化,
150、并且區塊鏈共識應能根據網絡需求修改其所使用的成本。2)引入某種類型的信任。抵御惡意攻擊的第二種常見方法是在為節點加入區塊鏈引入額外的信任機制。這種信任機制可以通過簡單的兩步驗證/電子郵件/SMS或要求一組管理員進行驗證的方式實現?;谟脩舻?IP 地址進行一些限制以及防御僵尸網絡的其他常見方法也可用于提供這種信任。3)賦予身份不平等的權力。為用戶和節點賦予不同的權限是防御惡意攻擊的另一種方式。例如,在權重證明算法中,根據多個參數(如用戶帳戶的使用期限、與之進行交易的唯一身份用戶的數量、用戶擁有的代幣數量)為每個帳戶賦予權重以及交易數量。給定的權重賦予每個用戶相關的投票或參與權。但是,這種不平等
151、的權力分配使該系統成為精英制而不是純粹的民主制,對于新用戶而言可能并不友好。不同的共識機制使用不同的方法或它們的不同組合來防御惡意攻擊。沒有“最佳”策略,每個策略都有自己的優缺點。2023 云安全聯盟大中華區版權所有514)根據業務場景切換共識算法評價共識算法的一般有四個維度:安全性、擴展性、性能效率和資源損耗。不同共識算法所側重的方向也各不相同。因此,當面對不同的場景時,為了保證安全性,可以在全網同時采用多種共識算法,通過多級共識確認交易,以及根據業務場景選擇合適的共識算法。3.1.4 共識算法安全模擬通過 3.1.1節對共識參數作理論分析,可以初步判定共識算法是否存在安全漏洞,為了更好的對
152、共識算法進行分析,還可以用模擬的方式測試共識算法的安全性。3.1.4.1經典共識算法安全模擬一個直觀的想法是運行實際的區塊鏈應用程序分析區塊鏈的性能,比如 Castro使用真實系統將 PBFT共識算法與其他算法進行了比較84。另一種思路是通過建立數學模型對PBFT算法進行模擬,以分析其更多的性質。Kai Zheng 等人提出使用連續時間馬爾可夫鏈(CTMC)模型模擬 PBFT 的共識過程85,該 CTMC模型包括 5個部分:請求過程、預準備過程、準備過程、提交過程和答復過程。請求過程是客戶端將請求發送給主節點;預準備過程是區塊鏈中一個主節點被選中,其他節點變為副節點,主節點要向副節點廣播消息;
153、準備過程是副節點計算哈希摘要并且向所有節點廣播;提交過程是如果主節點和副節點都收到了 2f的哈希摘要,并且摘要和自己的相同,就進行提交;答復過程是如果一個節點收到 2f+1的提交信息,就可提交新區塊。CTMC模擬了此過程,整個模型中有 1 個客戶端,1個主節點和 6 個副節點。作者主要考察了網絡傳播速度、客戶端發送或接收消息的平均時間、主節點向其他節點發送消息的時間、副節點向其他節點發送消息的時間對于能否達成共識一致的影響。實驗結果表明,這四者均是速度越快、發送或接收消息的平均時間越短,達成共識一致的可能性就越高。其中,網絡傳播速度對于達成一致的影響最大,其次是客戶端、主節點,副節點對達成一致
154、的影響最小。Sukhwani 等人使用隨機獎勵網絡(SRN)對 PBFT 共識協議進行了建模86,主要對節點之間共識消息的傳輸時間、處理傳入共識消息的時間和準備下一階段共識消息的時間進行評估。作者假設:(1)在塊事務開始之前每個領導節點就已經被選擇好,并且在三階段協議執行時不會改變;(2)每個驗證節點處理消息的速度相同;2023 云安全聯盟大中華區版權所有52(3)所有節點之間的消息傳輸率相同;(4)驗證節點在執行三階段協議時不會失效。作者之后對影響 PBFT共識算法的因素進行了分析。首先是敏感度分析,作者發現與為下一階段準備共識消息相比,處理傳入共識消息和提交消息的速度若較慢的話,對各節點達
155、成共識會有較大影響。之后作者又考慮了節點數量對達成共識時間的影響。當節點數量增多時,基本上達成共識的時間也需要增加,這是因為節點增多會導致準備和提交階段中消息的排隊延遲增加。但是如果傳輸延遲比處理消息或排隊的時間大一個數量級或者兩倍,則隨著節點數量的增多,達成共識的時間不會明顯增加。因為 PBFT協議是基于消息傳遞的算法,因此共識消息傳遞的延遲對于能否達成共識較為重要。Halalai等人提出了一個基于模型檢查和仿真技術的結合模型 HyPerf87,用于評估BFT協議的性能。模型主要包括客戶端和副本,模擬了它們的狀態以及客戶端和副本之間消息通信過程。同時作者定義了 BFT共識協議的安全標準:(1
156、)請求/響應對應,對于所有的客戶端,接收到的響應都對應于之前發出的請求。(2)狀態可達性,對于所有正確的副本,可以通過一系列客戶端請求到達每個狀態。(3)線性化,對于所有正確的副本,所有的請求都按照客戶端看到的順序執行。(4)狀態一致,所有正確的客戶端最終都會受到響應,所有的副本最終都能達到一致狀態。但是上述模型只考慮了各節點最終的狀態,并沒有考慮時間消耗,因此作者為客戶端和每個副節點的狀態中都增加了時間消耗。增加時間消耗后,該模型就可以考慮對請求的響應時間,并把此增加到上文所述的安全性能中:(5)時效性。對于所有的客戶端,每個請求都需要在一定時限內完成。之后作者用該模型對 PBFT算法進行了
157、測試,主要測試了協議的時耗問題,并且考慮了有惡意行為的情況,即有一個副節點是拜占庭節點。結果表明這樣的情況對于 PBFT沒有很大影響,系統還是與正常情況一樣達成了共識。3.1.4.2區塊鏈共識算法安全模擬由于基于區塊鏈的共識協議多應用于開放網絡,環境復雜,難以通過實際運行協議來對協議進行安全分析,因此多通過建立數學模型進行模擬。Gervais使用馬爾科夫決策過程(MDP)對挖礦行為進行了模擬,將其建模為一系列步驟83。MDP是離散時間隨機控制過程,針對一些決策的輸出結果部分隨機而又部分可控的情況,給決策者提供一個決策制定的數學建??蚣?。與其他文獻中的做法相似,要將區塊鏈系統建模為 MDP,就要
158、先 2023 云安全聯盟大中華區版權所有53將區塊鏈狀態進行編碼,并將參與者的可用決策編碼為多個動作,并且用狀態轉移矩陣描述每個(狀態,動作)的概率分布。MDP中描述的區塊鏈狀態包括可能影響誠實礦工和攻擊者的所有信息,如競爭鏈的長度、攻擊者挖出的未發布的區塊數量等。誠實礦工會根據自己的算力,以概率分布開采新的區塊,而攻擊者會決定是否要發布新區塊、發布多少區塊以及要對哪條鏈進行挖掘,而這些事件都會觸發 MDP狀態轉換。通過對該過程進行模擬,對攻擊者的攻擊過程進行建模,可以及時發現共識協議的弱點。在 MDP過程中觀察以下參數:(1)孤塊產生速率:孤塊產生速率 會考慮不同的塊大小、出塊間隔、網絡延遲
159、、消息傳播機制和網絡配置(如節點數)。(2)挖礦算力:指攻擊者算力占系統總算力的那部分,剩余部分的算力掌握在誠實節點中。(3)挖礦成本:對抗挖礦成本 0,對應于攻擊者的預期挖礦成本(即總挖礦成本,包括硬件成本、電力、人力等),并以塊獎勵的形式表示。例如,如果=,則攻擊者的挖礦成本等于其挖礦算力乘區塊獎勵,即挖礦成本完全由誠實礦工挖礦的區塊獎勵所覆蓋。(4)區塊確認數:區塊確認數 對應需要確認交易以使商家接受交易的區塊數。(5)傳播能力:傳播參數 表示攻擊者在網絡中的流通性,即當攻擊者和誠實節點在網絡中同時釋放區塊時,網絡接收攻擊者區塊的概率。(6)日蝕攻擊的影響:該模型考慮了日蝕攻擊。在這里,
160、我們假設誠實礦工會收到孤塊產生速率的影響,但是攻擊者及其同謀卻不會在孤塊上繼續挖礦。這是因為攻擊者可以對任意的區塊進行攻擊,并且當攻擊者選擇了一條誠實的鏈后,有很小的幾率去開采孤塊。因此在實際中,攻擊者比誠實礦工挖到孤塊的概率小得多。誠實的網絡因為受到網絡傳播和延遲的影響,因此會有更高的孤塊產生速率。為了定義最佳的雙花攻擊策略,作者定義了與最小交易值相對應的雙花攻擊金額,該雙花攻擊金額是使得雙花攻擊的收益大于誠實挖礦獲得的收益的最小交易值??梢宰鳛榱炕p花攻擊下共識算法安全性的可靠指標,即如果誠實礦工挖礦獲得的獎勵大于不誠實行為的獎勵,那么商家可以安全地接受價值的付款交易,因為這樣的價值被認為
161、是安全的。但是如果攻擊者行為在經濟上有更多回報,那么商家會意識到相關的雙花攻擊風險和礦工的相關激勵措施。2023 云安全聯盟大中華區版權所有54現在使用 MDP模型 模擬區塊鏈系統,其中所有其他參與者都遵循共識協議,S表示空間狀態,A 表示動作空間,P 表示隨機轉移矩陣,R表示獎勵矩陣,M表示 MDP過程。在模型中,攻擊者可以采取以下動作:(1)接受:攻擊者接受誠實網絡的鏈,此動作其實是攻擊者重啟發動攻擊的開始,若攻擊者發現贏取誠實鏈的可能性較小,那么此操作是適當的。(2)覆蓋:攻擊者比誠實節點發布的塊多了一個塊,因此可以覆蓋有沖突的區塊。當攻擊者的秘密鏈比當前已知的公開鏈長(即),并且攻擊者
162、發布+1 個區塊以用自己的秘密鏈替換公開的誠實鏈時,就會出現覆蓋的情況。如果攻擊者利用誠實節點的挖礦能力,則攻擊者可能會使用誠實節點的個區塊實現覆蓋操作。(3)競爭:攻擊者發布與誠實節點發布的一樣的區塊,觸發兩條鏈之間的競爭,而不是發布比誠實節點多的區塊進行覆蓋。(4)等待:攻擊者繼續在自己的秘密鏈上進行挖礦直到挖到一個區塊為止。(5)退出:此操作僅在研究雙花攻擊時才有意義,因為它對應于具有個確認的成功雙花攻擊,并且僅在 并且 時才可行。狀態空間定義為形式為,,其中表示對手鏈的長度,表示誠實鏈的長度,表示通過日蝕攻擊挖到的區塊,可以用三個值表示,分別是不相關、相關和活躍:(1)相關:相關表示誠
163、實節點找到了最后一個區塊,以及如果 則競爭操作可用,,1,的狀態會變為,。(2)不相關:當攻擊者找到最后一個塊時,前一個塊可能已經到達網絡中的大多數節點,因此攻擊者無法進行競爭操作,1,的狀態會變為,。(3)活躍:當攻擊者確定執行競爭操作時,該狀態被標記為活躍,即當前網絡正在分裂并且正在確定最長合法鏈。在該模型中,每一次狀態的轉變都對應著一個區塊的創建,因此每次狀態轉變都意味著對誠實節點、攻擊者或者日蝕攻擊受害者的一次區塊獎勵。給定攻擊者的挖礦算力,初始狀態 0,0,0,會以概率轉換為1,0,0,,即攻擊者找到了一個區塊。如果誠實節點發現了一個非孤塊,則狀態 2023 云安全聯盟大中華區版權所
164、有55會變為 0,1,0,。如果誠實節點發現了一個孤塊,則狀態會保持 0,0,0,,因為孤塊不計入最長合法鏈中。此外 R.Zhang 等人對 MDP進行了改進35,將 MDP模型擴展到了拜占庭式攻擊者,也就是不僅考慮經濟利益方面的攻擊,同時還考慮審查攻擊或主鏈質量攻擊,并且還引入了人工智能技術分析協議的安全性,給定攻擊者的攻擊目標,可以系統地找到共識協議中該方面的安全漏洞,從而有利于迭代地改進協議。3.2 共識算法安全滲透測試和代碼安全審查3.2.1 安全指標除了對共識算法進行理論分析和模擬外,也需要測試算法實現中能否保證正確性和安全性。R.Zhang等人給出了四個指標,用以衡量在實現過程中算
165、法的安全性35:(1)鏈質量:主要用于衡量替換誠實主鏈的難度,用區塊鏈中誠實礦工挖出的區塊數量除以誠實礦工和攻擊者共同挖出的區塊數量計算得出。假設攻擊者控制了總挖礦能力的,則鏈質量定義為誠實礦工擁有的那部分挖礦算力 的下界。將和分別定義為誠實礦工和攻擊者挖出的區塊總數,是攻擊者的攻擊策略,那么我們有:=minlim+,理想情況下,=1 ,即攻擊者獲得的區塊數最多與他們的挖礦能力成正比。越大,說明誠實礦工挖出的區塊數量更多,該共識算法被攻擊者替換主鏈的難度就越大。(2)激勵兼容性:主要用于衡量共識算法對自私挖礦的抵抗力,用區塊鏈中誠實礦工獲得的獎勵除以誠實礦工和攻擊者總共獲得的獎勵計算得出,計算
166、方式如下:=minlim?+?,其中?和?分別是誠實礦工和攻擊者獲得累積收益,激勵兼容性與鏈質量有相同的理想值 1 。若該值越大,說明誠實礦工獲得的獎勵更多,礦工更愿意按照規定的共識協議進行挖礦,該共識算法對于自私挖礦的抵抗力就越強。(3)作惡收益:主要用于衡量雙花攻擊的成功率。該指標被量化為一定時間內區塊鏈中雙花收益的總金額,非法收益指的是攻擊者無需消費就從商家那里獲得的商品金額。我們假設每個誠實的區塊都包含向商家的付款交易,當包含支付交易的區塊達到確認后(比如比特幣中=6)或者攻擊者選擇放棄攻擊該區塊時,商家就可以提供服務或者商 2023 云安全聯盟大中華區版權所有56品。在前一種情況,如
167、果之后付款交易無效,則對于在確認后孤立的每個區塊,攻擊者將以出塊獎勵為單位接受雙花獎勵,也就是說如果攻擊者成功雙花攻擊使得個區塊成為孤塊,那么雙花獎勵將被定義為:,=0,(+1 ),,其中+1 是孤立的確認塊的個數。此外,如果在到達確認之前,就使交易無效,則=0。攻擊者并不會因為雙花攻擊失敗而受到損失,因為商家還是會提供商品或服務,從而補償了攻擊者的損失。該指標能夠從多個方面衡量共識協議是否能抵抗雙花攻擊,首先?會迫使攻擊者去平衡失去出塊獎勵的風險和雙花攻擊成功得到的雙花收益。第二,如果在確認之前廣播沖突的交易,則允許商家延遲交貨,以抵消攻擊。第三,更長的分叉會在現實中帶來更大的傷害,對攻擊者
168、來說回報也就更高。攻擊者的作惡收益定義如下:,=maxlim?+?,其中,表示持續時間,是用出塊間隔來衡量,是沒有雙花攻擊的平均出塊獎勵。在理想情況下,攻擊者應該誠實遵守協議以避免丟掉出塊獎勵,但是如果足夠大,攻擊者就能被該激勵誘惑。(4)審查敏感性:主要用于衡量對審查攻擊的抵抗性。該指標被量化為因為拒絕審查者的要求,導致誠實礦工的收益損失的最大百分比。我們選擇不考慮攻擊者的經濟損失,因為如果審查威脅成功,則不會進行報復。只要其他誠實礦工能夠堅定攻擊者的決心,那么影響攻擊者戰略的唯一因素就是誠實礦工不進行合作的預期損失。與羽毛分叉攻擊(Feather-forking attack,或懲罰性分叉
169、來審查鏈上的交易。補充來說,這與生成分叉幣種、空投或盈利無關,而與阻止網絡參與者在區塊鏈中執行交易操作有關。這樣的攻擊向量也要比 51%攻擊更先進,因為它并不需要大多數的算力來將一個網絡參與者列入黑名單當中)不同,在該評估標準中,攻擊者在收到包含目標交易的區塊后就會立刻開始報復,一旦合法礦工開始挖掘該區塊,攻擊者就會發起攻擊。此設置很實用,因為攻擊者可以通過一直監視網絡中的交易立即進行挖礦。審查攻擊和羽毛分叉的另一個區別是,允許攻擊者放棄落后的鏈并能夠在任何時間孤立下一個誠實的塊。由于攻擊者的目標是最大程度地增加誠實礦工的損失,因此攻擊者并不會在落后的鏈上進行挖礦。因此在落后的鏈上進行挖掘并非
170、總是最佳的。我們還考慮了多種攻擊情形,例如在極端的攻擊形式中,攻擊者通過用空白區塊替代誠實區塊,從而延遲所有交易的確認時間,降低系統的可用性。審查敏感性定義如下:=maxlim?+?,2023 云安全聯盟大中華區版權所有57其中?是誠實礦工因為審查攻擊而遭受的累積獎勵損失,以區塊獎勵為單位。在理想情況下,=0,即誠實礦工沒有拒絕審查請求的風險。通過以上四個指標,可以對共識算法實現過程做安全審查,若無法同時滿足以上指標,則該共識算法在實現過程較容易受到攻擊。3.2.2 滲透測試“滲透測試”是完全模擬黑客可能使用的攻擊技術和漏洞發現技術,對目標系統的安全做深入的探測,發現系統最脆弱的環節。滲透測試
171、和黑客入侵最大區別在于滲透測試是經過客戶授權,采用可控制、非破壞性質的方法和手段發現目標和網絡設備中存在弱點,幫助管理者發現 IT 系統所面臨的安全威脅。共識算法滲透測試的測試點主要有:(1)公共參數許多共識算法對如區塊大小、出塊間隔、獎勵、主節點等都做了詳細的規定,這些公共參數不應該被輕易修改,滲透測試應檢查是否有違反公共參數的可能性。(2)一致性/有效性/可用性/公平性節點是否能在有限的時間內對共識的數據達成一致,所達成的數據是否合法,數據是否實時可用,節點是否能夠公平的參與共識等。(3)數據傳輸共識通信多依賴 P2P網絡,需測試節點間網絡是否能夠正常連通、是否存在被 DDoS攻擊的可能、
172、節點身份是否會被偽造、通信是否會被劫持等,如果通信有保密需求,則必須驗證數據的加密和解密是否正常。(4)API測試API測試就是要檢查應用程序與區塊鏈生態系統之間的交互。這樣做是為了驗證 API發送的請求和響應,并確保它們已正確格式化和執行。(5)集成測試由于跨不同環境和并行系統部署了區塊鏈測試,因此對集成測試的需求增加。完成測試是為了確保不同組件之間能夠無縫通信。測試團隊對 API進行測試,確??梢栽隍炞C階段使用這些 API。(6)性能測試通過性能測試可確定潛在的瓶頸,并檢查應用程序是否已準備好投入生產。確定性能的測試自動化是檢查共識系統整體可擴展性的關鍵。(7)安全測試 2023 云安全聯
173、盟大中華區版權所有58目的是確保完全保護區塊鏈應用程序免受病毒和惡意程序等攻擊。區塊鏈的安全測試需要非常徹底同時應迅速響應。由于正在進行的事務無法停止,因此測試過程應足夠有效以發現所有潛在威脅。有效的安全測試還有助于改善公司在消費者面臨風險之前撤銷有缺陷的商品的流程,有助于實現數字質量保證。滲透測試通過有效利用編碼錯誤,以潛在黑客的心態開展工作。用簡單的話來說,測試人員本身就是黑客,并試圖闖入網絡以檢測和報告安全漏洞。滲透測試人員花費的總時間取決于網絡規模及其架構的復雜性。較小的測試只是時間問題,而較長的測試可能需要長達數周的時間。需要區塊鏈滲透測試作為解決方案的一些挑戰是:缺乏測試工具知識不
174、足不稱職的策略不可逆轉的交易性能和負載測試有效的區塊鏈測試可幫助組織通過連接的基礎架構安全地構建和利用該技術。測試過程包括核心測試策略和服務,如云測試服務、功能測試、API測試、集成測試、安全測試和性能測試。它還包括特定于區塊鏈的測試策略,如塊測試、智能合約測試和對等/節點測試。3.2.3 滲透測試工具和代碼安全審計測試人員選擇最合適的區塊鏈滲透測試工具以減輕漏洞并提供最佳質量的結果同樣重要,以下幾個框架是常用的測試框架:(1)Truffle框架Truffle是最受歡迎的開發環境之一,也是用于區塊鏈測試的測試框架。Truffle為智能合約提供了簡單的生命周期管理,包括對庫鏈接、自定義部署和復雜
175、的基于區塊鏈的應用程序的支持。Truffle還提供自動合同測試,開發人員可以使用 JavaScript和 Solidity編寫自己的自動測試代碼。它的一些顯著特征是:開發期間立即重建資產可配置的構建管道,完全支持自定義構建過程可編寫腳本的部署和遷移框架通過交互式控制臺進行直接合同通信(2)Embark 2023 云安全聯盟大中華區版權所有59Embark提供了一種簡單的聲明性方法定義要部署的智能合約及其相關性。以太坊測試儀為各種區塊鏈測試需求提供可管理的 API支持,旨在改善用戶和開發人員的體驗,并幫助他們輕松管理和執行所選工具。(3)Populus這里的測試由 python測試框架提供支持,
176、并提供了用于測試智能合約的有用實用程序。代碼審計是直接對程序的源代碼進行檢查,以確定程序源代碼是否存在安全隱患,或者有編碼不規范的地方,通過自動化工具或者人工審查的方式,對程序源代碼逐條進行檢查和分析,發現這些源代碼缺陷引發的安全漏洞,并提供代碼修訂措施和建議。代碼審計對于共識系統的發展具有重要意義:一方面,代碼審計可以節約安全投入,降低修復成本。研究表明,當應用發布后再執行代碼修復,修復成本大約是設計編碼階段的 30倍。所以,變被動防護為主動防御,從源頭上控制安全隱患,可以最大程度節約成本;另一方面,代碼審計可以降低系統安全風險。通過代碼審計及時對代碼層缺陷進行修復,從而大幅度提升系統整體安
177、全性,避免巨額經濟損失。越來越多的共識系統安全事件正在倒逼代碼審計的發展。目前,智能化代碼審計,即利用計算機進行穩健性檢驗是代碼審計最重要的方式,但掌握該項技術標準的國內公司并不多。代碼審計亟待進一步普及與發展。3.3 共識算法安全 CheckList包含 2.1和 2.2的安全檢查列表。結合 2.1和 2.2內容,共識算法安全檢查包含以下方面:(1)對算法參數進行檢查,包含以下 3個指標:a.出塊時間和難度調整窗口:檢查出塊間隔和難度調整窗口是否合適,若出塊速率過快,那么受到網絡延遲的影響,礦工通常會在這些塊被傳播之前就找到冗余塊,較容易出現分叉。若出塊速率過慢,那么就增加了用戶等待事物確認
178、的時間。b.塊大小限制:區塊大小和區塊包含的交易數量緊密相關,通過檢查區塊大小防止交易量過大造成的合法用戶阻塞問題。c.貨幣政策:檢查貨幣政策是否過于緊縮,若緊縮會導致礦工挖礦積極性不高,初始代幣不流通。(2)對算法進行模擬檢查:通過 MDP建模模擬挖礦過程,包括區塊鏈狀態、攻擊者動作、隨機轉移矩陣和獎勵矩陣。誠實礦工會根據自己的算力,以概率分布開采新的區塊,而攻擊者會決定是否要發布新區塊、發布多少區塊以及要對哪條鏈進行挖掘,而這些事件 2023 云安全聯盟大中華區版權所有60都會觸發 MDP狀態轉換。并且對雙花攻擊和日蝕攻擊建模,考慮這些攻擊的最壞情況,模擬攻擊者的攻擊過程,可以及時發現共識
179、協議的弱點。(3)對算法實現過程進行檢查:包含以下 4個指標:a.鏈質量:主要觀察算法能夠替換誠實主鏈的難度,用區塊鏈中誠實礦工挖出的區塊數量除以誠實礦工和攻擊者共同挖出的區塊數量計算得出。若該值越大,則算法被攻擊者替換誠實主鏈的難度就越大。b.激勵兼容性:主要觀察算法對自私挖礦的抵抗力,用網絡中誠實礦工獲得的獎勵除以誠實礦工和攻擊者總共獲得的獎勵計算得出。若該值越大,則誠實礦工獲得的獎勵更多,算法對于自私挖礦的抵抗力越大。c.作惡收益:主要觀察算法對雙花攻擊的抵抗力,量化為一定時間內雙花攻擊獲得的總收益。若該值越大,則算法對雙花攻擊的抵抗力更弱。d.審查敏感性:主要觀察算法對審查攻擊的抵抗力
180、,量化為因為拒絕審查者的要求,導致誠實礦工的收益損失的最大百分比。若該值越大,則算法對審查攻擊的抵抗力越弱。針對共識機制的安全風險有很多,下表列舉了主要風險和攻擊類型,通過逐條對照可以對所設計的共識算法進行安全性評定。下表可作為共識算法安全的 Checklist。2,3,8攻擊類型攻擊類型攻擊對象攻擊對象攻擊手段攻擊手段影響影響51%攻擊PoWPoSDPoS當攻擊者能夠控制區塊鏈中超過 50的能力(如挖掘能力或驗證能力)時,他/她就能夠進行惡意活動,例如雙重支出或阻止其他節點接收其誠實交易。不同算法在攻擊行為上有所不同,51的攻擊也是不可避免的。分叉攻擊PoWPoS一個或多個節點通過控制全網特
181、定百分比以上算力/數字資產,利用這些算力/數字資產隱秘計算新區塊(攻擊區塊),構造區塊鏈分叉,并在攻擊區塊達到一定長度之后向所有節點釋放,迫使節點放棄原區塊篡改分叉后攻擊者賬戶數據,實現雙重支付,可導致鏈上記錄回滾(可達數月)女巫攻擊PoW攻擊者生成大量攻擊節點并盡可能多的將攻擊實現攻擊者對區 2023 云安全聯盟大中華區版權所有61PoSDPoS節點植入網絡中,在攻擊期間,這些被稱為女巫節點的攻擊節點將只傳播攻擊者的塊,導致攻擊者算力無限接近于 1塊鏈網絡的高度控制權賄賂攻擊PoS攻擊者購買商品或者服務,商戶開始等待區塊鏈網絡確認交易,此時攻擊者開始在網絡中首次宣稱,對目前相對最長的不包含本
182、次交易的主鏈進行獎勵。當主鏈足夠長時,攻擊者開始放出更大的獎勵,獎勵那些在包含此次交易的鏈中挖礦的礦工。一旦確認達成后,放棄獎勵。貨物到手,同時放棄攻擊者選中的鏈條。以小于貨物或者服務費用的成本獲利預計算攻擊PoS將某一時間段內計算出的新區塊扣留不公開,等到挖到第二塊新區塊后同時公布攻擊者所在分叉成為最長鏈Sybil攻擊PoWPoSDPoS攻擊者嘗試通過在區塊鏈中創建許多欺詐性身份來控制對等網絡。這些身份似乎是唯一的用戶或節點,實際上是由攻擊者控制的。這些身份用于獲得投票權,阻止驗證權,甚至在區塊鏈的社交網絡中傳播假消息。使攻擊者對網絡有不成比例的控制權或包圍誠實的節點,并試圖影響到達該節點的
183、信息,然后逐漸影響分類帳。雙花攻擊PoWPoSDPoS當一個人嘗試兩次在區塊鏈上花費特定金額的錢時,就會發生雙重支出攻擊6。當攻擊者試圖創建一個正常交易以包含在一個區塊中,然后在一段時間后,創建一個欺詐性沖突交易并將其推到一個新的分叉欺詐性區塊中形成欺詐分支,影響交易3.4.1 共識算法的安全性測試步驟:針對共識算法的安全測試應遵循如下步驟:a)應保證來自于系統正常運行節點的請求能在規定時間內達成一致的、正確的共識最終 2023 云安全聯盟大中華區版權所有62能夠被系統接收并處理,需要測評是否能輸出正確結果;b)應保證任意不超過理論值的節點數故障不會影響整個系統正常工作,需要測評誠實的節點是否
184、會對相同的請求做出明確且一致的判斷;c)應保證驗證規則滿足概然性與統一性,如共識機制中包含驗證過程,需要測評每一參與節點是否具有獨立判斷能力;d)應保證共識方案的發布需伴隨清晰的應用場景和規模參數,便于對機制的安全適配范圍進行規范化的校驗,主要測評該共識機制是否能夠防止雙重支付、女巫攻擊等。e)應保證在理論值范圍內的惡意節點對系統發出偽造、重復的惡意請求時,系統能夠做出正確的響應,保證一致性。4 共識算法安全案例分析本節利用上一節的測試方法和標準,對共識算法安全的典型安全進行分析,并給出分析過程和結論。本節的案例包括現實中的案例和設計的案例兩類,目標是涵蓋前文介紹的全部安全威脅和測試方法。下面
185、列舉部分現實的共識算法安全案例:4.1 51%攻擊2013年 6月,一種以萊特幣為原型的創造的加密貨幣 Feathercoin遭遇 51%攻擊,攻擊者通過雙花攻擊卷走了價值 6.38萬美元的代幣,Feathercoin的創始人表示此次攻擊的算力可能來自于萊特幣礦池。2014年 7月,比特幣礦池 GHash.IO在某天內獲得了超過 51%的哈希率,引發了外界對比特幣漏洞的擔憂,盡管沒有發生惡意攻擊,但隨后礦工逐漸離開礦池并且該礦池于 10月關閉。2016年 8月,一群被稱為“51crew”的攻擊者劫持了兩個基于以太坊的區塊鏈,Krypton和 Shift,通過發起雙花攻擊獲取了價值 21465
186、Kryptons的數字貨幣。Krypton項目的代碼復制于以太坊,擁有幾乎一樣的功能,這也被證實一些算力低的山寨幣更容易受到 51%攻擊。在 2018年 4月和 5 月,Verge經歷了兩次 51%攻擊,遭受了 180萬美元的價值損失。Verge為了避免算力的集中化采用 5種算法,項目在 5 種算法間切換,而攻擊者正是利用 Verge算法的漏洞,修改了區塊鏈的時間戳,從而成功攻擊。2018年 5月,一群比特幣礦工獲得了超過 50%的算力,對比特黃金發動了攻擊,盜取了價值 1800萬美元的比特幣。隨后在 6月,還攻擊了其他四種加密貨幣,分別是Monacoin,Zencash,Verge和 Lit
187、ecoin Cash。這些攻擊者甚至不需要購買硬件礦機,只需要在攻擊期間從算力租賃市場租賃顯卡算力,這種方式極大地降低了攻擊者攻擊的成本。2023 云安全聯盟大中華區版權所有63同樣的,在 2019年 1 月,ETC被發現受到了 51%攻擊,攻擊者總共獲得了價值 110萬美元的以太幣,攻擊者同樣不需要投資任何硬件設備。從以上案例可見 51%攻擊可分為以下幾種情況:(1)與其它區塊鏈公用相同的挖礦算法,導致攻擊者可以從其它區塊鏈抽調算力進行攻擊,這多次發生在分叉幣上;(2)礦池算力過于集中,礦池越大,礦工收益就越穩定,所以礦工傾向于選擇大的礦池,導致礦池所擁有的算力越來越多,最終超過 51%,但
188、該情況威脅一般不大,當礦池算力過大時,理性礦工會選擇離開礦池,以使礦池算力恢復到一個合理的水平;(3)挖礦算法存在漏洞,導致礦工可以通過漏洞提高自己的算力;(4)攻擊者可以通過算力租賃的方式使自己的算力超過 51%,這種情況一般對總算力較少的區塊鏈有效;(5)專用硬件的出現導致擁有新硬件的攻擊者可以以極低的成本擁有更高的算力;(6)出塊間隔等參數設置不合理、發生自私挖礦攻擊等,導致誠實礦工的算力大部分浪費在分叉上,攻擊者可以以實際低于 51%的算力完成攻擊;從攻擊者目的來看,一般有三種情況:(1)通過制造雙花來使自己收益;(2)通過拒絕其它礦工的出塊來增加挖礦收益;(3)競爭幣單純的對對手進行
189、破壞。4.2 DDoS攻擊DDOS 的一種攻擊形式是惡意節點通過發起大量塵埃交易以使得合法用戶支付更高的交易費。2017年 6月,香港交易所 Bitfinex遭受了 DDoS 攻擊,導致其臨時暫停。同年的11月 11日,比特幣交易池中被發現存在大小超過 11.5萬筆的未經確認的交易,導致價值7億美元的交易停滯。2018年 6 月,比特幣的交易池再次遭到 4500筆未經確認的垃圾交易攻擊,使得交易池大小增加了 45MB,規模增加導致交易費飆升,合法用戶被迫支付更高的費用完成交易。在 2019年 11月,比特幣交易池達到了 2018年 1月以來的最高水平,交易池大小超過 90MB,垃圾交易量大幅上
190、漲。此外,攻擊者還會對網站發動 DDoS攻擊,使得系統卡頓、宕機,交易吞吐量減少。2018年 7月,一款運行在以太坊網絡的游戲Fomo3D遭受黑客 DDoS攻擊,使得 24小時內 Fomo3D 流量減少 38.32%,隨后 Fomo3D使用的安全管理網站開啟高防驗證,用戶需等待 5秒才能訪問網站,這幾乎是該網站的最高級 DDoS 防御策略。2020年 2月,加密貨幣交易所 Bitfinex和 OKEx均遭受多輪 DDOS攻擊,該攻擊通過轟炸信息使得平臺過載而停止服務,平臺的服務被迅速關閉并進行維護。2023 云安全聯盟大中華區版權所有64從上述案例可見目前主要有以下幾種攻擊行為:(1)通過發送
191、大量的垃圾交易使正常交易無法被及時處理,影響系統的活性;(2)通過對特定節點進行 DDoS 攻擊,使節點無法正常同步及發送區塊,造成網絡分片,造成節點的不一致,影響共識的安全性;(3)針對運行于區塊鏈網絡上的特定應用進行 DDoS 攻擊,導致應用不可用。防范 DDoS攻擊可以從設置合理的交易費用、構建健壯的網絡、使用更難預測的隨機數進行出塊節點選擇等措施著手。4.3 BGP劫持攻擊在過去的幾年中,托管采礦池或加密貨幣交易所的自治系統都遭受了 BGP 劫持攻擊。2014年,加拿大的一個惡意互聯網服務提供商(ISP)公開了一些主要 ISP 的 BGP 前綴,這些 ISP 包括 Amazon、OVH
192、、Digital Ocean、LeaseWeb和 Alibaba,并且攔截了到礦池的流量,攻擊者因此獲得了 83,000美元。2018年 4月,攻擊者針對以太坊錢包MyEtherW發起了 BGP 攻擊,這是一個用于在線交換以太坊令牌的開源 Web應用程序。攻擊者控制了以太坊錢包的域名系統,使得用戶被重定向到了一個釣魚網站,當用戶將私鑰輸入到釣魚網站時,攻擊者將設法竊取其私鑰。此次攻擊持續了幾個小時,最終攻擊者竊取了 152,000 美元。這類攻擊的漏洞一般來自于底層網絡服務提供商,選擇可信的網絡服務提供商是解決該類攻擊的關鍵。5 共識算法安全的最佳實踐對于實際部署的區塊鏈系統,特別是基于開源區
193、塊鏈平臺的區塊鏈應用系統,共識算法通常是以一個可選模塊的方式實現的,因此本節主要提供共識算法的具體實現的最佳實踐,即區塊鏈應用如何選擇、評估、整合、使用共識算法實現,以及如何進行參數設置等等,從實際考慮,最佳實踐圍繞主流的區塊鏈平臺和典型的行業應用展開。5.1 超級賬本的共識算法安全最佳實踐超級賬本(Hyperledger)是一個旨在推動區塊鏈跨行業應用的開源項目,提供企業級的開源分布式賬本框架和代碼庫。超級賬本對傳統區塊鏈模型進行了革新,其中包括管理參與者的訪問許可權,也就是超級賬本是有權限的共享賬本,為身份識別、審核及隱私提供了一個安全、健康的模型。2023 云安全聯盟大中華區版權所有65
194、Hyperledger Fabric是超級賬本項目下正在孵化的一個項目,是分布式賬本平臺的實現。該平臺利用熟悉和成熟的技術來運行智能合約,并且設計為模塊化結構,允許組件如共識算法和成員服務模塊插入即用。本節主要對 Hyperledger Fabric的共識算法實踐進行說明。Hyperledger Fabric中使用了基于 Zookeeper的 Apache Kafka共識算法,該共識算法是Fabric1.0版本中提供的共識算法之一,之所以將 0.6版本中的 PBFT暫時取消,一是因為交易性能達不到要求,二是因為 Fabric面向的聯盟鏈環境中,所有節點都有準入控制,拜占庭容錯的需求不是很強烈,
195、反而是并發性能更重要。Fabric中的共識算法被分解為三個階段:(1)背書階段:在可選擇的節點上模擬交易并收集狀態變化信息??蛻舳藨贸绦驅嬙煲粋€交易提案來調用鏈碼(chaincode)中的函數,該函數依次對賬本狀態進行讀和/或寫操作,然后根據背書策略將其發送給指定的背書節點。背書節點接收到交易提案后首先會驗證提交者是否有權調用通道上的交易。之后背書節點執行鏈碼,鏈碼可以訪問背書節點當前的賬本狀態,進行讀取和寫入,但是寫入只是模擬寫入,修改的是私有事務工作區,而不會記錄到賬本中。執行完成后背書節點調用 ESCC(Endorsement System Chaincode)對執行結果進行簽名,然
196、后響應給客戶端應用程序。最后,客戶端檢查提案響應以驗證其是否帶有背書節點的簽名??蛻舳藭牟煌墓濣c那里收集足夠多的提案響應,以驗證背書是否相同。由于每個節點可能在區塊鏈的不同高度執行交易,因此提案響應可能會不同。在這種情況下,客戶端必須將提案交給其他背書節點,以獲得足夠多相同的提案響應。(2)排序階段:接受提交的被認可的交易并進行排序,確保交易順序的一致性。排序階段通過排序服務(Ordering Service)提供的接口接受已經背書的交易,然后根據共識算法中的配置(如指定的配置信息中定義的時間限制或指定允許的交易數量),確保交易順序和數量,然后將交易打包到區塊中進行廣播。排序服務可以以不同
197、的方式實現,開發和測試階段可以使用集中式排序服務。為了保證交易的機密性,交易服務不能看到交易中的具體內容,也就是交易內容可以使用哈希散列或加密方式去處理。(3)驗證階段:獲取有序塊并驗證其結果的正確性,包括檢查背書策略和重復提交攻擊。通道上的所有節點(包括背書節點和提交節點)都從網絡中接收數據塊。節點首先驗證簽名,之后每一個塊中的所有交易都要通過 VSCC驗證,再通過 MVCC 驗證。VSCC(Validation System Chaincode)驗證:驗證系統鏈碼(VSCC)會根據為鏈碼指定的背書策略評估交易中的背書,如果不符合背書政策,則該交易被標記為無效。2023 云安全聯盟大中華區版
198、權所有66MVCC(Multi-Version Concurrency Control)驗證:該驗證用于確保交易在背書階段讀取的多版本密鑰要與提交階段中本地的當前狀態相同,類似于為了進行并發控制而進行的讀寫沖突檢查,并且塊中的所有有效交易要按順序執行。如果讀取的版本不匹配,表示之前的交易修改了讀取的數據,則該交易被標記為無效。潛在的驗證失敗主要分為兩種:(1)語法錯誤:如無效輸入、未驗證的簽名、重復交易等,此類交易要被丟棄;(2)邏輯錯誤:此類錯誤較為復雜,應該定義策略決定是繼續執行還是終止。Fabric是用 Go語言編寫的,并使用 gRPC 框架在客戶端、節點之間通信。Fabric一般會配置
199、如下模塊:(1)背書政策:背書政策主要包括在交易請求提交給訂購者前,需要執行多少次交易并且簽名,以便交易通過 VSCC驗證。交易背書的 VSCC 驗證會根據收集到的背書評估背書政策,并檢查可滿足性,背書政策的復雜性將影響資源以及收集和評估它的時間。(2)通道:通道將交易彼此隔離,提交給不同渠道的交易彼此獨立地進行排序、交付和處理。通道為系統中交易處理的各個方面帶來了固有的并行性。Fabric中的每個通道都形成一個邏輯區塊鏈,通道的配置在特殊塊中的元數據中進行維護,每個配置塊都包含完整的通道配置。(3)Gossip協議:由于大多數共識算法(如 CFT和 BFT 共識機制)都受帶寬限制,因此排序階
200、段的吞吐量受其節點的網絡容量的限制,共識協議將無法通過添加更多節點達成更廣泛的共識,反而共識范圍會縮小,吞吐量會下降。但是在 Kafka 協議中,排序階段和驗證階段是分離的,因此可以在排序階段之后將執行結果更為有效地廣播給所有節點以進行驗證,這是 Gossip協議解決的目標之一。除以之外,對新加入網絡的節點以及長時間斷開網絡連接的節點進行狀態轉移,這也是 Gossip協議的目標。Gossip協議實現基于gRPC,并且使用具有相互認證的 TLS,這使得節點可以將 TLS 憑證綁定到遠程節點上。Gossip協議維護網絡中所有節點的實時信息,節點可以在網絡中斷后重新連接到該信息。(4)排序服務(or
201、dering service):排序服務用于管理多個通道,并提供如下服務:原子廣播,用于建立交易順序;當配置更新交易被廣播時修改通道配置;訪問控制,對某些交易廣播和塊接受進行限制。排序服務由鏈上的創世塊完成。5.2 以太坊共識算法安全最佳實踐比特幣是最早的 PoW共識算法的實踐,但隨著比特幣的發展,市場是逐漸出現了專業礦機專門針對哈希算法、散熱、能耗進行優化,這脫離了比特幣網絡節點運行在普通計 2023 云安全聯盟大中華區版權所有67算機中公平參與挖礦的初衷,并且會造成節點中心化,還可能帶來 51%攻擊。因此,以太坊中改進了 PoW算法。以太坊早期起草的共識算法中使用的是 Dagger-Has
202、himoto算法,但是 Dagger-Hashimoto算法容易受到共享內存硬件加速的影響,所以最后對 Dagger-Hashimoto算法進行改進得到了 Ethash算法,是 Ethereum1.0中使用的共識算法,在Ethereum2.0中計劃使用 PoS 共識算法。Ethash算法增加了對內存的需求,即在進行挖礦時,需要占用大量的內存空間,這是 ASIC 礦機不具備的,因此將挖礦算法從 CPU密集型轉為了 IO 密集型。傳統的 PoW算法僅僅是不斷嘗試 nonce,將該 nonce與難度閾值進行比較,而以太坊的 Ethash算法中求解 nonce僅僅是第一步,還需要利用內存進行一些混合運
203、算,然后將該值與閾值進行比較。算法首先需要一些數據集,數據集生成方式如下:(1)存在一個種子(Seed),該種子與區塊高度有關;(2)根據種子計算出 16MB的偽隨機緩存 cache,由種子計算出第一個數,之后的每個數都由前一個數取哈希得到,輕節點存儲該 cache。(3)根據 cache生成 1GB 的 dataset(DAG),dataset 中每一項數據都由 cache中的數據參與生成,循環迭代 256次,全節點會存儲 cache和 dataset。礦工在挖礦時,首先嘗試隨機數 nonce,在 DAG 中,利用區塊頭部和 nonce計算出一個 DAG中的初始位置 A,然后讀取 A和 A相
204、鄰位置的元素 A,再通過 A 和 A計算出另外兩個位置 B和 B,以此類推總共迭代 64次,總共取出 128 個數,將其計算得出的哈希與目標閾值比較,若滿足條件則挖礦成功,否則重新嘗試 nonce。Cache和 dataset中的數據并非不變,大概每隔 30000個區塊就會重新計算一遍。而cache的大小 16MB和 dataset的大小 1GB每年也會增大一點。這里選擇 16MB 的 cache大小是因為若選取較小的緩存,則太容易繼續使用 ASIC 礦機進行挖礦,而 16MB需要比較高的緩存讀取帶寬。而更大的緩存會使得算法較難而輕節點客戶端無法進行區塊校驗。選擇 1GB的 dataset是為
205、了要求內存級別超過大多數專用內存和緩存的大小,但是普通計算機還能使用。每隔 30000塊重新計算一遍是因為間隔太大會使得內存不經常更新而僅僅是經常讀取,而間隔太小又會使算力較小的機器要花大量時間在更新數據集的固定成本上。以太坊的共識算法是基于改進后的 GHOST 協議(Greedy Heaviest Observe Subtree),GHOST 協議是為了解決以太坊中出塊時間過快所導致的安全性問題。以太坊中出塊時間為 15秒,而比特幣是 10分鐘,出塊時間過快會導致暫時性分叉過多,如果只用普通的PoW算法,那么假如有多個礦工同時挖出區塊,算力大的礦池通常地理位置較優越,其網 2023 云安全聯
206、盟大中華區版權所有68絡與更多的節點相連,它發布的區塊能更快地在網絡中傳播,成為主鏈的可能性也越大。這對算力小的節點很不公平,并且不利于算力小的節點達成共識,因此以太坊中引入了GHOST 協議。GHOST協議就是在區塊鏈中 7 代及其以內的叔父區塊均可以得到獎勵,而礦工若包含一個叔父區塊也可以得到除了出塊獎勵額外的獎勵。因此引入 GHOST 協議可以鼓勵礦工挖礦,不會因為算力小而打消礦工積極性,并且解決了分叉過多難以達成共識的情況。以太坊中的每個節點都在以太坊虛擬機(EVM)上運行,EVM可以執行用以太坊編程語言 Solidity編寫好的復雜代碼,Solidity是一種類 JavaScript
207、 的語言。使用 EVM跨以太網網絡進行并行計算會很慢并且成本較高,因此讓每個節點都自己運行 EVM可以在整個區塊鏈中保持共識。以太坊共有 4個階段,即前沿、家園、大都會和寧靜,前三個階段采用的都是 PoW共識機制,而在第四階段采用的是 PoS共識機制,名為 Casper。PoS旨在解決 PoW的缺點:能源消耗過大;鼓勵礦工投資專門的硬件,違背了去中心化的理念;存在自私挖礦等攻擊。PoS可以被描述為“虛擬挖礦”,礦工購買的是 ETH 而不再是硬件和電力,共識機制根據礦工持有的代幣數量成比例地分配投票權,而不是算力。因為不再用算力進行挖礦,因此可以說挖礦幾乎“不用付出任何代價”,那么礦工很可能會朝
208、著多個方向同時挖礦以增加其收益,這樣會不利于達成共識。因此 Casper是要求礦工必須鎖定他們的一些幣作為保證金。當他們發現一個可以被加到鏈上的區塊時,就會下賭注驗證。如果區塊成功上鏈,驗證者可以得到相應比例的獎勵。但是當驗證者試圖做一些惡意行為時,他們也會受到相應的懲罰。這樣可以解決賬本分叉的問題。2023 云安全聯盟大中華區版權所有69參考文獻1Fischer M J,Lynch N A,Paterson M S.Impossibility of distributed consensus with one faultyprocessJ.Journal of the ACM(JACM),1
209、985,32(2):374-382.2Gilbert S,Lynch N.Brewers conjecture and the feasibility of consistent,available,partition-tolerant web servicesJ.Acm Sigact News,2002,33(2):51-59.3Ben-Or M.Another advantage of free choice(Extended Abstract)Completely asynchronousagreement protocolsC/Proceedings of the second ann
210、ual ACM symposium on Principles ofdistributed computing.1983:27-30.4Dwork C,Lynch N,Stockmeyer L.Consensus in the presence of partial synchronyJ.Journal ofthe ACM(JACM),1988,35(2):288-323.5 Leslie Lamport,Robert E.Shostak,and Marshall C.Pease.The Byzantine Generals Problem.ACM Trans.Program.Lang.Sys
211、t.,4(3):382401,1982.6 Lamport L.The part-time parliamentM/Concurrency:the Works of Leslie Lamport.2019:277-317.7 Ongaro D,Ousterhout J.The raft consensus algorithmJ.2015.8 Castro M,Liskov B.Practical Byzantine fault toleranceC/OSDI.1999,99(1999):173-186.9 Van Renesse R,Schneider F B.Chain Replicatio
212、n for Supporting High Throughput andAvailabilityC/OSDI.2004,4(91104).10 Guerraoui R,Knezevic N,Quema V,et al.Stretching bftR.2010.11 zsu M T,Valduriez P.Principles of distributed database systemsM.Englewood Cliffs:Prentice Hall,1999.12 Abd-El-Malek M,Ganger G R,Goodson G R,et al.Fault-scalable Byzan
213、tine fault-tolerantservicesJ.ACM SIGOPS Operating Systems Review,2005,39(5):59-74.13 Cowling J,Myers D,Liskov B,et al.HQ replication:A hybrid quorum protocol for Byzantinefault toleranceC/Proceedings of the 7th symposium on Operating systems design andimplementation.2006:177-190.14 Guerraoui R,Kneev
214、i N,Quma V,et al.The next 700 BFT protocolsC/Proceedings of the5th European conference on Computer systems.2010:363-376.15 Kotla R,Alvisi L,Dahlin M,et al.Zyzzyva:speculative byzantine faulttoleranceC/Proceedings of twenty-first ACM SIGOPS symposium on Operating systemsprinciples.2007:45-58.16 Abrah
215、am I,Gueta G,Malkhi D,et al.Revisiting fast practical byzantine fault toleranceJ.arXivpreprint arXiv:1712.01367,2017.17 Gueta G G,Abraham I,Grossman S,et al.SBFT:a scalable and decentralized trustinfrastructureC/2019 49th Annual IEEE/IFIP international conference on dependable systemsand networks(DS
216、N).IEEE,2019:568-580.2023 云安全聯盟大中華區版權所有7018 Singh A,Fonseca P,Kuznetsov P,et al.Zeno:Eventually Consistent Byzantine-FaultToleranceC/NSDI.2009,9:169-184.19 through Byzantine lockingC/2010 IEEE/IFIP International Conference on Dependable Systems&Networks(DSN).IEEE,2010:363-372.20 A.Clement,E.Wong,L.A
217、lvisi,M.Dahlin,and M.Marchetti,“Making Byzantine Fault TolerantSystems Tolerate Byzantine Faults,”Symp.A Q.J.Mod.Foreign Lit.,2009.21 Y.Amir,B.Coan,J.Kirsch,and J.Lane,“Prime:Byzantine replication under attack,”IEEETrans.Dependable Secur.Comput.,2011.22 G.S.Veronese,M.Correia,A.N.Bessani,and L.C.Lun
218、g,“Spin ones wheels?Byzantine faulttolerance with a spinning primary,”in Proceedings of the IEEE Symposium on ReliableDistributed Systems,2009.23 P.L.Aublin,S.Ben Mokhtar,and V.Quema,“RBFT:Redundant byzantine fault tolerance,”inProceedings International Conference on Distributed Computing Systems,20
219、13.24 Pass R,Shi E.The sleepy model of consensusC/International Conference on the Theory andApplication of Cryptology and Information Security.Springer,Cham,2017:380-409.25 Baird L.The swirlds hashgraph consensus algorithm:Fair,fast,byzantine fault toleranceJ.Swirlds,Inc.Technical Report SWIRLDS-TR-
220、2016,2016,1.26 Satoshi,Nakamoto.Bitcoin:A peer-to-peer electronic cash system.Consulted 1.2012(2008):28.27Dwork C,Naor M.Pricing via processing or combatting junk mailC/Annual InternationalCryptology Conference.Springer,Berlin,Heidelberg,1992:139-147.28Jakobsson M,Juels A.Proofs of work and bread pu
221、dding protocolsM/Secure informationnetworks.Springer,Boston,MA,1999:258-272.29Back A.Hashcash-a denial of service counter-measureJ.2002.30Sompolinsky Y,Zohar A.Secure high-rate transaction processing in bitcoinC/InternationalConference on Financial Cryptography and Data Security.Springer,Berlin,Heid
222、elberg,2015:507-527.31Eyal I,Gencer A E,Sirer E G,et al.Bitcoin-ng:A scalable blockchain protocolC/13thUSENIX symposium on networked systems design and implementation(NSDI 16).2016:45-59.32Pass R,Shi E.Fruitchains:A fair blockchainC/Proceedings of the ACM Symposium onPrinciples of Distributed Comput
223、ing.2017:315-324.33Sompolinsky Y,Lewenberg Y,Zohar A.SPECTRE:A Fast and Scalable CryptocurrencyProtocolJ.IACR Cryptol.ePrint Arch.,2016,2016:1159.34Li C,Li P,Zhou D,et al.Scaling nakamoto consensus to thousands of transactions per secondJ.arXiv preprint arXiv:1805.03870,2018.2023 云安全聯盟大中華區版權所有7135Zh
224、ang R,Preneel B.Lay down the common metrics:Evaluating proof-of-work consensusprotocols securityC/2019 IEEE Symposium on Security and Privacy(SP).IEEE,2019:175-192.36Proof of stake Online,available:https:/en.bitcoin.it/wiki/Proof of Stake,April 11,2018.37King S,Nadal S.Ppcoin:Peer-to-peer crypto-cur
225、rency with proof-of-stakeJ.self-published paper,August,2012,19:1.38Buterin V,Griffith V.Casper the friendly finality gadgetJ.arXiv preprint arXiv:1710.09437,2017.39Bentov I,Pass R,Shi E.Snow White:Provably Secure Proofs of StakeJ.IACR Cryptol.ePrintArch.,2016,2016:919.40Kiayias A,Russell A,David B,e
226、t al.Ouroboros:A provably secure proof-of-stake blockchainprotocolC/Annual International Cryptology Conference.Springer,Cham,2017:357-388.41David B,Gai P,Kiayias A,et al.Ouroboros praos:An adaptively-secure,semi-synchronousproof-of-stake blockchainC/Annual International Conference on the Theory and
227、Applications ofCryptographic Techniques.Springer,Cham,2018:66-98.42Badertscher C,Gai P,Kiayias A,et al.Ouroboros genesis:Composable proof-of-stakeblockchains with dynamic availabilityC/Proceedings of the 2018 ACM SIGSAC Conference onComputer and Communications Security.2018:913-930.43Kerber T,Kiayia
228、s A,Kohlweiss M,et al.Ouroboros crypsinous:Privacy-preserving proof-of-stakeC/2019 IEEE Symposium on Security and Privacy(SP).IEEE,2019:157-174.44Garay J,Kiayias A,Leonardos N.The bitcoin backbone protocol:Analysis andapplicationsC/Annual International Conference on the Theory and Applications ofCry
229、ptographic Techniques.Springer,Berlin,Heidelberg,2015:281-310.45Miller A,Juels A,Shi E,et al.Permacoin:Repurposing bitcoin work for datapreservationC/2014 IEEE Symposium on Security and Privacy.IEEE,2014:475-490.46Park S,Pietrzak K,Kwon A,et al.Spacemint:A Cryptocurrency Based on Proofs of SpaceJ.IA
230、CR Cryptol.ePrint Arch.,2015,2015:528.47Cohen B,Pietrzak K.The chia network blockchainJ.2019.48Benet J,Greco N.Filecoin:A decentralized storage networkJ.Protoc.Labs,2018:1-36.49Zhang F,Eyal I,Escriva R,et al.REM:Resource-efficient mining for blockchainsC/26thUSENIX Security Symposium(USENIX Security
231、 17).2017:1427-1444.50Decker C,Seidel J,Wattenhofer R.Bitcoin meets strong consistencyC/Proceedings of the 17thInternational Conference on Distributed Computing and Networking.2016:1-10.51Kogias E K,Jovanovic P,Gailly N,et al.Enhancing bitcoin security and performance with strongconsistency via coll
232、ective signingC/25th usenix security symposium(usenix security 16).2016:279-296.52Abraham I,Malkhi D,Nayak K,et al.Solida:A blockchain protocol based on reconfigurablebyzantine consensusJ.arXiv preprint arXiv:1612.02916,2016.2023 云安全聯盟大中華區版權所有7253Pass R,Shi E.Hybrid consensus:Efficient consensus in
233、the permissionless modelC/31stInternational Symposium on Distributed Computing(DISC 2017).Schloss Dagstuhl-Leibniz-Zentrum fuer Informatik,2017.54Pass R,Shi E.Thunderella:Blockchains with optimistic instant confirmationC/AnnualInternational Conference on the Theory and Applications of Cryptographic
234、Techniques.Springer,Cham,2018:3-33.55Gilad Y,Hemo R,Micali S,et al.Algorand:Scaling byzantine agreements forcryptocurrenciesC/Proceedings of the 26th Symposium on Operating Systems Principles.2017:51-68.56Luu L,Narayanan V,Zheng C,et al.A secure sharding protocol for openblockchainsC/Proceedings of
235、the 2016 ACM SIGSAC Conference on Computer andCommunications Security.2016:17-30.57Kokoris-Kogias E,Jovanovic P,Gasser L,et al.Omniledger:A secure,scale-out,decentralizedledger via shardingC/2018 IEEE Symposium on Security and Privacy(SP).IEEE,2018:583-598.58Schindler P,Judmayer A,Stifter N,et al.Hy
236、drand:Practical continuous distributed randomnessJ.2020.59Al-Bassam M,Sonnino A,Bano S,et al.Chainspace:A sharded smart contracts platformJ.arXivpreprint arXiv:1708.03778,2017.60Zamani M,Movahedi M,Raykova M.Rapidchain:Scaling blockchain via fullshardingC/Proceedings of the 2018 ACM SIGSAC Conferenc
237、e on Computer andCommunications Security.2018:931-948.61Miller A,Xia Y,Croman K,et al.The honey badger of BFT protocolsC/Proceedings of the2016 ACM SIGSAC Conference on Computer and Communications Security.2016:31-42.62Yin M,Malkhi D,Reiter M K,et al.Hotstuff:Bft consensus with linearity andresponsi
238、venessC/Proceedings of the 2019 ACM Symposium on Principles of DistributedComputing.2019:347-356.63Mazieres D.The stellar consensus protocol:A federated model for internet-level consensusJ.Stellar Development Foundation,2015,32.64劉懿中,劉建偉,張宗洋,等.區塊鏈共識機制研究綜述J.密碼學報,2019,6(4):395-432.65Garay J,Kiayias A.
239、Sok:A consensus taxonomy in the blockchain eraC/Cryptographers Trackat the RSA Conference.Springer,Cham,2020:284-318.66Pritchett D.Base:An acid alternativeJ.Queue,2008,6(3):48-55.67Goldreich O,Micali S,Wigderson A.How to play any mental game,or a completeness theoremfor protocols with honest majorit
240、yM/Providing Sound Foundations for Cryptography:On theWork of Shafi Goldwasser and Silvio Micali.2019:307-328.2023 云安全聯盟大中華區版權所有7368Canetti R.Universally composable security:A new paradigm for cryptographicprotocolsC/Proceedings 42nd IEEE Symposium on Foundations of Computer Science.IEEE,2001:136-14
241、5.69蘇婷.UC 安全理論及應用研究D.山東大學,2009.70Garay J,Kiayias A,Leonardos N.The bitcoin backbone protocol with chains of variabledifficultyC/Annual International Cryptology Conference.Springer,Cham,2017:291-323.71Kiayias A,Panagiotakos G.Speed-Security Tradeoffs in Blockchain ProtocolsJ.IACR Cryptol.ePrint Arch.
242、,2015,2015:1019.72Pass R,Seeman L,Shelat A.Analysis of the blockchain protocol in asynchronousnetworksC/Annual International Conference on the Theory and Applications of CryptographicTechniques.Springer,Cham,2017:643-673.73Eyal I,Sirer E G.Majority is not enough:Bitcoin mining is vulnerableC/Interna
243、tionalconference on financial cryptography and data security.Springer,Berlin,Heidelberg,2014:436-454.74Nayak K,Kumar S,Miller A,et al.Stubborn mining:Generalizing selfish mining and combiningwith an eclipse attackC/2016 IEEE European Symposium on Security and Privacy(EuroS&P).IEEE,2016:305-320.75Car
244、lsten M.The impact of transaction fees on bitcoin mining strategiesD.Princeton University,2016.76Gbel J,Keeler H P,Krzesinski A E,et al.Bitcoin blockchain dynamics:The selfish-minestrategy in the presence of propagation delayJ.Performance Evaluation,2016,104:23-41.77Houy N.The Bitcoin mining gameJ.A
245、vailable at SSRN 2407834,2014.78Solat S,Potop-Butucaru M.Zeroblock:Preventing selfish mining in bitcoinJ.arXiv preprintarXiv:1605.02435,2016.79Bahack L.Theoretical bitcoin attacks with less than half of the computational power(draft)J.arXiv preprint arXiv:1312.7013,2013.80Bonneau J,Miller A,Clark J,
246、et al.Sok:Research perspectives and challenges for bitcoin andcryptocurrenciesC/2015 IEEE symposium on security and privacy.IEEE,2015:104-121.81Kroll J A,Davey I C,Felten E W.The economics of Bitcoin mining,or Bitcoin in the presence ofadversariesC/Proceedings of WEIS.2013,2013:11.82Miller A,LaViola
247、 Jr J J.Anonymous byzantine consensus from moderately-hard puzzles:Amodel for bitcoinJ.University of Central Florida Tech.Report CS-TR-14-01(accessed 5 June2019)https:/ A,Karame G O,Wst K,et al.On the security and performance of proof of workblockchainsC/Proceedings of the 2016 ACM SIGSAC conference
248、 on computer andcommunications security.2016:3-16.2023 云安全聯盟大中華區版權所有7484Castro M,Liskov B.Practical Byzantine fault tolerance and proactive recoveryJ.ACMTransactions on Computer Systems(TOCS),2002,20(4):398-461.85K.Zheng,Y.Liu,C.Dai,Y.Duan and X.Huang,“Model Checking PBFT Consensus Mechanismin Healt
249、hcare Blockchain Network,”in the 9th International Conference on InformationTechnology in Medicine and Education(ITME),Hangzhou,2018,pp.877-881.86H.Sukhwani,J.M.Martnez,X.Chang,K.S.Trivedi and A.Rindos,“Performance Modeling ofPBFT Consensus Process for Permissioned Blockchain Network(Hyperledger Fabric),”in 2017IEEE 36th Symposium on Reliable Distributed Systems(SRDS),Hong Kong,2017,pp.253-255.87R.Halalai,T.A.Henzinger and V.Singh,“Quantitative Evaluation of BFT Protocols,”in the 8thInternational Conference on Quantitative Evaluation of SysTems,Aachen,2011,pp.255-264.