?

區塊鏈P2P網絡及安全研究

2024-03-12 08:57倪雪莉
計算機工程與應用 2024年5期
關鍵詞:比特路由區塊

倪雪莉,馬 卓,王 群

1.江蘇警官學院計算機信息與網絡安全系,南京 210031

2.南京信息工程大學計算機學院網絡空間安全學院,南京 210044

體系結構和通信協議是網絡研究中普遍關注的兩大核心要素,針對區塊鏈技術的研究也是如此。區塊鏈系統作為一個構建在數據通信網絡基礎上的新型應用系統,以其去中心化、防篡改、匿名性、自治性、開放性等特征,正在以創新模式影響和改變著傳統網絡的應用,同時也對傳統網絡基礎設施從通信層面提出了新的要求,在應用拓展和安全性等方面面臨新的挑戰[1-2]。

在區塊鏈基礎架構模型中,網絡層位于數據層與共識層之間,主要封裝了區塊鏈系統的組網方式、消息傳輸協議和數據驗證機制等內容。具體講,用戶端程序生成交易初始數據,在成功驗證目的節點地址后,再經用戶的私鑰簽名后通過區塊鏈網絡發送給礦工,礦工首先對接收到的交易數據進行驗證,驗證無誤后暫時保存在內存中,等待通過共識算法打包進區塊;礦工節點通過共識算法競爭系統的記賬權,當其中的礦工挖出一個新區塊后,為了將區塊鏈接到主鏈上以便獲得系統的獎勵,則需要將經簽名的區塊盡快通過區塊鏈網絡廣播給其他礦工,其他礦工在驗證了新區塊的合法性和正確性后,立即將該區塊鏈接到區塊鏈上,并在該區塊的基礎上繼續挖下一個區塊[3]。由此可以看出,一筆新交易或一個新區塊產生后,都需要通過區塊鏈網絡進行廣播,以便于實現新交易的打包和新區塊的上鏈操作。區塊鏈網絡的性能在很大程度上決定著交易被打包進區塊的效率以及礦工的競爭優勢,區塊鏈網絡的安全性也在不同程度上影響著區塊鏈挖礦的安全性。

P2P(peer-to-peer,點對點)網絡是區塊鏈系統的核心,為區塊鏈系統中的價值轉移與信息交換提供基礎保障。目前,針對區塊鏈P2P網絡及其安全性的研究動因主要體現在以下幾個方面:(1)P2P 網絡作為區塊鏈架構中網絡層的重點組成部分,為交易和區塊數據的傳輸提供了保障,為上層共識結果的最終達成、激勵機制的實現、腳本或智能合約的正常運行以及各類應用系統的開發提供了底層技術支撐,所以對區塊鏈P2P網絡的研究具有基礎性。(2)P2P 網絡是構建在傳統互聯網基礎上的一類覆蓋網絡,在資源管理、節點接入與退出、網絡抖動等方面具有其特殊性。另外,隨著區塊鏈應用領域的不斷擴展,比特幣、以太坊、超級賬本等典型區塊鏈項目分別對P2P網絡在功能實現上提出了新的要求,從而形成了具有獨特功能的區塊鏈P2P網絡。為此,有必要針對區塊鏈技術和應用發展,對區塊鏈P2P網絡進行深入研究。(3)近年來,隨著以以太坊為代表的區塊鏈2.0時代的出現,智能合約技術催生了大量區塊鏈應用,同時區塊鏈技術向著加密數字貨幣之外的其他領域快速滲透。在區塊鏈應用顯現出百花齊放之時,區塊鏈安全問題成為影響區塊鏈應用發展的關鍵因素。其中,在眾多的安全領域,因區塊鏈P2P網絡在區塊鏈架構中所處的重要位置以及傳統互聯網安全問題對區塊鏈P2P 網絡帶來的威脅,所以針對區塊鏈P2P網絡安全的研究更加重要和緊迫。

本文重點對P2P網絡進行研究,在系統闡述P2P網絡的工作機理和關鍵技術的基礎上,重點討論區塊鏈P2P網絡的實現機制和特征,在此基礎上進一步分析區塊鏈P2P網絡安全問題。

1 P2P網絡

P2P 網絡是傳統互聯網發展過程中由應用需求促動產生的一種網絡層服務,最早主要用于解決多媒體服務和管理,后來在比特幣原型系統中將P2P網絡作為底層的網絡通信協議并一直應用至今。區塊鏈系統采用了P2P 網絡來傳輸交易和區塊等數據,全面系統研究P2P 網絡對進一步研究區塊鏈技術及應用起著至關重要的作用。

1.1 P2P網絡特征

作為一個分布式應用體系架構,P2P網絡的設計初衷和思想是通過節點之間的協同來提供一種新型網絡服務能力,以適應互聯網發展過程中出現的應用需求[4]。P2P 網絡打破了傳統C/S(client/server,客戶端/服務器)架構模式,節點在一個去中心化環境中主動將自身的算力、網絡和存儲資源提供給其他節點使用,每個節點既是資源的提供者(服務器),也是資源的訪問者(客戶端),根據不同節點之間的通信需要,任一節點只需要與相鄰的一部分節點之間建立連接。由于P2P 網絡具有可擴展性強、利于實現負載均衡、網絡的健壯性和可用性較高,同時提供了較好的通信匿名性等特點,所以P2P 網絡在流媒體、算力共享、分布式存儲等領域得到了普遍應用[5]。

網絡架構描述的是分布式系統中各計算節點之間的物理或邏輯關系,是確定系統通信模式的重要依據。P2P 網絡通常是指構建在物理拓撲之上的虛擬覆蓋網絡,在應用層節點通過相應的索引和節點發現算法建立邏輯拓撲,數據傳輸仍然采用底層的TCP/ⅠP結構,一般采用UDP 發送控制信息,采用TCP 來傳輸數據。根據網絡中節點之間的連接方式以及資源的定位和索引方式的不同,P2P 網絡一般可以分為非結構化對等網絡、結構化對等網絡和混合式對等網絡3種類型,不同類型的功能描述及主要性能比較如表1所示。

表1 P2P網絡的3種類型及主要性能比較Table 1 Comparison of three types and main performance of P2P networks

