本週深入探討 libp2p 安全性,為 Kad-DHT 開發新的 IP 子網路多樣性功能,同時對抗測試套件中幾個棘手的競爭條件。目前有 3 個 PR 待審,同時對我的 Neovim 設定進行一些自動化維護,讓開發流程持續運作。
TL;DR
本週的安全強化工作成為焦點,我致力於讓我們的 Kademlia DHT 實作更加能抵禦日食攻擊。在為 IP 子網路多樣性起草邏輯,以及追蹤 py-libp2p 測試套件中的競爭條件之間,這是充滿高影響力架構思考,以及處理非同步程式碼不穩定問題的細微挫折的一週。
打造更安全的 DHT 之戰
本週大部分心思都放在 py-libp2p 上,特別是我們在 Kademlia DHT 中如何處理對等節點選擇的機制。我提交了一個重要的 PR,feat(kad_dht): enforce IP subnet diversity in k-buckets (#1383),新增 226 行邏輯,確保我們的路由表不會被來自相同網路區域的對等節點所佔滿。
如果您不太熟悉 p2p 領域,簡單來說:日食攻擊是指攻擊者用自己的惡意節點包圍目標節點。如果您在網路中的所有「鄰居」都被同一個人控制,他們就能有效地將您與真實網路隔離,或是提供假資料給您。透過強制執行 IP 子網路多樣性,我們讓攻擊者更難(也更昂貴)執行這種攻擊,因為他們無法只在單一雲端服務提供者的子網路上啟動一千個節點,就期望填滿我們的 k-buckets。
這是一項在沒有問題時感覺無形的特性,但對函式庫的長期健康至關重要。
我還發起了一場深入討論,標題為 Eclipse-attack hardening for kad-dht: our approach, and why we dropped randomized lookup selection (#1383 / #1384)。我們原本考慮將隨機查找選擇作為防禦機制,但經過一番討論後,我們決定放棄此方法,改用更穩健的 bucket 管理。在合併程式碼前,意識到某種方法不是最佳解,總是比較好的。
非同步測試的代價
當您開發一個高度依賴非同步網路的函式庫時,最終必須支付「不穩定測試代價」。本週我花了相當多的時間追蹤兩個特別惱人的競爭條件,它們一直在困擾我們的 CI。
第一個是 test(timed_cache): de-flake test_expiry_removal (#1408)。問題很經典:測試與背景清理執行緒發生競爭。我們使用了 trio.sleep,這通常沒問題,但在 CI 環境中,CPU 週期可能難以預測,清理執行緒並非總是在測試檢查結果前完成清理工作。我還開了一個 issue 來特別追蹤這個問題:flaky: test_expiry_removal races the background sweeper thread。
第二個是 test(pubsub): de-flake test_gossip_gate_filters_peers (#1401)。類似的情況——Gossipsub 中的訂閱傳播本質上依賴時間。如果測試比網路(即使是模擬的)移動得快,一切就會崩潰。修復這些問題不是最光鮮亮麗的工作,但當您調整好時間邏輯後,看到紅色的 CI 管線終於轉為綠色,會有一種特殊的滿足感。
維護與工具
在工作之餘,我保持環境的健康狀態。我的 nvim 設定本週有 6 次提交,雖然大多是自動化例行工作。我有一個 CI 設定,可以將所有外掛更新到最新版本。這是一種「設定後即可忘記」的方式,但它能確保當我坐下來編碼時,我的編輯器已經準備好迎接我。
在這 6 次提交中,新增與刪除的比例正好是 7 比 7,這是完美平衡的維護週。沒有新增多餘的程式碼,只是保持工具的銳利。
技術堆疊與氛圍
由於 py-libp2p 的工作,本週主要以 Python 為主。混合了超過 96MB 的 Python 程式碼(歸功於 libp2p 生態系統的龐大規模),這絕對是我目前的首要焦點。但從我的語言統計來看,多語言生活仍然真實存在——TypeScript、Rust 和 Lua 都靜靜地待在背景中,準備好讓我切換回前端或系統工作。
本週的增刪比例非常緊密(直接提交的儲存庫中新增 7 行,刪除 7 行)。這反映出這是一週的精煉工作,而非原始功能擴展。即使是 libp2p 的 PR,在新增新邏輯的同時,也非常專注於修復特定行為,而不是堆砌更多程式碼。
下一步
我目前有三個 PR 處於 py-libp2p 的「OPEN」狀態。我下週的優先事項是讓這些 PR 合併。IP 子網路多樣性的工作是重點——我希望在它進入主分支前,確保實作無懈可擊。一旦這些完成,我希望能回到一些全新的功能開發,但正如任何 OSS 開發者所知,下一個不穩定的測試可能就在下一秒。
我們下次更新再見。持續交付。
Yash K Saini — Engineer, building in public — AI/ML, low-level (Rust/C/C++), and open source.
GitHub · X · LinkedIn · Portfolio
Generated by DevNotion
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.