今週はKad-DHT向けの新しいIPサブネット多様性機能により、libp2pセキュリティの深い探求を行い、テストスイートでのいくつかの根強い競合状態と戦いました。3つのPRがオープン中で、Neovimセットアップの自動メンテナンスが歯車を回し続けました。
TL;DR
セキュリティ強化が今週の中心となり、Kademlia DHT実装をEclipse攻撃に対してより耐性のあるものにすることに注力しました。IPサブネット多様性のロジックを起草し、py-libp2pテストスイートでの競合状態を追跡する中で、高レバレッジのアーキテクチャ思考と非同期コードのデフレーキングという細かなフラストレーションの両方を伴う一週間でした。
より安全なDHTのための戦い
今週の脳力のほとんどはpy-libp2pに向けられ、特にKademlia DHTでのピア選択の処理方法に集中しました。ルーティングテーブルが同じネットワーク近辺のピアで飽和しないように226行の新しいロジックを追加する重要なPR feat(kad_dht): enforce IP subnet diversity in k-buckets (#1383) をオープンしました。
p2pの深淵に深く入り込まれていない方のために説明すると、Eclipse攻撃とは、攻撃者が標的ノードを自らの悪意のあるノードで囲み込むことに成功した場合に発生します。ネットワーク内のすべての「隣人」が一人の人間によって制御されている場合、本物のネットワークから効果的に切り離されたり、偽のデータを供給されたりする可能性があります。IPサブネット多様性を強制することで、攻撃者が単一のクラウドプロバイダーのサブネット上に1,000個のノードを立ち上げてk-bucketsを埋め尽くすことを期待できなくなるため、この攻撃をより困難(かつ高コスト)なものにします。
これは、そこにない場合に気づくまで見えない機能の一つですが、ライブラリの長期的な健全性にとって重要です。
また、Eclipse-attack hardening for kad-dht: our approach, and why we dropped randomized lookup selection (#1383 / #1384) という深い議論を開始しました。元々は防御メカニズムとしてランダム化されたルックアップ選択を検討していましたが、議論の結果、より堅牢なバケット管理を優先してこれを破棄することにしました。マージする前にアプローチが最適でないことに気づくのは、常に良いことです。
非同期テストの代償
非同期ネットワーキングに大きく依存するライブラリで作業していると、最終的に「不安定なテストの代償」を支払うことになります。今週は、CIを悩ませ続けている2つの特に厄介な競合状態を追跡するのにかなりの時間を費やしました。
1つ目は test(timed_cache): de-flake test_expiry_removal (#1408) でした。問題は古典的で、テストがバックグラウンドのスイーパースレッドと競合していました。通常は問題ない trio.sleep を使用していましたが、CPUサイクルが予測できないCI環境では、スイーパーがテストが結果を確認する前にクリーンアップを完了しないことがありました。この問題を具体的に追跡するためのissueもオープンしました:flaky: test_expiry_removal races the background sweeper thread。
2つ目は test(pubsub): de-flake test_gossip_gate_filters_peers (#1401) でした。ここでも同様の話で、Gossipsubでのサブスクリプション伝播は本質的にタイミングに依存しています。テストがネットワーク(モックされたものでさえ)よりも速く進むと、すべてが壊れます。これらの修正は最も華やかな作業ではありませんが、タイミングロジックを強化した後に赤いCIパイプラインがようやく緑に変わるのを見るのは、特定の種類の満足感があります。
メンテナンスとツール
一方で、環境の健全性を保ちました。nvim 設定は今週6コミットありましたが、そのほとんどは自動化された雑務でした。すべてのプラグインを最新バージョンに更新し続けるCIセットアップがあります。これは「セットして忘れる」ようなものですが、コードを書くために座ったときにエディタが実際に準備ができていることを保証します。
これらの6コミットで7つの追加と7つの削除があり、完璧にバランスの取れたメンテナンスの一週間でした。新しい肥大化はなく、ツールを鋭く保つだけでした。
技術スタックとバイブ
今週はpy-libp2pでの作業により、Pythonに大きく偏っていました。libp2pエコシステムの規模のおかげで、9600万バイト以上のPythonコードが混在しており、今のところ私の主な焦点がここにあります。しかし、私の言語統計を見ると、ポリグロットな生活は依然として現実的で、TypeScript、Rust、Luaはすべてバックグラウンドにあり、フロントエンドやシステム作業に戻るときにいつでも使える状態で待機しています。
追加/削除の比率が興味深いほどタイトだった今週(直接コミットしたリポジトリで7アップ、7ダウン)は、機能の生の拡張ではなく洗練の一週間を反映しています。libp2p PRも、新しいロジックを追加しているものの、単にコードを積み重ねるのではなく、特定の動作の修正に非常に焦点を当てていました。
次は何をするか
現在、py-libp2pで「OPEN」ステータスの3つのPRがあります。来週の優先事項は、これらをマージすることです。IPサブネット多様性の作業が大きなものであり、マージする前に実装が万全であることを確認したいと思います。これらが完了したら、いくつかの新しい機能作業に戻ることを望んでいますが、OSSに携わる人なら誰でも知っているように、次の不安定なテストはおそらくすぐそこにあります。
次のアップデートでお会いしましょう。出荷を続けましょう。
Yash K Saini — 公開で構築するエンジニア — AI/ML、低レベル(Rust/C/C++)、およびオープンソース。
GitHub · X · LinkedIn · ポートフォリオ
DevNotionによって生成
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.