1.2 P2P網絡的關鍵技術

P2P 網絡涉及的技術較多,本節重點對覆蓋網絡、資源查詢和網絡抖動等關鍵技術進行討論。

1.2.1 P2P覆蓋網絡

覆蓋網絡(overlay network)[6]是指節點之間通過構建在底層物理鏈路之上的邏輯鏈路進行通信,為大規模P2P應用提供基于應用層的自組織通信基礎設施,已成為當前網絡的重要組成部分。覆蓋網絡由于沒有集中的組織或控制機制,因此需要一定的資源查詢功能來查找網絡中的共享資源。目前,針對P2P覆蓋網絡的典型應用和研究主要集中在非結構化對等網絡和結構化對等網絡兩個方面,其中在非結構化對等網絡(如Guntella)中節點通過向鄰居節點泛洪(flooding)資源查詢信息來搜索資源,而在結構化對等網絡中節點利用覆蓋網絡的邏輯拓撲(如Chord使用環型拓撲[7],而Kademlia使用樹型拓撲[8])來管理資源。

結構化對等網絡采用分布式哈希表(distributed Hash table,DHT)實現P2P 網絡中元數據的有效共享。由于DHT 具有良好的可擴展性、自組織性以及自適應性等特點,所以可以利用DHT 來組織和管理覆蓋網絡中的資源并形成相對穩定的共享路徑。動態維護和消息路由是DHT 拓撲構建技術的核心,其中動態維護是指在節點動態變化(加入或離開)的不穩定網絡環境中,通過分布式算法建立節點之間的邏輯拓撲;而消息路由是指根據目標地址,將消息從源節點路由到目標節點。具體講,P2P網絡利用DHT以文件形式將用戶需要共享的資源映射成一系列的對后存儲到本地路由表中,每一個節點ⅠD 通常由160 bit 的哈希值組成。其中,鍵值為k的數據存放在ⅠD同樣為k的節點上,如果ⅠD 為k的節點不存在時,將存放在其值與k靠近的節點上。在P2P網絡中,DHT一般通過KAD(Kademlia)協議[9-10]實現,由KAD協議為上層應用提供APⅠ。但是,在結構化對等網絡中由于每個節點ⅠD 是隨機產生的,該節點ⅠD 的生成與物理網絡之間沒有任何關聯,從而使構建在物理網絡之上的覆蓋網絡并未與物理網絡之間建立內在的聯系,在物理上相鄰的節點有可能在邏輯上相距甚遠,而在物理上分布很遠的節點有可能成為邏輯上的鄰居。這種物理與邏輯上不相吻合的現象通常稱之為失配(mismatching)。為了有效解決失配問題,一般可使節點在學習到物理網絡拓撲信息的基礎上,再利用該底層拓撲信息構建拓撲相關(topology-aware)的覆蓋網絡[11]。其中,物理網絡拓撲信息可通過ⅠP地址劃分方法或節點之間傳輸時延分析法等策略獲得。當學習到足夠的物理拓撲信息后,就可以利用這些信息構建或優化覆蓋網絡[12]。另外,對于非結構化對等網絡,由于缺乏固定、統一的拓撲結構,其覆蓋網絡的形成也具有不確定性。

1.2.2 資源查詢

在對等網絡中,每個節點維護著有限的鄰居節點信息,從而形成一個應用層的覆蓋網絡。由于節點之間狀態的不穩定性,在P2P 網絡中很難形成類似C/S 模式的資源訪問方式,而需要采取相應措施有針對性地在動態環境中發現和定位資源。

在結構化對等網絡中,通過遍歷節點可以搜索要查詢信息所在的位置。當存在n個節點時,資源查詢操作步數為O(logn)。這種方法雖然操作簡單,但效率較低,而且網絡開銷較大。為了提高結構化對等網絡中資源的查詢性能,目前采用的方法主要有[13]:一是在搜集鄰居信息的基礎上進行節點信息的交換;二是通過復制大量的副本信息來提高搜索的命中率。其中,對于訪問頻率較高的資源來說,可以通過數據復制技術將資源存放在更多節點上,以便于節點的快速查詢。但是,數據復制技術將會帶來存儲空間和網絡帶寬的額外開銷。

非結構化對等網絡一般通過轉發查詢消息來匹配本地存儲進而實現資源定位,網絡中當存在n個節點時資源查詢操作步數為O(n)。當采用泛洪模式時,節點將查詢消息廣播給鄰居節點,并用一個TTL(time to live,生存時間)值來控制該查詢消息的轉發次數。例如,由于無法確定查詢數據的位置,所以可以將TTL 設置為一個動態變化的值,搜索者先使用一個較小的TTL值利用泛洪方式進行查詢,在查詢失敗后逐步增加TTL的值,直到查詢成功為止[14]。

另外,在混合式對等網絡中,由于存在專門負責資源目錄服務和管理的節點,所以查詢操作只需要O(1)步。

1.2.3 網絡抖動

在P2P 網絡中,Churn(抖動)特指節點頻繁加入和退出的現象[15-16]。Churn反映的是P2P網絡的動態特征,描述的是網絡整體的不穩定性。Churn 現象的存在對P2P網絡產生了嚴重影響:

(1)導致網絡拓撲不穩定。由于節點的頻繁加入和退出,使節點的鄰居節點隨之發生變化。由于節點中鄰居信息的更新具有一定滯后性,部分鄰居節點的退出(失效或下線)和加入,會使節點中保存的鄰居信息與實際連接的鄰居節點不相符。節點的退出將會導致發送到該節點的信息不可達,新節點的加入因為需要向鄰居節點廣播自身地址會占用額外的網絡資源。

(2)導致網絡性能下降。由于節點的頻繁加入和退出,使得節點中維護的路由表始終處于非穩定的收斂過程,這時,在路由傳遞過程中可能會出現網絡不可達現象,資源查詢可能會因節點的失效而無法找到或因資源的重新定位而產生較大延時,數據的傳輸可能會因不斷選擇路徑而降低效率。以上現象,都會在不同程度上導致網絡性能的下降。

