分散式網路資料庫
網路資料庫(NetDB)被實現為DHT,並使用Kademlia協議透過稱為泛洪路由器的節點傳播。NetDB是使I2P分散化的特徵之一。要開始參與網路,路由器將安裝NetDB的一部分。獲得部分NetDB稱為引導,是透過“重新播種”路由器進行的。預設情況下,路由器將透過查詢一些自舉域名來重新設定種子。當路由器成功建立與這些域之一的連線時,將建立傳輸層安全性(TLS)連線,路由器透過該連線下載NetDB的已簽名部分副本。一旦路由器可以到達網路中的至少一個其他參與者,則路由器將查詢自己沒有的NetDB的其他部分。
NetDB儲存兩種型別的資料:
1. RouterInfo。當訊息離開一個路由器時,它需要知道有關另一路由器的一些關鍵資料(稱為RouterInfo)。目標RouterInfo以路由器的身份作為金鑰儲存在NetDB中。為了請求資源(或RouterInfo),客戶端從被認為最接近金鑰的節點請求所需的金鑰。如果資料位於節點上,則將其返回給客戶端。否則,該節點將使用其對參與節點的本地知識,並返回其認為最接近鍵的節點。NetDB中的RouterInfo由組成:
· 路由器的標識-加密金鑰、簽名金鑰和證書。
· 可以到達的聯絡人地址-協議、IP和埠。
· 建立或釋出時。
· 選項-一組任意文字選項,例如路由器的頻寬。
· 上面的簽名,由身份的簽名金鑰生成。
2. LeaseSet指定要到達端點的隧道入口點。它指定可以直接聯絡所需目的地的路由器。它包含以下資料:
· 隧道閘道器路由器-透過指定其身份給定。
· 隧道ID-用於傳送訊息的隧道。
· 隧道到期-隧道到期的時間。
· 目標本身-與路由器身份類似。
· 簽名-用於驗證LeaseSet。
Floodfill Routers(稱為泛洪路由器)
專用路由器(稱為泛洪路由器)負責儲存NetDB。可自動或手動參與溢流池。當泛洪路由器的數量下降到某個閾值以下時,即當前網路中所有節點的6%,就會發生自動參與。發生這種情況時,將根據正常執行時間和頻寬等條件選擇一個節點作為泛洪路由器。應該注意的是,大約95%的泛洪路由器是自動的。NetDB以DHT格式儲存在泛洪路由器中。向泛洪路由器請求一個資源,該資源被認為與該金鑰最接近。為了獲得更高的查詢成功率,客戶端可以迭代查詢金鑰。這意味著,如果初始查詢請求失敗,則從下一個最近的對等方繼續查詢。
Garlic Routing(大蒜路由器)
大蒜路由是一種構建路徑或隧道的方式,I2P網路中的訊息將透過該路徑或隧道傳播。當訊息離開應用程式或客戶端時,它將被加密為收件人的公共金鑰。然後使用指定下一跳的指令對加密的訊息進行加密。郵件以這種方式遍歷每一跳,直到到達收件人為止。在郵件傳輸過程中,它與其他郵件捆綁在一起。這意味著在網路中傳播的任何訊息都可能包含許多捆綁在一起的其他訊息。本質上,蒜頭路由有兩件事:
· 提供分層加密。
· 將多條訊息捆綁在一起。
圖2展示了端到端訊息捆綁:
2P威脅、安全和脆弱性
I2P專案沒有特定的威脅模型,而是談論常見的攻擊和現有防禦。總體而言,I2P的設計是由類似於Tor處理的威脅所致:攻擊者可以在本地觀察流量,但不能觀察到透過網路的所有流量。並且假定所有密碼原語的完整性。此外,僅允許攻擊者控制網路中有限數量的對等方(該網站談論參與NetDB的節點不超過20%,受惡意實體控制的節點總數不超過該百分比)。在本節中,我們將研究影響網路的不同威脅模型。
女巫攻擊
如圖3所示,Sybil攻擊是一種眾所周知的匿名系統攻擊,其中,惡意使用者建立了多個身份,以增強對網路的控制。透過I2P網路進行這種攻擊非常困難。這是因為網路中的參與者/客戶在選擇要與之互動的對等方時會評估對等方的效能,而不是使用隨機樣本。由於在同一主機上執行多個身份會影響這些例項中每個例項的效能,因此並行執行的其他身份的數量受到有效的限制,因為它們需要為每個例項提供足夠的資源以被視為對等實體。這意味著惡意使用者將需要大量資源來建立多個身份。
Eclipse Attacks(日蝕攻擊)
在eclipse攻擊中,一組惡意節點和合謀節點安排一個好的節點只能與惡意節點通訊。因此,惡意節點的聯合欺騙好節點將其地址寫入相鄰的好節點列表。在Sybil攻擊中,單個惡意節點在網路中擁有大量的身份資訊,以控制網路的某些部分。如果攻擊者想將Sybil攻擊繼續升級為eclipse攻擊,則攻擊者將嘗試將惡意節點放置在戰略路由路徑中,以便所有流量都透過攻擊者的節點。
暴力攻擊
透過主動觀察網路在所有節點之間傳遞的訊息並嘗試關聯訊息及其路由,可以對I2P網路進行蠻力攻擊。由於網路中的所有對等節點都經常傳送訊息,因此這種攻擊是微不足道的。攻擊者可以發出大量資料(超過2GB),觀察所有節點並縮小路由訊息的節點的範圍。因為路由器間的通訊是經過加密和流式傳輸的,所以必須傳輸大量資料,即1,024位元組資料與2,048位元組資料是無法區分的。但是發動這種攻擊非常困難,為了觀察大量網路,必須是Internet服務提供商(ISP)或政府實體。
Intersection Attacks(交叉攻擊)
交叉攻擊涉及隨時間觀察網路和節點流失。為了縮小特定目標的範圍,當透過網路傳輸訊息時,將聯機的對等點相交。從理論上講,如果網路較小,則發動這種攻擊是可能的,但對於較大的網路則不可行。
拒絕服務攻擊
拒絕服務攻擊包括以下內容:
1. 貪婪使用者攻擊:當使用者消耗的資源遠遠超過他們願意貢獻的資源時,就會發生貪婪的使用者攻擊。I2P對這些攻擊有很強的防禦能力,因為預設情況下,網路中的使用者是路由器,因此透過設計為網路做出貢獻。
2. 飢餓攻擊:使用者/節點可能會試圖透過建立大量不向網路提供任何資源或服務的壞節點來發起飢餓攻擊,從而導致現有對等點透過更大的網路資料庫進行搜尋,或請求超出所需數量的隧道。試圖找到有用的節點可能很困難,因為它們與失敗或載入的節點沒有區別。然而I2P在設計上維護了所有對等點的配置檔案,並試圖識別和忽略效能不佳的節點,這使得這種攻擊變得困難。
泛洪攻擊
在泛洪攻擊中,惡意使用者將大量訊息傳送到目標的入站隧道或整個網路。
但是目標使用者可以:
· 透過訊息的內容檢測到這一點,並且因為隧道的測試失敗。
· 識別無響應的隧道,忽略它們並建立新的隧道。
· 選擇限制通道可以接收的訊息數量。
· 儘管I2P沒有針對網路泛洪攻擊的防禦措施,但泛洪網路卻異常困難。