針對DHT的花式攻擊與精簡對策

DHT夠安全嗎?DHT上能發行密碼貨幣嗎?

Juin Chiu
Taipei Ethereum Meetup
7 min readJun 2, 2019

--

前言

開放且去中心化的DHT早在區塊鏈問世前就已蔚為風行,然而網路世界上並不存在完美無暇的協定,DHT也不免有一些設計缺陷。在這篇文章中,筆者將延伸前文來說明DHT的若干弱點以及可能的對策。

關於紙條協定的補充

接續前文的紙條協定:

紙條協定1. 紙條正面需須標註目標T,紙條背面須標註請求
2. S與T的距離為其二人座位的直線距離
3. T的鄰員都知道T的小考分數
4. S只知道坐在S鄰員的座號並寫在鄰員名單中
5. S只能傳紙條給在S鄰員名單中的R且R與T的距離須小於S與T的距離
查詢在上課時傳紙條給X號同學,問他的小考分數

然而以上的敘述並未說明一個關鍵的環節:發起查詢的人要如何得知目標的座號(鍵值)?在這裡,我們必須使用座位表來得知目標的座號:

座位表1. 座位表是座號與位置的對照表
2. 座位表是得知座號的唯一方式
3. 座位表需不停地在所有人之間流傳
4. 全班只有一份座位表

座位表其實就是DHT的索引表,也就是鍵值的列表,它可以讓節點掌握DHT上可查詢內容的鍵值。為什麼需要索引表?這是由於在最初只有在DHT寫入內容的節點知道該內容的鍵值,其他節點只能透過索引表獲得DHT全局的概觀,這對檔案分享類的應用(例如BitTorrent)尤其重要。

針對DHT的攻擊手法

接下來,筆者將繼續延續紙條協定來簡述這些攻擊的精要。許多文獻都曾探討過針對DHT的攻擊手法,它們大致可以總結成7種。我們假設攻擊者是一個具有破壞意圖的個體,暫且稱呼其為E;而受害者可能是單個或多個個體,我們稱呼其為V:

女巫攻擊(Sybil Attack):很多E的同夥加入班級,E一個人支配了全班。

在DHT中,能代表節點「身份」的只有節點編號,然而節點編號過於單薄且易於修改,因此攻擊者可以大量製造虛假的身份潛入並進而控制整個網路。身份是一個難解的問題,在當今的網路協定我們只能倚賴少數的權威(例如政府或網路服務商)提供對身份的認證,這顯然不是去中心化且注重隱私的做法。

日蝕攻擊(Eclipse Attack):E串通了V的鄰員,使V被孤立,且E能得知V所有紙條的內容。

由於節點編號可以被自由更動,因此攻擊者可以選定特定受害者並修改攻擊節點的編號使其與受害者距離接近,如此受害者的路由表內就會被攻擊者的節點佔據。一旦受害者被「隔離」在攻擊者的網路內部,攻擊者就可以阻斷、監控、甚至竄改受害者的查詢訊息。

擾動攻擊(Churn Attack):E在上課途中經常進出教室,讓V查不到分數,且影響V訊息接力的效率

由於加入/退出DHT幾乎不需要耗費任何資源,攻擊者可以頻繁地進出網路,使鄰近節點疲於更新路由表,造成網路阻塞及離線資源無法取得。尤其在Chord缺乏冗余(路由表在每個區間只對應一個節點)與路由更新流程相當繁瑣(需要4個步驟)的條件下,其對擾動攻擊更是無法抵抗。

敵對路由(Adversarial Routing):E亂傳V的紙條。

在DHT開放的環境下,參與者的行為是不可預期的,攻擊者可以無視路由表而將訊息接力給攻擊者的隔離網路或直接拒絕處理,這種攻擊對於缺乏冗余的Chord來說相當棘手。一個運作良好的開放分散式系統需奠基於參與者的正常行為;而一個設計良好的開放分散式系統則要能確保系統運作良好,意即其能獎勵正常行為懲罰隨機行為或者能約束隨機行為的發生。在這樣的定義之下,缺乏獎懲機制與約束機制的DHT並不是一個設計良好的開放分散式系統。

污染攻擊(Pollution Attack):E竄改自己的分數,使V拿到錯誤的分數。