(3)導致網絡的可靠性降低。網絡的可靠性定義為在給定條件下網絡以預設性能完成預定功能的能力。網絡不可達、數據傳輸延時、資源無法正確定位等都是可靠性降低的表現。另外,Churn 還會使覆蓋網絡中的某些節點被隔離,從而產生網絡分區問題,尤其是結構化對等網絡更容易產生網絡分區。

針對Churn 對P2P 網絡帶來的危害,近年來研究人員從節點鄰居選擇、失效節點恢復、數據復制、鏈路生命周期(link lifetime)等方面提出了一些優化方案[17],以減小其影響。另外,近年來隨著人工智能技術應用的不斷深入,將機器學習方式用于P2P 網絡來替代傳統的策略,進一步優化P2P網絡環境[18]。與此同時,P2P網絡模型以其具有的可靠性、魯棒性和可擴展性等特性,與可信計算、邊緣計算、人工智能等技術結合,開始從傳統的互聯網進入智能電網、智能交通等生產型網絡[19-20]。

2 區塊鏈P2P網絡

區塊鏈系統通過內嵌的經濟激勵機制將大量分布式節點組織起來實現共同記賬功能,并維護系統的安全性以及賬本的一致性和不可篡改性。在區塊鏈系統中,每個參與共識的“礦工”節點具有獨立的算力和存儲空間,不同節點之間通過網絡實現互操作性。為此,通常情況下將區塊鏈定義為具有共同記賬功能的分布式系統[21]??紤]到區塊鏈網絡研究的完整性,本節在重點討論區塊鏈P2P網絡的基礎上,對區塊鏈系統中實現數據同步和復制的Gossip協議進行了介紹。

2.1 區塊鏈P2P網絡中的節點類型

由于P2P 網絡是構建在眾多物理節點之上的覆蓋網絡,節點的性能以及扮演的角色對研究區塊鏈系統具有重要意義。P2P網絡是區塊鏈系統的核心組成部分,根據應用需要,節點上運行有錢包、挖礦、完整區塊鏈賬本和路由等部分或全部功能,并利用賬本數據來驗證交易記錄[22]。以比特幣系統為例,每個節點能夠提供的服務功能一般包括網絡路由(network route)、完整區塊鏈(full blockchain)、礦工(miner)和錢包(wallet)共4 種類型,每個節點除具有網絡路由功能外,還可能根據需要擔負其他的功能(如圖1所示)。根據提供功能的不同,可以將區塊鏈系統中的常見節點分為核心客戶端、完成區塊鏈節點、獨立礦工和輕量級錢包4 種類型,不同類型的功能描述及提供的主要服務如表2所示。

圖1 區塊鏈P2P網絡Fig.1 Blockchain P2P network

表2 區塊鏈P2P網絡的節點類型及提供的主要功能Table 2 Node types of blockchain P2P networks and main functions provided

對交易進行驗證是區塊鏈中的一項核心服務功能。根據應用環境的不同,區塊鏈系統中提供驗證功能的節點主要分為全節點和輕量級SPV(simplified payment verification,簡易支付驗證)[23]節點兩種類型。其中,全節點中維護著最新、最完整(最長鏈)的區塊鏈數據,能夠對交易獨立地完成驗證操作;而輕量級SPV節點中只存儲區塊鏈的頭部數據,可以在節點沒有存儲完整區塊鏈賬本數據的前提下實現對交易存在性的驗證。另外,在比特幣、以太坊等基于PoW(proof of work,工作量證明)共識機制的中還提供了用于礦池挖礦的礦池協議服務器、與礦池對應的挖礦節點以及輕量級Stratum錢包等節點[24-25],因這些節點僅存在于特定的環境而且數量有限,故在此不再詳述。

2.2 區塊鏈P2P網絡中的協議

P2P網絡是一個分布式應用體系架構,其實現原理和設計思想是把路由選擇、交易和區塊數據驗證、區塊數據傳播、新節點發現等眾多功能分散到網絡中不同節點上,讓每個參與節點平等地分擔任務和負載。區塊鏈P2P 網絡在繼承了傳統P2P 網絡功能優勢的基礎上,通過對節點之間數據同步、節點標識、資源定位等機制的優化,在共識算法的配合下實現了所有節點中賬本數據的一致性。體系結構與協議是組成網絡的關鍵,為此,本節重點從協議實現過程分析區塊鏈P2P 網絡的工作機理。首先討論區塊鏈P2P 網絡中的數據傳輸協議的工作過程,然后分析應用于超級賬本的Gossip協議。

2.2.1 區塊鏈P2P網絡的數據傳輸協議

在其論文“Bitcoin:a peer-to-peer electronic cash system”[26]中使用非結構化對等網絡來傳輸交易和區塊數據,節點可以自由地加入或退出網絡,通過PoW共識算法實現各節點中賬本的一致性,通過基于公鑰密鑰的身份管理機制實現交易信息的匿名化,開創了加密數字貨幣的先河;以太坊(Ethereum)[27]采用結構化對等網絡,將利用ECDSA-secp256k1算法生成的公鑰經一系列哈希變換后再通過Base58編碼生成64 Byte的字符串作為節點ⅠD,統一的編址方案實現了資源的快速定位;超級賬本(hyperledger)[28]采用混合式對等網絡,所有節點都是committer(記賬節點),部分節點會根據網絡運行和管理需要擔負endorser(背書節點)、leader(領導節點)和anchor(錨節點)的職責。本節選擇比特幣P2P 網絡進行具體分析。

比特幣P2P 網絡中的每一個節點都會維護一個節點列表(peer list),該列表中存儲著可供連接的鄰居節點ⅠD,該列表通過基于UDP 協議的節點發現機制建立和更新,當節點之間需要傳輸數據時,節點通過采用TCP協議與其他對等節點進行交互。下面,基于區塊鏈系統的典型運行場景,較為系統地分析P2P網絡的工作機制,其中version 和verack 消息用于節點之間建立連接,addr 和getaddr 消息用于鄰居節點之間交換路由信息,getblocks、inv和getdata消息用于節點之間的數據傳輸,tx消息用于發送交易數據。主要操作過程如下[29]:

