1. 程式人生 > >S/Kademlia:實現安全Key路由的可行方法

S/Kademlia:實現安全Key路由的可行方法

摘要

安全性是完全分散式P2P系統中的常見問題。 儘管關於如何建立一個安全的基於Key的路由協議存在幾點建議,但一個可行的方法仍然無人蔘與。 在本文中,我們介紹一種基於Kademlia的安全Key路由協議,該協議通過在多條不相交的路徑上使用並行查詢來抵抗常見攻擊,用隱式密碼來限制自由節點ID生成,並引入可靠的兄弟廣播。 後者需要以安全複製的方式儲存資料。 我們分析評估了我們提出的Kademlia協議擴充套件的安全性,並模擬了對抗節點影響下多個不相交路徑對查詢成功的影響。

1介紹

長期以來,像Chord [18]或Pastry [14]這樣的結構化P2P網路只引起了研究界的興趣,但並未廣泛應用於實際網路。 現在,隨著分散式檔案共享應用程式的成功,Internet的情況發生了顯著的變化。 而且大型多人線上遊戲的新興領域也引起了人們對使用結構化P2P網路構建可擴充套件儲存和通訊服務的興趣。

完全分散的P2P系統的一個主要問題是安全問題。 已經發現了幾起針對結構化P2P網路的常見攻擊[3,16,17]。 雖然理論上存在很多如何處理此類攻擊的建議,但在構建切實可行的安全P2P網路方面幾乎沒有實踐。

目前在網際網路上使用的所有廣泛部署的結構化覆蓋網路(即BitTorrent,OverNet和eMule)都基於Kademlia [11]協議,容易受到多種攻擊[5]的影響。 在本文中,我們分析了對Kademlia網路的攻擊並提出了幾種可行的對策。

本文的其餘部分組織如下:在第2節中,我們提供了一些關於結構化P2P網路的背景知識,並介紹了Kademlia協議。 在第3節中,我們將概述對Kademlia的常見攻擊。 我們的Kademlia安全擴充套件的詳細設計在第4節中介紹。在第5節中,我們通過模擬來評估我們的設計。 最後,第6節涵蓋相關工作,第7節結束。

2背景

在本節中,我們將提供關於結構化P2P系統的一些背景資訊,並描述Kademlia協議的一些屬性。所有結構化的P2P網路提供的通用服務是基於Key的路由層(KBR)[6]。該層為來自大識別符號空間(稱為Key的識別符號)提供有效路由(典型地,n位元整數模 [圖片上傳失敗...(image-693643-1528190414384)] ,n = 128或160)。疊加層中的每個參與節點都從相同的id空間中選擇唯一的nodeId,並在覆蓋拓撲中維護具有nodeIds和鄰居IP地址的路由表。根據覆蓋協議,拓撲結構類似於環,超立方體或Bruijn圖。每個節點都負責識別符號空間的特定範圍,通常用於ID空間中接近其nodeId的所有鍵。通過這種方式,通過將訊息連續轉發到具有更接近目的Key的節點ID的覆蓋鄰居,KBR可用於有效地將訊息路由到任意key。這個KBR層可以用作分散式儲存服務等更復雜任務的構建塊。

儘管像Chord,Pastry或Kademlia這樣的結構化P2P系統提供了類似的KBR服務,但它們在路由表大小和平均查詢路徑長度等屬性方面有所不同。 在下文中,我們將重點放在Kademlia [11]協議上,因為它已經不易受幾種常見攻擊的影響,同時易於實現。

圖1. Kademlia中的路由表,其中nodeId字首為0011的節點

2.1. Kademlia

Kademlia [11]是一個結構化的點對點系統,與Chord [18]這樣的協議相比,它具有幾個優點,作為在識別符號空間中使用新的XOR度量標準點間距的結果。 由於XOR是一種對稱操作,Kademlia節點接收來自同樣在本地路由表中的同一節點的查詢查詢。 這對於節點能從查詢查詢中學習有用的路由資訊並更新其路由表很重要。 相比之下,由於覆蓋拓撲的不對稱特性,Chord需要專用的穩定協議。XOR度量也是單向的:對於任何常數x,存在恰好一個y,其距離為d(x,y)。 這確保了對相同Key的查詢沿著相同的路徑收斂,而不依賴於始發,這是快取機制的重要屬性。