污染攻擊與敵對路由手法同樣地簡單而暴力:攻擊者直接回傳錯誤的結果使查詢失敗,對缺乏冗余的Chord也同樣很棘手。儘管只需比對內容的雜湊值與鍵值就能檢查內容是否受到污染,然而具足夠規模的污染仍能癱瘓整個網路。

索引投毒(Index Poisoning):E在座位表傳到自己時,竄改V的座號。

DHT必須透過索引表來獲得對全局的概觀,而索引表通常由第三方服務進行管理(例如BitTorrent的種子網站),這些服務對檔案分享類的應用至關重要。然而,第三方服務無法阻止攻擊者對DHT大量注入無意義甚至有害的資源(例如木馬程式)污染索引表。這些有害資源偽裝成有意義的資源(你知道的)以引誘使用者下載,且攻擊者自身幾乎不需要負擔任何成本(不佔用自身頻寬)。

服務阻斷(Denial of Service):E不停地傳紙條,讓V沒空傳其他人的紙條。

服務阻斷就是攻擊者透過各種手段耗竭服務提供者有限的資源導致其無法再提供任何服務,以達成癱瘓服務的目的。由於任何協定都受限於網路頻寬運算資源,因此對DHT只需發起大量查詢令節點疲於應付,便能使其資源耗竭(記憶體/硬碟空間/頻寬等)。儘管DHT具有去中心化與規模化的特性,在體質上對服務阻斷有較高的抗性,但仍無法倖免於具足夠規模的服務阻斷。

對弱點的解決對策

上述的攻擊情境可以總結出幾個主要弱點:

  1. 可以隨意進出教室(加入/退出網路的成本極低)
  2. 可以不斷地傳紙條詢問分數(服務請求成本極低)
  3. 缺乏做好事的動機(缺乏獎懲機制)
  4. 缺乏對隨機行為的約束(缺乏共識機制)
  5. 可以輕易形成多數(身份單薄易於製造)

事實上,這些並非DHT獨有的問題 — 幾乎所有開放分散式系統都必須處理這些問題。對DHT來說,這些方案的對策大多很直觀:

針對第1點的對策是讓進出教室的成本提高,例如 S/Kademlia 就是其中一種應用此對策的改進方案:要先交作業才能進教室每次進教室的座號不同,跟作業成績有關

針對第2點的對策是使用者付費,讓詢問分數者需支付手續費(或其他稀缺資源);針對第3點的對策是讓表現好的記功、表現不好的記過,而記功多的可以參與更多訊息接力,獲得更多利益;記過多的則會逐漸被排除於網路外,失去參與資格。

針對第4點的對策是每個人在行動前需經所有人投票表決,投票者可以檢驗個別行為是否符合規則,用多數行動(Majority Action)來取得對個別行動的共識(Consensus)以藉此約束隨機行為。Robust Communication Protocol 即採取這種策略:每個人要傳紙條前需與自己的左右鄰員投票表決。

針對第5點,除了使用權威認可的身份之外,其中一個可能的方案是去中心化身份(Decentralized Identity),自從區塊鏈問世後這個領域被再度重視。

DHT上能發行密碼貨幣嗎?

當然可以,然而此貨幣之安全性是堪憂的,因為一個穩定可靠的貨幣必須奠基於其對隨機行為的抗性,這種抗性稱為拜占庭容錯(Byzantine Fault Tolerance),這也是區塊鏈一個重要的性質。

具備共識機制的DHT是一個值得探索的改進方案。有趣的是,這樣的改進方案被視為是一種區塊鏈分片(Sharding):各分片維護自己的共識,不同分片之間透過基於鍵值的路由(Key-based Routing)來削減對主鏈的依賴。

Holochain 是一個基於DHT的去中心化應用程式平台(Dapp Platform),它對貨幣則持有不同的看法:貨幣也可以是一種只存在於交易雙方之間的相互信用(Mutual Credit),這是一個很有趣的觀點,然而這並未解決DHT的根本缺陷。

結語

DHT除了逐漸被視為區塊鏈分片的一種思路,也開始在一些區塊鏈專案中成為負責資料儲存的基礎建設。這篇文章總結了DHT的弱點以及可能的對策,希望讀者能對DHT的優勢劣勢有更清晰的認識。

--

--

Juin Chiu
Taipei Ethereum Meetup

Blockchain researcher, dev, co-organizer of Taipei Ethereum Meetup, focusing on consensus protocol, self-sovereign identity and anonymity network.