(1)新節點加入。當區塊鏈系統中有新節點加入時,可以通過類似TCP三次握手機制建立與相鄰節點之間的連接。如圖2(a)所示,新加入節點A 廣播version消息,鄰居節點B 在接收到該消息后檢查消息內容,如果與自己軟件版本相兼容,則向節點A回復verack消息,經進一步交互后新節點A將建立與節點B之間的連接。

圖2 區塊鏈P2P網絡協議工作示意圖Fig.2 Blockchain P2P network protocol working diagram

(2)地址告知與獲取。一旦新節點加入后,新節點便向鄰居節點廣播自己的地址addr 消息。鄰居節點在接收到addr消息后繼續將其向前廣播,從而使更多節點學習到節點A 的地址,進而知道網絡中有新節點加入。新節點除將自己的地址廣播給其他節點外,還可根據地址維護需要通過getaddr消息來獲取鄰居節點上保存的地址列表信息,具體交互方式如圖2(b)所示。

(3)區塊數據同步。由于新加入節點只知道內置的創世區塊(genesis block),所以為了實現賬本數據的一致性,需要同步區塊高度值最大的區塊數據。如圖2(c)所示,當新節點加入后,與鄰居節點之間分別通過getblocks消息交換各自的區塊高度值,其中高度值大的一方將向高度值小的一方發送僅包含區塊清單的inv 消息。區塊高度值大的一方在接收到區塊高度值小的一方的getdata 請求消息后,將通過block 消息向對方推送區塊數據,最終實現兩節點中區塊數據的完全一致。

需要說明的是:輕量級SPV節點之間不需要同步完整的區塊鏈數據,只需要同步區塊頭部數據,具體使用getheaders和headers消息實現,消息交互過程如圖2(d)所示。

(4)交易數據的廣播。當某一節點生成一筆交易時,為了盡快將該筆交易打包進區塊從而得到確認,需要經私鑰簽名后再封裝在inv 消息中廣播給鄰居節點。鄰居節點通過getdata 響應消息請求對方發送完整的交易數據,交易生成節點在接收到getdata響應消息后將使用tx發送交易數據,鄰居節點在接收到交易數據后利用公鑰對交易數據的合法性進行驗證,通過驗證的合法交易數據存儲在節點的內存中。此操作將會持續下去,接收到交易數據的節點使用相同的方式轉發交易數據,直到轉發給所有節點。其中,當節點為礦工時,將會把交易打包進區塊,再通過PoW 共識算法基于節點的算力競爭記賬權。

(5)探測節點是否處于存活狀態。節點會定期向鄰居節點發送ping 消息來探測是否處于存活狀態。如果接收到鄰居節點返回的pong 響應消息,則說明該鄰居節點處于存活狀態。默認情況下,在20 min內未對ping消息作出響應的節點被認為已經下線。

2.2.2 Gossip協議

Gossip協議[30]也稱為流行病協議(epidemic protocol)或流言算法、疫情傳播算法等,主要用于分布式數據庫系統不同節點之間副本數據的同步。在分布式數據庫中,不同節點組成一個非結構化對等網絡,Gossip 協議實現了在限定時間范圍內同一數據在所有節點上的最終一致性。目前,Gossip 協議已應用在比特幣系統和Fabric等項目中,Facebook開發的Cassandra[31]通過Gossip協議實現了分布式結構化數據存儲。在區塊鏈超級賬本(hyperledger Fabric)中,通過Gossip協議實現對節點發現、節點檢測以及節點上路由列表信息的更新等功能。

Gossip協議的實現方式非常多,每一種應用場景都可以根據具體要求對協議的具體實現進行優化或“定制”。通常情況下,Gossip 協議在執行時是由種子節點發起,當某一個種子節點在自身狀態發生變化后需要向其他節點告知時,會隨機選擇鄰居節點進行廣播,收到該廣播消息的節點在更新自己的節點列表信息的同時,也會將收到的消息繼續廣播出去。后續節點重復該廣播過程,直至網絡中所有的節點接收到該消息。Gossip協議的消息傳播方式分為反熵(anti-entropy)傳播和謠言(rumor-mongering)傳播,其中反熵以確定的周期隨機選取某個節點,然后通過互相交換數據的方式實現兩個節點數據的一致性;謠言傳播是指某個節點有了新消息后立即轉換到活躍狀態,并周期性地將該消息發送給隨機選取的未被感染的節點(首次感染),被感染的節點將接收到的消息發送給其他未被感染的節點(二次感染),直至所有的節點接收到該消息。反熵傳播方式主要用于新加入節點的數據初始化過程,而謠言傳播方式適用于分布式系統中的數據同步。以謠言傳播方式為例,如圖3所示為Gossip協議執行的示意圖。首先,源節點周期性地廣播Gossip 消息;然后,接收節點(被感染節點)隨機選擇k個尚未感染的鄰居節點繼續廣播該消息(圖4中每次選擇的鄰居節點數為3)。收到消息的節點不再將該消息廣播給發送節點,即消息的廣播有單向的;經過一段時間后,網絡中的所有節點都將收到該消息,數據同步結束。

圖3 Gossip協議消息傳播模型示意圖Fig.3 Schematic diagram of Gossip protocol message propagation model

圖4 Fabric區塊鏈P2P網絡Fig.4 Fabric blockchain P2P network

Gossip協議支持節點頻繁地加入和退出操作,具有良好的分布式容錯特性和健壯性,能夠以完全去中心化方式實現系統狀態的最終一致性。Gossip 協議對消息的傳播支持推(push)、拉(pull)和推/拉(push/pull)3種類型。在一個通信周期內,每種類型所需要的交互次數和收斂時間不同,應用效果也不一樣,但目的都要實現數據的最終一致性。但是,Gossip協議會產生消息傳播的延時和對網絡帶寬的占用,不適合要求對消息實時傳播的應用場景。另外,同一節點可能會多次接收到相同的消息,存在消息傳播冗余的現象。

2.3 典型應用場景中的區塊鏈P2P網絡