在Kademlia中,每個節點選擇一個隨機的160位nodeId並維護一個由多達160個k-buckets組成的路由表。 每個k-buckets最多包含k個其他節點的三元組。 引數k是一個冗餘因子,通過跨越覆蓋節點之間的幾條不相交路徑,使路由更加健壯。 儲存區按二叉樹排列,根據節點識別符號的最短唯一字首將節點分配給儲存區。 一個nodeId字首為0011的節點的示例路由表如圖1所示。最初,一個節點的路由表由一個覆蓋整個ID空間的bucket組成。 當節點U得知新的聯絡人C時,節點U根據C的nodeId的字首將C插入適當的bucket中。 如果這個bucket已經包含k個節點並且bucket的範圍包括U自己的nodeId,則buckets被分成兩個新的buckets。 否則,新聯絡人將被丟棄。

如果節點ID不均勻分佈,則會出現問題。 在這種情況下,標準bucket拆分演算法會導致節點不知道它們的完整k鄰域。 圖2給出了一個例子。該圖顯示了nodeId字首為00的節點U的路由表。根據上面給出的拆分規則,對於字首01,只有一個儲存bucket有k個條目, 不會再分裂。 在這種情況下,與節點U最接近的節點字首為010的節點可能會丟失,導致鄰域不完整。 為了避免這種情況,Kademlia的作者在這些情況下提出也將節點U的nodeId不包含在內的分裂bucket分裂,導致U的nodeIdbucket旁邊出現不規則的子樹。 bucket分裂演算法的這個例外使協議更加複雜,因此我們在4.2節中提出了一種替代方法。

圖2.高度不平衡樹中Kademlia路由表的不規則性

3. 攻擊Kademlia

在這一節中,我們描述了對Kademlia的基於Key的路由和資料儲存的可能攻擊的分類。此外,我們提出了一個理論估計的查詢成功率在一個Kademlia網路與對手節點的一小部分。

3.1. 攻擊底層網路

我們假設底層網路層不為覆蓋層提供任何安全屬性。 因此攻擊者可能能夠偷聽或修改任意資料包。此外,我們假設節點可以欺騙IP地址,並且底層中沒有資料包的認證。 因此,對底層的攻擊可能會導致對覆蓋層的拒絕服務攻擊。

3.2.攻擊覆蓋路由

除了底層攻擊之外,還有許多攻擊會影響覆蓋層路由。 本節總結了目前已知的覆蓋穩定性攻擊。

日蝕攻擊:這種攻擊嘗試在網路中放置敵對節點,從而將一個或多個節點與其隔離,即所有訊息都通過至少一個敵對節點進行路由。 這使攻擊者可以控制覆蓋網路的一部分。 因此,日蝕攻擊可以從覆蓋網路“隱藏”一些節點。 首先,如果一個節點不能自由選擇其節點ID,其次,當它很難影響其他節點的路由表時,可以避免這種情況。 由於Kademlia青睞K-BUCKETS中的長生命節點,並且只新增節點,如果一個bucket尚未滿,只要網路啟動,後者就很容易實現。

女巫攻擊:在完全分散的系統中,不存在控制攻擊者可以獲取的nodeIds數量的例項。 因此,攻擊者可以用大量nodeIds加入網路,直到他控制網路中所有節點的一小部分為止。Douceur [8]證明,這種攻擊是無法預防的,但只能阻止。 在集中式系統中,可以讓節點用金錢支付來加入網路,並將該節點繫結到特定的自然人。 在完全分散的系統中,節點只能通過系統資源(頻寬,CPU功率等)進行授權才能“付費”。

客戶流失攻擊:如果攻擊者擁有一些節點,他可能會在網路中引發高流失,直到網路穩定失敗。 由於建議Kademlia節點在其路由表中保留長期聯絡人,因此這種攻擊對Kademlia覆蓋拓撲沒有太大影響。

敵對路由:當路由表既不響應路由資訊也不路由任何分組時,簡單地從路由表中刪除節點,影響網路路由的唯一方式是返回敵對路由資訊。 例如,敵對節點可能只是返回更接近查詢Key的其他協作節點。 這樣一種敵對節點將資料包路由到其協作者的子網中,並且查詢到的和給定Key的最近節點都不會被找到。 這可以通過使用考慮多個不相交路徑的查詢演算法來防止。 當一條路徑沒有敵對節點時,查詢成功。 因此,假設m是對抗節點的分數,d是不相交路徑的數量,(hi)路徑長度分佈,則查詢成功的概率由下式給出:

這表明,特別是對於中等數量的敵對節點,查詢演算法可以顯著受益於不相交路徑以及低平均路徑長度。

3.3. 其他攻擊

拒絕服務:敵對方可能試圖欺騙受害者以消耗其所有資源,即記憶體,頻寬,計算能力。 因此,協議需要有機制以安全的方式分配資源。 本文不考慮物理攻擊,如干擾或邊帶攻擊。

對資料儲存的攻擊: 基於Key的路由協議通常用作構建塊以實現用於資料儲存的分散式散列表(DHT)。 為了使對抗節點更難以修改儲存的資料項,相同的資料項被複制到多個相鄰節點上。 儘管本文不考慮對資料儲存的攻擊,但基於Key的路由層必須為給定的Key提供安全鄰域。

4. 設計

在本節中,我們提出一個切實可行的安全Kademlia協議。 在第4.1節中,我們介紹一種以安全方式分配nodeIds的方法。 進一步提出了一種可靠的兄弟廣播,其以安全的方式儲存複製的資料。 最後我們解釋如何保護路由表維護。

4.1. 安全的nodeId分配

從3.2節可知,攻擊者很難產生大量的nodeIds(Sybil攻擊),也不能自由選擇nodeId(Eclipse攻擊)。此外,nodeId應該認證節點,即沒有其他節點應該能夠竊取或偽造nodeId。後者可以通過以下兩種方法之一來實現:在IP地址和埠上使用雜湊值或通過雜湊公鑰。第一種解決方案有一個明顯的缺點,因為動態分配IP地址後,nodeId將會改變。如果您要支援具有多個節點似乎具有相同公共IP地址的NAT的網路,那麼也不適合限制生成的nodeIds的數量。最後,沒有辦法確保與那些節點識別符號交換訊息的完整性。這就是為什麼我們提倡使用公鑰上的雜湊來生成nodeId。使用這個公鑰可以簽署節點交換的訊息。由於計算開銷,我們區分了兩種簽名型別:

• 弱簽名:弱簽名不簽署整個訊息。 它僅限於IP地址,埠和時間戳。 時間戳指定簽名有效的時間。 如果使用動態IP地址,這將防止重放攻擊。 對於同步問題,時間戳可能以非常粗糙的方式選擇。 弱簽名主要用於FIND NODE和PING訊息,其中整個訊息的完整性是可有可無的。

• 強有力的簽名:強有力的簽名在郵件的全部內容上簽名。 這確保了訊息的完整性和抵禦中間人攻擊的彈性。RPC訊息內的隨機數可以防止重放攻擊。

這兩種簽名型別可以對節點進行身份驗證並確保訊息的完整性。 我們現在需要阻止女巫攻擊和日蝕攻擊。這是通過使用加密謎題或來自中央證書頒發機構的簽名完成的,因此我們需要將上述簽名型別與以下某個簽名型別結合使用:

• 受監督簽名:如果簽名的公鑰另外由可信的證書頒發機構簽名,則該簽名被稱為受監督簽名。這個簽名是必要的,以阻止SybIL攻擊在網路的引導階段,其中只有少數節點存在於網路中。可以使用網路大小估計來決定是否需要該簽名。

• 加密拼圖簽名:在沒有可信權威的情況下,我們需要用加密拼圖來阻止日蝕和女巫攻擊。 在[3]中使用加密謎題來生成nodeId是因為它們不能被用來完全阻止攻擊。 但是,在我們看來,它們是在完全分散的環境中沒有可信權威的分散式nodeId生成的最有效的方法,因此應該用於在這樣的網路中儘可能地進行攻擊。

出於這個原因,我們引入了兩個加密謎題,如圖3所示。一個靜態謎題阻礙了NodeId的自由選擇和一個動態謎題,以確保生成大量nodeIds的複雜性。H表示密碼安全雜湊函式,⊕是異或運算,Ci 表示加密難題複雜度。 很明顯,C1的增加減少了可能的公鑰的空間,因此公鑰的大小必須隨後增加。C1被認為是一個常數。 一旦生成了nodeId,它就保持固定一定的值。 當計算資源變得更便宜時,C2 可以隨著時間的推移而被修改或擴充套件。

圖3. 用於nodeId生成的靜態(左)和動態(右)加密難題

