前言
開放且去中心化的DHT早在區(qū)塊鏈問世前就已蔚為風行,然而網(wǎng)路世界上并不存在完美無暇的協(xié)定,DHT也不免有一些設計缺陷。在這篇文章中,筆者將延伸前文來說明DHT的若干弱點以及可能的對策。
關于紙條協(xié)定的補充
接續(xù)前文的紙條協(xié)定:
紙條協(xié)定
1.紙條正面需須標注目標T,紙條背面須標注請求
2. S與T的距離為其二人座位的直線距離
3. T的鄰員都知道T的小考分數(shù)
4. S只知道坐在S鄰員的座號并寫在鄰員名單中
5. S只能傳紙條給在S鄰員名單中的R且R與T的距離須小于S與T的距離
查詢
在上課時傳紙條給X號同學,問他的小考分數(shù)
然而以上的敘述并未說明一個關鍵的環(huán)節(jié):發(fā)起查詢的人要如何得知目標的座號(鍵值)?在這里,我們必須使用座位表來得知目標的座號:
座位表
1.座位表是座號與位置的對照表
2.座位表是得知座號的唯一方式
3.座位表需不停地在所有人之間流傳
4.全班只有一份座位表
座位表其實就是DHT的索引表,也就是鍵值的列表,它可以讓節(jié)點掌握DHT上可查詢內(nèi)容的鍵值。為什么需要索引表?這是由于在最初只有在DHT寫入內(nèi)容的節(jié)點知道該內(nèi)容的鍵值,其他節(jié)點只能透過索引表獲得DHT全局的概觀,這對檔案分享類的應用(例如BitTorrent)尤其重要。
針對DHT的攻擊手法
接下來,筆者將繼續(xù)延續(xù)紙條協(xié)定來簡述這些攻擊的精要。許多文獻都曾探討過針對DHT的攻擊手法,它們大致可以總結成7種。我們假設攻擊者是一個具有破壞意圖的個體,暫且稱呼其為E;而受害者可能是單個或多個個體,我們稱呼其為V:
女巫攻擊(Sybil Attack):很多E的同伙加入班級,E一個人支配了全班。
在DHT中,能代表節(jié)點「身份」的只有節(jié)點編號,然而節(jié)點編號過于單薄且易于修改,因此攻擊者可以大量制造虛假的身份潛入并進而控制整個網(wǎng)路。身份是一個難解的問題,在當今的網(wǎng)路協(xié)定我們只能倚賴少數(shù)的權威(例如政府或網(wǎng)路服務商)提供對身份的認證,這顯然不是去中心化且注重隱私的做法。
日蝕攻擊(Eclipse Attack):E串通了V的鄰員,使V被孤立,且E能得知V所有紙條的內(nèi)容。
由于節(jié)點編號可以被自由更動,因此攻擊者可以選定特定受害者并修改攻擊節(jié)點的編號使其與受害者距離接近,如此受害者的路由表內(nèi)就會被攻擊者的節(jié)點占據(jù)。一旦受害者被「隔離」在攻擊者的網(wǎng)路內(nèi)部,攻擊者就可以阻斷、監(jiān)控、甚至竄改受害者的查詢訊息。
擾動攻擊(Churn Attack):E在上課途中經(jīng)常進出教室,讓V查不到分數(shù),且影響V訊息接力的效率。
由于加入/退出DHT幾乎不需要耗費任何資源,攻擊者可以頻繁地進出網(wǎng)路,使鄰近節(jié)點疲于更新路由表,造成網(wǎng)路阻塞及離線資源無法取得。尤其在Chord缺乏冗余(路由表在每個區(qū)間只對應一個節(jié)點)與路由更新流程相當繁瑣(需要4個步驟)的條件下,其對擾動攻擊更是無法抵抗。
敵對路由(Adversarial Routing):E亂傳V的紙條。
在DHT開放的環(huán)境下,參與者的行為是不可預期的,攻擊者可以無視路由表而將訊息接力給攻擊者的隔離網(wǎng)路或直接拒絕處理,這種攻擊對于缺乏冗余的Chord來說相當棘手。一個運作良好的開放分散式系統(tǒng)需奠基于參與者的正常行為;而一個設計良好的開放分散式系統(tǒng)則要能確保系統(tǒng)運作良好,意即其能獎勵正常行為及懲罰隨機行為或者能約束隨機行為的發(fā)生。在這樣的定義之下,缺乏獎懲機制與約束機制的DHT并不是一個設計良好的開放分散式系統(tǒng)。
污染攻擊(PolluTIon Attack):E竄改自己的分數(shù),使V拿到錯誤的分數(shù)。
污染攻擊與敵對路由手法同樣地簡單而暴力:攻擊者直接回傳錯誤的結果使查詢失敗,對缺乏冗余的Chord也同樣很棘手。盡管只需比對內(nèi)容的雜湊值與鍵值就能檢查內(nèi)容是否受到污染,然而具足夠規(guī)模的污染仍能癱瘓整個網(wǎng)路。
索引投毒(Index Poisoning):E在座位表傳到自己時,竄改V的座號。
DHT必須透過索引表來獲得對全局的概觀,而索引表通常由第三方服務進行管理(例如BitTorrent的種子網(wǎng)站),這些服務對檔案分享類的應用至關重要。然而,第三方服務無法阻止攻擊者對DHT大量注入無意義甚至有害的資源(例如木馬程式)污染索引表。這些有害資源偽裝成有意義的資源(你知道的)以引誘使用者下載,且攻擊者自身幾乎不需要負擔任何成本(不占用自身頻寬)。
服務阻斷(Denial of Service):E不停地傳紙條,讓V沒空傳其他人的紙條。
服務阻斷就是攻擊者透過各種手段耗竭服務提供者有限的資源導致其無法再提供任何服務,以達成癱瘓服務的目的。由于任何協(xié)定都受限于網(wǎng)路頻寬與運算資源,因此對DHT只需發(fā)起大量查詢令節(jié)點疲于應付,便能使其資源耗竭(記憶體/硬碟空間/頻寬等)。盡管DHT具有去中心化與規(guī)?;奶匦?,在體質(zhì)上對服務阻斷有較高的抗性,但仍無法幸免于具足夠規(guī)模的服務阻斷。
對弱點的解決對策
上述的攻擊情境可以總結出幾個主要弱點:
1. 可以隨意進出教室(加入/退出網(wǎng)路的成本極低)
2. 可以不斷地傳紙條詢問分數(shù)(服務請求成本極低)
3. 缺乏做好事的動機(缺乏獎懲機制)
4. 缺乏對隨機行為的約束(缺乏共識機制)
5. 可以輕易形成多數(shù)(身份單薄易于制造)
事實上,這些并非DHT獨有的問題 — 幾乎所有開放分散式系統(tǒng)都必須處理這些問題。對DHT來說,這些方案的對策大多很直觀:
針對第1點的對策是讓進出教室的成本提高,例如S/Kademlia就是其中一種應用此對策的改進方案:要先交作業(yè)才能進教室且每次進教室的座號不同,跟作業(yè)成績有關。
針對第2點的對策是使用者付費,讓詢問分數(shù)者需支付手續(xù)費(或其他稀缺資源);針對第3點的對策是讓表現(xiàn)好的記功、表現(xiàn)不好的記過,而記功多的可以參與更多訊息接力,獲得更多利益;記過多的則會逐漸被排除于網(wǎng)路外,失去參與資格。
針對第4點的對策是每個人在行動前需經(jīng)所有人投票表決,投票者可以檢驗個別行為是否符合規(guī)則,用多數(shù)行動(Majority AcTIon)來取得對個別行動的共識(Consensus)以借此約束隨機行為。Robust CommunicaTIon Protocol即采取這種策略:每個人要傳紙條前需與自己的左右鄰員投票表決。
針對第5點,除了使用權威認可的身份之外,其中一個可能的方案是去中心化身份(Decentralized IdenTIty),自從區(qū)塊鏈問世后這個領域被再度重視。
DHT上能發(fā)行加密貨幣嗎?
當然可以,然而此貨幣之安全性是堪憂的,因為一個穩(wěn)定可靠的貨幣必須奠基于其對隨機行為的抗性,這種抗性稱為拜占庭容錯(Byzantine Fault Tolerance),這也是區(qū)塊鏈一個重要的性質(zhì)。
具備共識機制的DHT是一個值得探索的改進方案。有趣的是,這樣的改進方案被視為是一種區(qū)塊鏈分片(Sharding):各分片維護自己的共識,不同分片之間透過基于鍵值的路由(Key-based Routing)來削減對主鏈的依賴。
Holochain是一個基于DHT的去中心化應用程式平臺(Dapp Platform),它對貨幣則持有不同的看法:貨幣也可以是一種只存在于交易雙方之間的相互信用(Mutual Credit),這是一個很有趣的觀點,然而這并未解決DHT的根本缺陷。
結語
DHT除了逐漸被視為區(qū)塊鏈分片的一種思路,也開始在一些區(qū)塊鏈專案中成為負責資料儲存的基礎建設。