對于任一區塊鏈系統(公有鏈、聯盟鏈或私有鏈)來說,節點發現是節點加入網絡的第一個環節。根據節點是否為全新節點,將區塊鏈P2P網絡中的節點分為初始節點和重啟節點兩種類型。其中,重啟節點可以利用前期已有的地址信息建立與其他可用節點之間的連接,而初始節點需要通過完整的消息交互建立與鄰居節點之間的聯系。下面,分別結合比特幣、以太坊和超級賬本等應用場景,分析區塊鏈P2P網絡的工作機理和應用特點。結合比特幣、以太坊和超級賬本3 類典型應用場景,本節分別介紹P2P網絡在每一類場景中的功能實現和應用特點。

2.3.1 比特幣系統中的P2P網絡

中本聰在設計比特幣系統原型時就采用了P2P 方式來組織和管理不同的節點,并為去中心化思想的實現提供了安全保障。同時,比特幣系統中的P2P網絡更加接近傳統P2P網絡的特征,尤其是P2P網絡中節點的隨機加入和離開機制為比特幣系統的開放性奠定了基礎。借鑒了傳統P2P 網絡的工作機制,在比特幣系統中,初始節點發現一般通過種子節點(seed node)來實現。根據實現方式的不同,比特幣系統中的種子節點通常分為DNS 種子節點和硬編碼(hard code)兩種方式。其中,DNS種子是由比特幣社區維護的一個中心化域名查詢系統,如seed.bitcoin.sipa.be;而硬編碼方式是將一些地址(這些地址稱之為“種子”)以代碼形式寫入一些穩定的節點,由這些穩定節點為新節點的加入提供地址發現服務。

比特幣系統將一些長期在線的穩定節點配置為種子節點,種子節點通過硬編碼方式保存有完整的區塊鏈網絡地址列表,可以為新加入節點提供優質的節點發現和路由列表服務。例如,比特幣系統的種子節點可以定期通過Net.AdvertiseLocal()方式將本地地址列表以廣播方式主動推送給其他節點,以使其他節點及時更新地址列表。另外,比特幣系統中節點將地址以LevelDB[32]格式存儲在peer.dat 數據庫系統中。LevelDB 數據庫是一個“鍵/值”(Key/Value)數據庫,主要用于存儲和管理關聯性數組,具有良好的讀寫性能,非常適合對比特幣系統中節點地址的管理要求。

2.3.2 以太坊系統中的P2P網絡

與比特幣相比較,以太坊的功能更加強大,應用場景更加豐富,相應地對節點的組織管理方式更加靈活和高效。以太坊系統中的P2P 網絡在借鑒了比特幣系統中P2P網絡應用特點的基礎上,結合以太坊功能實現進行了一些改進和優化:

(1)采用結構化對等網絡模式。通過DHT 方式實現其結構化功能,任一節點都擁有全網唯一的哈希列表中的位置ⅠD,以便于其他節點精準定位。

(2)具體使用KAD 協議。為了更好地適應網絡中節點頻繁加入和退出的需要,以太坊中使用了KAD 協議。KAD 協議是一種對DHT 的具體實現,是第三代P2P網絡中節點動態管理和路由的協議,與其前兩代協議(如Chord[33]、CAN[34]、Pastry[35])相比,KAD以全局唯一ⅠD 標記對等網絡節點,以節點ⅠD 異或(XOR)值度量節點之間的距離,即Dis(M,N)=XOR(M,N)。

(3)種子節點。與比特幣系統一樣,以太坊系統同樣將穩定的節點配置為種子節點,以便為其他節點提供更優質的節點列表服務。與比特幣系統一樣,種子節點的引入,在方便了對新節點管理的同時,在一定程度上弱化了P2P網絡的去中心化特征,影響了網絡的安全性。

(4)地址數據庫。以太坊系統采用與比特幣系統相同的LevelDB格式數據庫來保存地址信息。

(5)地址查詢。由于以太坊節點使用全網唯一的結構化編址方案,所以可以根據KAD 表結構快速定位到待查詢節點ⅠD的具體位置。

隨著以太坊應用范圍的不斷擴展,研究人員對以太坊系統中P2P 網絡的節點管理方式進行了進一步分析和優化。例如,通過對以太坊的網絡測量,發現網絡中可能影響正常路由的節點[36],以及礦工的節點位置對挖礦結果的影響[37]。

2.3.3 超級賬本中的P2P網絡

比特幣創造了區塊鏈技術應用的神話,以太坊以圖靈完備和智能合約使區塊技術走出數字加密貨幣,廣泛服務于金融、醫療、公共服務、供應鏈、智能制造、保險、游戲等眾多領域。比特幣和以太坊系統是公有鏈應用的典型,而超級賬本為聯盟鏈應用提供了一個開源技術架構。目前,主流的超級賬本項目有Monax 和Ⅰntel 的Hyperledge Burrow[38]、Soramitsu 的Hyperledge Ⅰroha[39]、ⅠBM和Digital Asset的Hyperledge Fabric[40]等,其中Fabric是目前主流的開源聯盟鏈產品之一,主要有Fabric 0.6和Fabric 1.0兩個版本。

Fabric 1.0 采用半中心化模式,根據企業級應用的具體需要,基于網絡中扮演的角色不同,將節點分為NP(validating peer,驗證節點)、NVP(nove validating peer,非驗證節點)以及成員管理(membership services)節點3種類型。其中,成員管理服務為了適應企業級應用,借鑒了傳統身份管理的功能,實現成員注冊、身份管理、交易審計等功能,以確保平臺應用的安全性;VP節點負責共識達成、驗證和確認交易以及維護賬本數據的一致性;NVP節點主要對從客戶端接收到的交易進行驗證,并將驗證通過的合法交易轉發給VP節點,由VP節點通過共識算法寫入區塊。Fabric 0.6 中VP 和NVP 節點之間的關系如圖4(a)所示。

Fabric 1.0中沒有了VP和NVP節點,而是由Orderer(排序)、Endorser(背書)和Committer(記賬)節點替代,具體如圖4(b)所示。其中,作為企業級的應用,客戶端首先需要向管理成員節點(一般為企業CA)申請一個入網證書用于身份驗證和對交易進行簽名??蛻舳松梢粋€提案(proposal)后發送到背書節點,背書節點對通過驗證的提案交由鏈碼chaincode 進行模擬執行,并將經過背書的結果返回給客戶端;隨之,客戶端在接收到背書節點的提案響應(proposal response)消息后,將其封裝成一筆交易發送給排序節點進行排序操作,將創建一個新的有序交易的區塊,然后將新區塊發送給記賬節點;每個記賬節點在收到新區塊之后會對其驗證(包括簽名、背書策略以及讀寫集的校驗等),在通過驗證后將區塊鏈接到主鏈的尾部。