如果一個節點收到一個簽名的訊息,它現在可以首先驗證它的簽名,然後檢查密碼拼圖是否被解決。 兩個操作對於恆定公鑰大小都具有O(1) 複雜性,而加密難題建立具有O(2c1 + 2c2)複雜性。

4.2. 可靠兄弟廣播

兄弟是負責需要儲存在DHT中的某個鍵值對的節點。 在Kademlia的情況下,這些鍵值對被複制到k個最接近的節點上(我們記得:k是bucket大小)。 在本文中,我們希望獨立於bucket大小k考慮這個數量的節點,並引入兄弟數量作為引數s。 這很有意義,因為儲存區大小通常定義了覆蓋連線的冗餘度,而不是DHT需要儲存的副本數量。

一個常見的安全問題是兄弟資訊的可靠性,當複製的資訊需要儲存在使用多數決定來補償敵對節點的DHT中時產生。 由於Kademlia的原始協議收斂到兄弟列表中,分析和證明兄弟資訊的一致性是很複雜的。 出於這個原因,我們引入一個大小為每個節點η · s的兄弟列表,這確保了每個節點至少在節點的兄弟範圍內以高概率知道兄弟的一個ID。 我們現在必須確定η並證明約束具有很高的概率。Gai和Viennot在他們關於Broose DHT的論文中已經完成了這項工作[10],其中兄弟名單以相同的方式構建。 由於這個證明不必要地使用了Chernoff邊界,我們在這裡回顧證明:

如前所述,XOR度量是單向的,這意味著對於一個固定的x和每個d⊕ (x,y),只有一個y存在。 考慮隨機選擇兩個節點ID,則一個節點ID小於節點ID的概率由x/2^n (n是節點ID的位數)給出。 令N為網路中節點的數量,則兩個相鄰節點之間XOR度量的平均距離為2^n/N.。 現在考慮距離

兩個節點與nodeId x和y,那麼x和y之間的期望節點數N(x, y)為E[N(x, y)] = µ,節點放置在x和y之間的概率為 由µ/N給出。 由於nodeIds是隨機選擇的,因此x和y之間的實際節點數量與期望值μ有所不同。 因此,在距離dn(cs) 處x和y之間少於s個節點的概率由下式給出:

對於小s> 0,這個概率是可計算的,因為以下是必須的:

所以使用Chernoff邊界是沒有必要的。 這使得該解更精確,並且可以如表1所示計算具有N = 10^10的上限網路大小的依賴於c和s的以下概率。

其餘的證明如下[10]。 有趣的事實是,顯示η ≥ (2·c) ≥ 5的值足以滿足我們需要的約束w.h.p.

因此,在S/Kademlia中,路由表由包含具有距離d且具有2^i-1 ≤d<2^i , 0≤i≤n的節點的k個bucket的列表組成,大小η · s。 由於新引入的同級列表,第2.1節中介紹的特殊子樹處理可以省略。 由於Kademlia中的路由表通過傳入的查詢請求隱式重新整理,並且我們兄弟表中的許多節點必須儲存在Kademlia的k-bucket中,因此維護兄弟表的額外通訊開銷很小。

4.3. 路由表維護

Kademlia使用反應式方法來維護路由表。由於XOR度量確保所有迭代查詢沿著同一路徑收斂,Kademlia可以從傳入的RPCs中瞭解新節點的存在。為了確保S/Kademlia中的路由表維護,我們將信令訊息分類為以下類:傳入簽名的RPC請求、響應或未簽名訊息。這些訊息中的每一個都包含傳送者地址。如果訊息弱或強簽名,則此地址不能偽造或與另一個nodeId關聯(見第4.1節)。如果傳送方地址有效並且來自RPC響應,則如果訊息被簽名並有效,則呼叫傳送方地址有效。Kademlia使用那些傳送者地址來維護他們的路由表。

當活動有效的發件人地址未滿時,會立即將其新增到相應的儲存區中。 如果nodeId字首在適當的位數χ中不同(例如,χ > 32),則有效的發件人地址只能新增到儲存bucket中。 這是必要的,因為攻擊者可以很容易地生成與受害者nodeId共享字首並溢位他的bucket的nodeId,因為靠近自己的nodeId的bucket只在Kademlia中稀疏填充。 來自未簽名訊息的發件人地址將被忽略。 如果訊息包含有關其他節點的更多資訊,則可以通過呼叫它們上的ping RPC來新增每個節點。 如果一個節點已經存在於路由表中,它將在bucket的尾部移動。