另外,Fabric 種子節點并沒有采用比特幣和以太坊中的硬編碼方案,而是通過配置文件加載方式實現對節點地址的動態獲取與管理。具體講,Fabric采用了近年來廣受歡迎的開源配置解決方案Viper[41],不但可以動態獲取本地地址參數,而且可以獲得遠端節點的配置文件消息。節點通過Viper獲取到的信息可以在無需重啟系統的情況下自動生效。另外,Fabric采用Gossip協議實現P2P網絡中節點之間的數據交互與最終一致性。

3 區塊鏈P2P網絡的安全

3.1 區塊鏈P2P網絡的主要安全問題

P2P 網絡為區塊鏈節點的安全接入以及節點之間的通信提供基本保障,具體包括節點之間的組網模式、通信模式及通信管理等。區塊鏈系統采用不依賴于第三方的P2P組網通信方式,在全網范圍內的不同節點之間建立聯系并實現路由選擇和資源查詢等服務功能。P2P網絡的安全問題必然導致區塊鏈應用的安全風險,總體來看,區塊鏈P2P網絡的安全問題主要反映在漏洞威脅、網絡分區和隱私威脅三個方面[42-43]。

3.1.1 漏洞威脅

漏洞的存在是安全問題產生的主要根源,目前大量網絡攻擊行為的實施都是借助漏洞來實現的。然而,漏洞的存在是不可避免的,只能在發現后進行修復。對于攻擊者來說,任何已存在但未修復的漏洞都具有利用的價值。區塊鏈P2P網絡是一種典型的覆蓋網絡,用于為區塊鏈節點之間提供一種分布式的自組織連接方式。但是,由于P2P 網絡中的節點接入和退出自由,而且不存在身份認證和數據驗證(正常通信情況下,不涉及到挖礦操作)等管理機制,所以存在較大的安全風險:

(1)易遭受惡意攻擊。攻擊節點可以惡意傳播病毒、木馬、蠕蟲等惡意代碼,破壞正常的網絡運行機制。也可以對一些重要節點(如礦工節點、礦池節點等)發起DDoS(distributed denial of service,分布式拒絕服務)攻擊[44],或對指向特定節點的路由實施路由攻擊。

(2)攻擊行為難以檢測。傳統的基于邊界安全的防火墻和入侵檢測技術無法對P2P流量進行有效管理,而且針對P2P 網絡節點的攻擊源較難進行溯源和實施阻斷。雖然零信任技術[45]從理論上可以解決這一問題,但是零信任網絡的大規模部署目前尚存在較大的困難。

(3)節點間存在資源和權限的差異性。任何網絡都存在物理和邏輯上的邊界,區塊鏈P2P 網絡也是如此。區塊鏈P2P網絡中,節點會因為在網絡中的具體位置以及加入網絡的時間先后,存在對資源占有的不平衡性。一般情況下,位于網絡中心位置以及較早加入網絡且運行穩定(長期在線)的節點占有資源較多,如果這些重要節點被惡意控制后,就可能會限制其他節點享有數據資源,或對其他節點的路由及資源查詢進行誤導。在區塊鏈系統中,當輕量級SPV節點需要訪問全節點中的賬本數據時,更容易被全節點限制訪問。

(4)智能合約安全漏洞的利用。智能合約以其具有的部署靈活、公開透明、調用便捷等特點,豐富了區塊鏈的應用功能。與此同時,智能合約存在的合約安全和隱私安全等問題已嚴重影響著區塊鏈應用的進一步發展[46]。由于合約部署在公開節點上,這些節點自身的安全以及防范外界攻擊的能力對提升P2P 網絡的安全性顯得極為重要。

針對區塊鏈P2P 網絡安全漏洞的產生原因較為復雜,目前的研究主要集中于協議設計缺陷和軟件實現中存在的漏洞兩個方面,其目標是在提升P2P網絡運行性能的同時,加強對以P2P網絡為重點的漏洞檢測技術的研究。

3.1.2 網絡分區

網絡分區的概念較早出現在分布式系統中,是分布式系統的一種故障類型[47]。在分布式集群中,受網絡通信質量的影響,部分節點之間會因為無法建立連接從而使集群中的節點形成不同的子集,且不同子集之間相互隔離。

區塊鏈基于P2P 網絡在共識算法的作用下實現不同節點上賬本的一致性。區塊鏈系統中一旦出現網絡分區,不同分區形成不同節點子集,每個子集分別維護各自的賬本,破壞了網絡中共識算法的一致性。在區塊鏈網絡中,全節點上存儲著完整的賬本數據,而輕量級SPV節點只保存有區塊頭數據和交易相關的細節信息,輕量級SPV 節點需要通過全節點上的數據來更新自身節點的數據。另外,當輕量級SPV節點需要對某一筆交易是否真實存在進行驗證時,需要借助周邊的全節點來完成。區塊鏈系統的這種工作方式,很容易被攻擊后形成網絡分區。攻擊節點通過主動探測或被動監聽方式在獲取到網絡拓撲信息后,就可以確定被攻擊的目標節點,再控制目標節點周圍的鄰居節點從而形成網絡分區,進一步控制網絡路由和資源查詢。

目前的比特幣和以太坊系統都沒有提供有效的防范網絡分區的功能,更沒有研究網絡分區時的共識算法優化機制[48]。未來研究仍然集中于P2P 網絡協議優化和開發適應網絡分區環境的區塊鏈共識協議兩個方面。

3.1.3 隱私威脅

隱私專指用戶不想公開的個人信息,數據安全是實現隱私保護的前提[49],用戶不愿意公開的姓名、年齡、家庭住址等信息,都屬于隱私的范疇。隱私的確定并非一成不變的,它會根據不同的時間和知悉對象發生變化,即隱私具有針對性和時限性。

區塊鏈系統中的大部分隱私與交易相關[50]。如圖5所示的是從blockchain.info網站公開顯示的比特系統的一筆交易信息,主要包括交易輸入(From)、交易輸出(To)和元數據三部分內容,詳細描述了本筆交易的來源和去向以及相互之間的關系。

從圖5中可以看出,比特幣系統中與交易相關的信息都是公開的。雖然這些與用戶身份相關的公開信息(如交易地址、輸入與輸出地址之間的關系等)都以假名機制經過了匿名化處理,但由于賬本數據的公開性以及交易之間的關聯性,攻擊者仍然可能會窺探到用戶隱私。目前,已有大量研究表明,通過對比特幣賬本數據的分析,再借助互聯網節點對應的ⅠP地址及其他公開信息,可以確定交易者的身份。

隱私保護是目前區塊鏈研究的重點[51-52],未來研究將主要針對區塊鏈中的數據隱私泄露問題,加強針對P2P網絡通信隱私以及針對網絡節點隱私的研究,同時結合區塊鏈的跨鏈操作需要,對跨鏈操作中產生的隱私泄露風險進行分析。在此基礎上,基于系統思維方式,加強區塊鏈技術(如智能合約、側鏈等)和應用過程中的隱私保護研究。

表3從安全威脅的主要表現、安全威脅的主要產生原因以及安全威脅程度等方面,對漏洞威脅、網絡分區和隱私威脅進行了比較分析。

表3 針對區塊鏈P2P網絡主要安全威脅的比較Table 3 Comparison of major security threats to blockchain P2P networks

3.2 典型攻擊與防范方法

針對前文分析的區塊鏈P2P網絡安全問題,并通過對近年來發生的區塊鏈安全事件的分析,本節重點對區塊鏈P2P網絡中的DDoS攻擊、Sybil攻擊和Eclipse攻擊的實現原理和防范思路進行討論。

3.2.1 DDoS攻擊

DDoS 攻擊[53]是指位于不同地點的多個攻擊者(attacker)聯合起來向受害主機(victim)同時發起攻擊,或攻擊者在控制了多臺主機(傀儡主機)后再借助這些受控主機向受害主機實施攻擊。DDoS攻擊是一種基于分布式系統的具有協同功能的大規模攻擊方式。隨著P2P 網絡的流行,DDoS 攻擊方式與P2P 網絡開始走向融合,出現了專門針對P2P網絡的DDoS攻擊方式[54]。

如圖6所示的是區塊鏈P2P網絡中DDoS攻擊的實現方式。攻擊者在實施P2P 網絡攻擊時,一般情況下,不需要像傳統DDoS 攻擊那樣利用已經發現的漏洞向傀儡機植入木馬,然后利用構建的僵尸網絡向受害主機發起攻擊,而是基于P2P 覆蓋網絡的特點,在應用層通過構建攻擊報文并利用反射式攻擊方式發起攻擊。具體講,攻擊者將受害主機的ⅠP地址和端口寫入到攻擊報文的應用層消息中,以此將P2P網絡的節點流量引向受害主機。用此方式,可以實現利用較小的請求報文來觸發較大的響應報文,進而生成巨大的攻擊數據流;同時,攻擊者還可以通過修改P2P網絡的路由信息,將攻擊數據流指向受害主機;另外,攻擊者還可以修改P2P 網絡中的資源查詢方式,形成匯聚到受害主機的攻擊流量。

圖6 P2P網絡中DDoS攻擊示意圖Fig.6 Diagram of DDoS attacks on P2P network

借助P2P網絡中節點間的通信方式,可以將P2P網絡中的DDoS 攻擊分為主動攻擊和被動攻擊兩種類型。其中,主動攻擊是指攻擊者利用P2P 協議的推(push)機制,主動向網絡中發送大量虛假信息,使得針對這些虛假信息的后續訪問都指向受害主機;而被動攻擊是指攻擊者利用P2P 協議的拉(pull)機制,被動地等待其他節點來訪問虛構的攻擊資源,再利用信息放大措施產生攻擊數據流并進一步增強攻擊效果。相對來講,主動攻擊具有可控性強、控制面廣、放大效應明顯等特點,攻擊效果要比被動攻擊好。

針對P2P網絡中DDoS攻擊的防范方法主要有建立鄰居節點之間的信任機制、對產生較大流量的節點身份進行驗證,以及加強對重要節點的保護等。當然,這些方法中部分功能的實現與區塊鏈的去中心化、去信任等機制相悖,這也是在追求安全過程中需要付出的代價。

3.2.2 Sybil攻擊

Sybil(女巫)來自于一個故事中的女主角,她患有多重人格障礙癥,不同時刻會扮演不同的角色。在P2P網絡中,Sybil 攻擊[55]是指單一節點具有多個身份,而且網絡中的其他節點對其每一個身份及其行為都認為是合法合規的。

在區塊鏈P2P網絡中,Sybil攻擊主要針對采用拜占庭容錯(Byzantine fault tolerance,BFT)共識算法的區塊鏈系統[56]。由于BFT 協議要求系統中錯誤節點數要小于節點總數的1/3 才能達成最終的一致性,為此,在Sybil攻擊中,攻擊者借助P2P網絡中節點自由加入的和離開特點,通過創建多個擁有不同身份信息的節點,以此來破壞區塊鏈系統的共識算法中的投票機制,從而產生錯誤的最終提案,具體操作過程如圖7所示。

圖7 P2P網絡中Sybil攻擊示意圖Fig.7 Diagram of Sybil attack in P2P network

針對Sybil攻擊的防范方法主要是優化區塊鏈系統共識算法,在算法中增加挖礦節點的身份識別和驗證機制,確保挖礦節點的可信性,防止惡意節點假扮成礦工進行共識挖礦。

3.2.3 Eclipse攻擊