4.4. 通過不相交的路徑進行查詢

在3.2節中,我們展示了使用多條不相交路徑來查詢具有對抗節點的網路中的Key的重要性。 原始的Kademlia查詢迭代地查詢具有FIND NODE RPC的α節點,以找到與目標Key最近的k個節點。α是系統範圍的冗餘引數,例如2.在每個步驟中,將來自先前RPC的返回節點合併到排序列表中,從中選擇下一個α節點。 這種方法的一個主要缺點是,只要查詢單個敵對節點,查詢就會失敗。

我們將該演算法推廣到使用D不相交路徑,從而提高了具有對抗節點的網路中的查詢成功率。發起方通過從本地路由表中獲取K個最接近節點到目標Key並將其分配到與D無關的查詢桶開始查詢。從那裡節點繼續與傳統的KMDELLA查詢相似的D並行查詢。查詢是獨立的,除了重要的事實,每個節點只在整個查詢過程中使用一次,以確保所產生的路徑真的不相交。通過使用來自第4.2節的兄弟列表,查詢不會在單個節點上收斂,而是在鄰居關閉的D上結束,所有鄰居都知道目標Key的完整S兄弟。因此,即使k近鄰的1是對立的,查詢仍然是成功的。

圖4.具有固定bucket大小k = 16的成功節點查詢的分數

5. 評估

在本節中,我們用OverSim [2]來評估S/Kademlia,這是一個用於疊加模擬的靈活框架。 我們描述了模擬設定和程式,並最終描述了我們的模擬結果。

5.1. 模擬假設

我們用以下假設模擬敵對節點:敵對節點在最壞情況下返回損害網路的資料。 因此,在FIND NODE RPC的情況下,最差的行為只會返回其他更接近目標nodeId的協作節點。 對手還會收穫其他現有的有效nodeIds,以便將它們對映到虛假的傳輸地址。 這是最壞的情況,因為可以檢測到諸如空結果或無效資料之類的其他反應,並且將該節點從網路中移除,即該節點將被視為陳舊聯絡人。

圖5.具有自適應bucket大小k = 2d的成功節點查詢的分數

另一方面,我們假設良好行為的節點以平均分佈的方式返回對抗節點資訊。 這個假設在第4節中得到證實,因為敵對節點幾乎不可能影響其他節點的路由表。

通過這些假設,我們預計如果沒有對抗節點位於負責節點的一條路徑上,則節點或兄弟節點的查詢是成功的。 在多條路徑上進行並行查詢的情況下,我們只需停止追蹤遇到敵對節點的每條路徑,並且只有一條路徑沒有任何敵對節點時,才會將查詢視為成功。

5.2. 模擬程式

為了保持模擬效率,我們首先建立一個靜態Kademlia覆蓋網路,其中包含N個完全穩定的節點。 然後我們繼續處理N個節點查詢並評估成功查詢的比例。 隨著對抗節點增加5%重複該過程,直到90%的節點是對抗的。 由於我們不評估流失,所有模擬都是在α= 1的引數下完成的,並且我們假定網路在引導階段後保持穩定狀態,但是在對抗節點的影響下。

5.3. 結果

我們使用d ∈ {1, 2, 4, 8} 不相交的路徑模擬了網路規模為N = 10000個節點,s = 16個兄弟的兩個設定。 在圖4中,我們展示了取決於固定儲存區大小k = 16的對抗節點數的成功查詢部分。對於d = 1,查詢過程與標準Kademlia查詢相似。 該圖清楚地表明,通過增加並行不相交路徑的數量d,成功查詢的比例可以大大提高。 在這種情況下,通訊開銷隨著d線性增加。 我們還可以看到,當k = 16時,k-buckets中有足夠的冗餘來實際建立不相交的路徑。

在第二種設定中,我們將k = 2 · d調整為不相交路徑的數量,以保持路由表中的最小冗餘度,並因此減少通訊開銷。 圖5中的結果顯示,與圖4相比,較小的k導致成功查詢的一小部分。其原因是由於路徑表中較小的路由表增加了平均路徑長度,如路徑長度分佈圖中所示。

我們得出結論,d = 4..8,k = 8..16對S/Kademlia來說是個不錯的選擇。 較高的d和k值似乎不值得額外的通訊成本。 較大的k值也會增加很大一部分bucket長時間不滿的概率。 這不必要地使路由表更容易受到日蝕攻擊。

由於我們僅提供了N = 10000個節點的模擬,有人可能會認為這是一個相當少的節點,並不能與大型網路相媲美。 事實上,路徑長度與成功查詢的比例高度相關。 另一方面,網路拓撲結構可以很容易地調整為具有較小的直徑,因此較短的平均路徑長度。 這通常通過在每個步驟中考慮nodeId的多個位b來完成。 因此,可以將網路調整到不同情況下所需的安全級別。

6. 相關工作

Castro等人[3]研究對結構化點對點覆蓋中訊息路由的攻擊。 他們提出了一些防禦措施來確保加入過程,路由表維護和訊息轉發。 將nodeIds的安全分配委託給中央信任的證書頒發機構。

Sit和Morris [16]在Chord,CAN和Pastry的基礎上提出了針對點對點分散式雜湊表的攻擊分類。 他們表示,防禦這些攻擊的重要步驟是通過定義可驗證的系統不變數進行檢測。 例如,節點可以通過驗證查詢是否“接近”目標Key來檢測不正確的查詢路由。

Srivatsa和Liu [17]研究了基於DHT的P2P系統中的三種安全威脅。 首先,他們對路由方案提出攻擊,其中單個敵對節點可以在沒有備用路徑的情況下阻止所有查詢請求。 因此,他們強調了幾種備選最佳路徑的重要性,以及檢測不正確查詢結果的可行性。 此外,他們對資料放置方案提出了攻擊,並表明單靠複製不足以容忍敵對節點的攻擊,但必須與密碼技術相結合才能有效。 最後,他們顯示必須限制nodeId選擇過程,以防止敵對節點破壞特定的資料項。

Awerbuch和Scheideler [1]提出了一種理論上的DHT,它可以抵抗對抗式加入假以及插入式查詢攻擊。DHT的設計是高層次的,它是一個開放的問題,將它們的想法轉化為可行的協議是多麼困難。 另一個可以處理加入- 離開攻擊的DHT是SChord [9],但它僅限於線性數量的對抗加入請求。

Cerri等人[4]重點關注無限選擇nodeIds引起的攻擊,並用Kademlia協議舉例說明其發現。 他們建議通過雜湊函式將IP地址和埠耦合到nodeId來限制空閒的nodeId選擇。 為了使敵對節點難以攻擊特定的資料項,他們建議將資料項儲存在一個臨時Key中,該Key會定期輪換。 這是通過用一些暫時資訊對資料項的Key進行雜湊來計算臨時Key來完成的,

有幾篇論文提出了針對女巫攻擊的對策:在[13] Rowaihy 等。 為結構化的同行P2P系統提供准入控制系統。 這些系統構建了協作接納控制節點的樹狀分層結構,從中加入節點必須獲得接納。 另一種限制女巫攻擊的方法是將參與節點的IP地址儲存在安全的DHT中。 通過這種方式,每個IP地址的nodeIds數量可以通過查詢DHT來限制,如果新節點想要加入。

Singh等人[15]研究Eclipse攻擊對結構化覆蓋網路的影響,並提出通過讓節點互相審計連線來抵禦這種攻擊。 這個想法是,一個掛載Eclipse攻擊的節點的節點度高於平均值。

Nielson等人[12]認為理性攻擊的類別。 他們認為P2P系統中很大一部分節點是自私的,並試圖最大限度地消耗系統資源,同時儘量減少自己的使用。

7. 結論

在本文中,我們提出了一個基於Kademlia的基於安全Key的路由協議。 儘管優雅的路由表維護使得Kademlia已經不易受到某些攻擊,但我們已經表明,存在多個易受攻擊節點控制網路的漏洞。

我們提出幾個切實可行的解決方案,使Kademlia更具彈性。 首先,我們建議通過結合公鑰密碼術使用加密謎題來限制免費的nodeId生成。 此外,我們通過兄弟列表擴充套件Kademlia路由表。 這降低了bucket分裂演算法的複雜性,並允許DHT以安全複製的方式儲存資料。 最後,我們提出了一種查詢演算法,該演算法使用多條不相交路徑來提高查詢成功率。

S/Kademlia在模擬框架OverSim中的評估表明,即使使用20%的對抗節點,如果使用不相交路徑,所有查詢的99%仍然是成功的。我們相信,建議的Kademlia協議的擴充套件是實用的,可以用來方便地安全現有的Kademlia網路