Eclipse(日蝕)攻擊[57]主要出現在網絡分區中,是攻擊者在獲取到網絡拓撲信息后,再利用該拓撲信息實現網絡分區的一種典型的攻擊方式。攻擊者首先獲取到網絡拓撲信息,然后確定受害節點在網絡中的具體位置信息,接著通過限制外界與受害節點之間的通信,甚至使受害節點完全與外界隔離,使受害節點無法接收到外部節點的信息,致使受害節點所在網絡中節點存儲的區塊鏈賬本數據與外界不一致,破壞了區塊鏈分布式節點中數據的一致性。與此同時,攻擊者還可以有目的地控制受害節點所在的子網絡,使該子網絡從整個網絡中隔離,形成網絡分區。攻擊者通過有效隔離受害節點,控制甚至征用受害節點的算力,為進一步實施雙花攻擊或自私挖礦(selfish mining)[58]提供條件。

在區塊鏈P2P網絡中,完整的路由信息是實現全網不同節點之間信息交互的基礎。而在Eclipse 攻擊中,攻擊者不斷向受害節點的鄰居節點(傀儡節點)發送經事先偽造的虛假路由更新信息,使鄰居節點中充斥著大量無效路由信息。當鄰居節點逐個變成傀儡節點時,形成一個以受害節點為中心的網絡分區,外界與受害節點之間的信息交互(路由查詢、資源搜索等)被攻擊者掌控。如圖8 顯示了區塊鏈P2P 網絡中Eclipse 攻擊的基本實現原理。

圖8 P2P網絡中Eclipse攻擊示意圖Fig.8 Eclipse attack diagram in P2P network

區塊鏈系統中,針對Eclipse 攻擊的防范方法主要是修改節點路由信息的更新規則,對單位時間內更新的路由條目進行必要的限制,防止大量虛假路由信息的更新。同時,采用相應策略,當進行路由信息更新時,對新加入路由信息的有效性進行測試。還有,限制從單一節點(一般為攻擊者節點)接收需要頻繁更新的路由信息。

為便于對三類典型攻擊方式的理解,表4分別從主要攻擊對象、主要攻擊目的、主要防范方法、關聯攻擊方式和實施難易度等方面對其進行了比較分析。

表4 針對區塊鏈P2P網絡的三類典型攻擊方式的比較Table 4 Comparison of 3 types of typical attacks against blockchain P2P networks

4 總結與展望

區塊鏈系統中使用的共識機制、公鑰密鑰算法、P2P網絡、經濟激勵和博弈論等理論與技術都不是專門針對區塊鏈而開發的,只是在區塊鏈技術中重新找到了自己的價值,并在應用迭代中進一步優化和完善。P2P網絡最初也是應用在音樂、視頻等多媒體服務(如目前互聯網中擁有巨大用戶量的PPS、PPLive網絡電視等),在中本聰的區塊鏈技術以及基于該技術開發的比特幣系統原型中選擇了P2P網絡作為底層通信協議。后來,隨著區塊鏈技術在加密數字貨幣中應用的深入以及向其他領域的擴展,P2P 網絡技術得到了進一步發展和完善。與此同時,區塊鏈P2P技術自身以及P2P網絡的安全性也在一定程度上影響著區塊鏈的發展。目前,針對區塊鏈P2P網絡和安全問題的研究,主要在以下幾個方面存在一定的挑戰:

(1)針對區塊鏈P2P網絡的流量分析。區塊鏈作為一項實現去中心化應用的底層技術,并非所有應用在全球都是合法的,例如,中國政府就嚴厲打擊比特幣挖礦和交易行為。然而,從技術層面并不能因為禁止挖礦就全面禁止其他的區塊鏈應用,反而應通過區塊鏈應用創新來促進經濟社會高質量發展。為此,需要通過綜合運用深度學習、大語言模型等技術和方法,加強對互聯網流量特征的動態識別和分析,從技術層面限制非法應用,保護合法網絡流量。

(2)技術研究與應用創新。區塊鏈是一項繼承和綜合了多項成熟技術的創新應用,強化單一技術的研究和多技術之間深度融合是推動區塊鏈技術發展的關鍵。針對區塊鏈P2P網絡,需要對覆蓋網絡路由及不同節點信息的一致性進行優化,對P2P網絡尤其是非結構化對等網絡中的信息檢索機制進行優化,對大型P2P網絡中因節點頻繁加入和退出對網絡產生的抖動特性進行研究,對P2P網絡分區問題產生的機理和應對策略進行系統分析,對基于DHT 的P2P 網絡中數據的冗余機制和高可用性進行研究等。與此同時,需要堅持問題導向,在工程實踐中加強不同技術之間的協同和應用優化,并確保其安全性。

(3)區塊鏈網絡安全。安全是一個基礎問題,也是一個謀長遠的問題,區塊鏈網絡安全更是如此。一方面,區塊鏈P2P 網絡自身持有其安全特質,如利用P2P網絡的分布式存儲和處理特征防止單一節點攻擊,利用數據存儲的多副本特征提升系統的容錯能力,利用P2P網絡的拓撲特征增強系統的兼容性和可擴展性等。另一方面,區塊鏈P2P 網絡因其具有的網絡開放性、節點加入與退出的隨意性、單一節點對整個網絡信息了解的有限性等特點,在安全方面存在一定的挑戰。針對這些區塊鏈P2P 網絡的安全問題,需要從信任認證、惡意節點檢測、攻擊容忍、攻擊限制、礦池挖礦規則和算法優化等方面進行系統研究,盡可能避免區塊鏈網絡安全中木桶效應現象的出現。

另外,針對區塊鏈網絡的用戶隱私保護也是一個重要的研究領域,隨著區塊鏈技術的不斷發展和應用的不斷普及,以及人們對隱私保護意識的不斷增強,針對區塊鏈P2P 網絡及隱私保護研究的意義和價值將會進一步突顯。同時,無線Mesh 網絡[59]在區塊鏈系統中的應用也是一個應用和研究熱點。

猜你喜歡
比特路由區塊
區塊鏈:一個改變未來的幽靈
區塊鏈:主要角色和衍生應用
探究路由與環路的問題
區塊鏈+媒體業的N種可能
讀懂區塊鏈
比特幣還能投資嗎
比特幣分裂
比特幣一年漲135%重回5530元
PRIME和G3-PLC路由機制對比
WSN中基于等高度路由的源位置隱私保護
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合