原文

Kaya AlpturerConstantine DoumanidisAviv Zohar

TLDR. Ethereumのコンセンサス層はアイデンティティをコストのかかるものにしていますが、そのピアディスカバリ層は依然としてネットワークアイデンティティを安価なものとして扱っています。このギャップにより、ノードはコンセンサスが始まる前にエクリプス攻撃やシビル攻撃にさらされています。AetherWeaveは、ネットワーク参加をデポジットされたステークに結びつけるピアディスカバリプロトコルです。これにより、これらの攻撃に高いコストをかけさせつつ、ノードのネットワークアイデンティティをオンチェーンデポジットからリンクできない状態に保ちます。各ノードは、どのデポジットを所有しているかを明かすことなく、有効なステークを持っていることを証明します。リクエスト量はステークに比例して制限され、過剰なリクエストスパムはスラッシングによって罰せられます。ゴシップ構造は、攻撃者が自身の表現を膨らませるのではなく、レコードを抑制することに限定し、抑制やエクリプスの成功を検出可能にします。ノードごとの通信は1ラウンドあたりO(s\sqrt{n})であり、オンチェーンでのインタラクションはデポジット、アンステーク、スラッシングに限定されます。私たちはPrysmのフォーク上に研究プロトタイプを構築しました。完全な論文はこちらです。

動機

新しいEthereumノードがオンラインになると、ピアを見つける必要があります。ブートストラップノードに接続し、他のピアのIPアドレスのリストを要求し、接続を開始します。ここで疑問が生じます。新しいノードは、ブートストラップノードが悪意のあるものではなく、攻撃者が制御するIPのみを提供していないことをどのようにして知るのでしょうか?

ノードは現在、これについて確信を持つことができず、ネットワークのビューが攻撃者によって制御されるエクリプス状態になるリスクがあります。攻撃者はブロックを隠したり、古いデータを提供したり、ネットワークをパーティション化するより洗練された攻撃を仕掛けたりすることができます。

BitcoinEthereumに対するエクリプス攻撃は、実際のシステムで実証されています。これらの攻撃が機能する理由は、新しいネットワークアイデンティティの作成が実質的に無料であるためです。数千のIPアドレスを制御する攻撃者は、ディスカバリプロセスを偽のエントリで溢れさせ、本物のエントリを締め出すことができます。今日の防御策(IPサブネット禁止、レート制限、レピュテーション追跡)は問題を部分的に軽減しますが、十分なリソースを持つ攻撃者を阻止することはできません。

興味深いことに、Ethereumはコンセンサス層において「無料のアイデンティティ」問題をすでに解決しています。プルーフ・オブ・ステークは、バリデータを通じたコンセンサスにおける表現がステークに結びつけられることを保証し、コンセンサスが設計上シビル耐性を持つことを意味します。しかし、コンセンサスのすぐ下にあるネットワーク層にはそのようなメカニズムがなく、依然として無料です。

そこで自然な疑問は、ネットワーク層でステークされたアイデンティティを利用できるかどうかです。

ステーク担保型ピアディスカバリ

基本的な考え方は、ディスカバリネットワーク内のすべてのノードが、その参加をステークデポジットで担保しなければならないというものです。もしノードが不正行為を行った場合、例えばプロトコルが許可する以上のリクエストを送信した場合、ネットワーク内の誰でも不正行為の証明を生成し、それを使ってノードのデポジットをスラッシュすることができます。これにより、シビルアイデンティティに実際のコストがかかります。10,000個の偽ノードを望む攻撃者は、それら10,000個分のステークをロックする必要があります。

これはそれ自体新しいアイデアではありません。Coretti et al.は以前、ステーク加重ランダムグラフがビザンチン耐性のあるゴシップを維持できることを示しました。しかし、彼らの分析は、誰もがどのネットワークアドレスがどのデポジットに対応するかをすでに知っていると仮定していました。

これは、誰が誰であるかを特定することが、実際にはピアディスカバリ問題の大部分であるため、強い仮定です。

そこで、私たちが追加したかったのは次の点です。

  1. ノードが互いをどのように見つけるか、新しいノードがどのようにブートストラップするか、システムが新しいアドレスでピアが離脱および再参加するのをどのように処理するかを定義する実際のディスカバリプロトコル。
  2. ノードが、どのデポジットを所有しているかを明かすことなく、ステークの所有権を証明する方法。ステーク所有権を示すことは、ゼロ知識集合メンバーシップ証明を通じて簡単ですが、難しいのはこれをスラッシングと共存させることです。スラッシングでは、ノードが不正行為を行った場合、ネットワーク内の誰でもその違反者のデポジットを特定し、焼却できる必要があります。これは、スラッシュするために誰であるかを知る必要があるため、リンク不可能性と直接矛盾するように見えます。この設計の大部分は、この2つを調和させることにあります。正直なノードは完全にリンク不可能なままである一方、ノードがプロトコルのルールを破った瞬間、その不正行為自体が、どのデポジットをスラッシュすべきかを正確に特定するのに十分な情報を漏洩させます。
  3. 攻撃者が正直なネットワークをパーティション化しようとしていることを検出する方法。これにより、攻撃が成功した場合でも、被害者が侵害されたネットワーク状態で静かに動作し続けることがなくなります。

プロトコルの概要

AetherWeaveのノードは、それぞれサイズs\sqrt{n}の2つのピアテーブルを保持します。ここでnはステークされたノードの数、sは小さな定数です(実験ではs=4を使用)。1つのテーブルはゴシップ、つまり他のノードとのピアレコードの交換に使用されます。もう1つのテーブルは、ノードの実際のオーバーレイ接続を確立するために使用されます。これら2つのテーブルは独立したプライベートシードを使用して生成されるため、ピアがあなたとゴシップすることであなたのオーバーレイネイバーについて何も知ることはありません。

各ラウンドで、すべてのノードはほぼ同じことを行います。

  • ステークされたネットワークの新しい擬似ランダムなスライスを選択します。
  • ゴシップテーブル内の各ピアに、そのスライスに一致するレコードを要求します。
  • 各応答者は、要求者のスライスで自身のテーブルをフィルタリングし、一致するレコードを返します(帯域幅の使用を最小限に抑えるため、期待値でs^2レコードのみ)。
  • 各レコードには、応答者のネットワーク公開鍵、その鍵が実際のステークデポジットによって担保されていることを示す最近のゼロ知識証明、および署名されたネットワークアドレスが含まれます。

これが機能する理由を考える上で役立つのは、スライスが応答者ではなく要求者によって選択されるという点です。したがって、悪意のある応答者は、そのスライスに一致せず拒否されるような余分な敵対的レコードで応答を水増しすることはできません。悪意のある応答者ができる唯一のことは、一致すべき正直なレコードを抑制することです。そして、抑制には特徴があります。ノードが期待よりもはるかに少ないレコードを受け取った場合、それは何かがおかしいという統計的な信号です。

その信号こそが、エクリプス検出メカニズムで使用するものです。ノードのテーブルがプロトコルが予測するよりも疎になりすぎた場合、ノードはローカルフラグを立てます。デプロイメントでは、これによりブートストラップピアの切り替え、オペレーターへの警告、またはテーブルが健全に見えるまでRPC関連操作の一時停止がトリガーされる可能性があります。

保証

論文で最も明確な結果は、正直なネットワークのパーティショニングに関する保証です。非公式には次のようになります。

攻撃者がステークの割合 \alpha を制御し、すべての正直なノードのプライベートシードを知っており、正直なノード間の任意のメッセージを破棄できると仮定します。各ノードの期待されるオーバーレイ次数が \Omega(\log n) のように増加すると仮定します。このとき、圧倒的な確率で、攻撃者が正直なノードを2つのグループに分割しようとするあらゆる方法において、一方の側のノードが他方へのオーバーレイ接続を持っているか(パーティションは失敗)、または小さい方のグループの大部分がエクリプス検出アラームを鳴らします。

言い換えれば、私たちが想定しうる最も強力な攻撃者に対して、パーティションの成功は非常に目に見える形で検出されます。

また、ゴシップ層がいつ収束するかを閉形式で示す平均場解析も行っています。その条件は

s^2(1-\alpha) > 1

であり、これは大まかに言えば、正直なレコードが広がる速度が、サイレントノードまたは敵対的ノードがそれらを破棄する速度を上回る必要があることを意味します。s = 4の場合、ゴシップ層が破綻する前に \alpha < 15/16 の敵対的ステークを許容します。

プライバシー

素朴に考えると、ネットワーク参加をステークに結びつけることは、プライバシーの退行を引き起こします。すべてのノードのIPが特定のバリデータデポジットにリンク可能になるためです。これは望ましくなく、私たちの設計では回避されています。

ノードのネットワーク公開鍵は、そのステークデポジットを制御するのと同じ秘密から決定論的に導出されますが、基盤となるゼロ知識証明システムを破ることなく、ネットワーク鍵からデポジットに戻ることはできません。ノードがピアレコードを提供するとき、それは「このネットワーク鍵はステーキングコントラクト内のいずれかのデポジットによって担保されている」という新しいzk-証明を含みますが、それがどのデポジットであるかは示しません。これは、ピアテーブルが、IPを持つバリデータのリストではなく、新しいステーク証明を持つ偽名のリストのように見えることを意味します。

ただし、リンク不可能性はノードが正直に振る舞う限りにおいてのみ保持されます。スラッシングメカニズムは、各リクエストが、そのラウンドにおける要求者の意図された受信者の完全なセットに対するバウンドされたコミットメントに結びつけられたスラッシング秘密の暗号学的シェアを運ぶことを要求することで機能します。もしノードが同じラウンドで異なるコミットメントを持つ2つのバッチを発行した場合(これはリクエストスパムが必要とするものです)、両方のシェアを見た誰でもスラッシング秘密を再構築し、違反しているデポジットを特定して焼却することができます。

プロトコルのプライバシーに関連する詳細として、スライスシードは個々の応答者からプライベートに保たれる必要があります。そうでなければ、敵対的な応答者は要求者が何を求めているかを知り、そのテーブルに関する情報を学習する可能性があります。これを達成する1つの方法は、応答者がTEE(トラステッド実行環境)内でスライス述語を評価することです。これにより、応答者のホストは要求者のシードを見ることはありません。これにより、各応答が小さく保たれます(期待値でs^2レコード)。なぜなら、応答者は返信する前に一致するレコードのみにフィルタリングするからです。

トラストレスな代替案はプライベート情報検索であり、これはハードウェアの仮定を排除しますが、帯域幅のコストがかかる可能性があります。応答者のテーブルとほぼ同じサイズの応答を送信することで、TEEの仮定を回避できますが、s^2レコードに限定することはできません。したがって、O(s\sqrt{n})の通信コストとTEEの仮定は密接に関連しています。

プロトタイプ

私たちはPrysmをフォークし、そのディスカバリ層をAetherWeaveに置き換えました。新しいコンポーネントは次のとおりです。

  • Solidityで書かれたステーキングスマートコントラクトで、デポジットコミットメントとPoseidonハッシュに対するスパースマークルツリーを使用しています。
  • ステーク証明とスラッシングシェア証明はCircomで書かれており、Baby Jubjub鍵とPoseidonハッシュを用いたGroth16を使用しています。証明の生成と検証はオフチェーンで行われます。
  • ノードごとの帯域幅は1ラウンドあたりO(s\sqrt{n})でスケールします。

私たちは、2分間のラウンドで最大625のフルノードを単一のAMD EPYC 9354Pサーバーでシミュレーションデプロイメントを実行しました。操作ごとのプロファイルから外挿すると、100万ノードであっても、プロトコルはノードあたりほんの数個のCPUコアしか必要としません。つまり、アテステーションやブロック検証も行うコンセンサスクライアントのCPU予算を圧迫することはありません。

また、より大規模なテストのために別のPythonイベント駆動シミュレーターも構築し、チャーン耐性、堅牢なスラッシング、健全なピア伝播を確認しました。

Ethereumにおける実現可能性

私たちはまだEIP(Ethereum 改善提案)を提案していませんが、私たちの設計は実際にデプロイ可能であると信じています。

  • AetherWeaveはdiscv5と並行して実行でき、置き換える必要はありません。ステークを持つバリデータはオプトインして強固なコアを形成し、非ステーカーは既存のディスカバリを通じてベストエフォートで参加し続けます。
  • ステーク自体は、既存のバリデータデポジットを再利用することも、バリデータステークの再利用がコンセンサス層と密接に絡みすぎている場合は、より小さな個別のステーキングコントラクトに存在することもできます。
  • すべてのzk-証明検証は、参加ノードによってオフチェーンで行われます。オンチェーンのフットプリントは、デポジット、アンステーク、スラッシングのみです。

私たちが最も意見を聞きたい質問は次のとおりです。

  1. バリデータステークを再利用するのと、個別の(より小さな)ディスカバリ層ステークを持つのとでは、どちらが理にかなっていますか?
  2. ディスカバリ層の不正行為に対するスラッシング経済学はどのようなものが適切でしょうか?個々の違反は小さいものの、繰り返される違反による累積的な損害は深刻になる可能性があります。
  3. スライスシードのプライバシーに関するTEEの仮定は、コミュニティが受け入れる用意があるものでしょうか、それともPIRベースのバリアントに直接移行すべきでしょうか?
  4. discv5のデプロイメントから、より明確に引き出すべき教訓はありますか?

制限事項

  • NATおよびファイアウォールトラバーサルはモデル化していません。実際のデプロイメントにはホールパンチングまたはリレーメカニズムが必要です。
  • 正直な参加に対する報酬はありません。合理的な応答者は、応答の提供を拒否することでフリーライドする可能性があります。
  • スライスプライバシーの保証はTEEの完全性に依存し、プロトコルのラウンドごとの少ない通信量(O(s\sqrt{n}))は、応答者が返信する前にフィルタリングできるようにスライスプライバシーが保持されることに依存します。TEEに対するサイドチャネル攻撃は、実際にはこれを弱めます。侵害されたTEEはスライスプライバシーを低下させるだけで、正確性、スラッシング、またはエクリプス検出を破ることはありません。PIRベースのバリアントに移行する際の帯域幅コストは高くなる可能性があり、長期的にはハードウェアフリーのオプションを望んでいます。
  • オーバーレイ上で実行される高層プロトコルは、テーブルプライバシーを損なう形でトポロジーを漏洩させる可能性があります。私たちはディスカバリ層の保証のみに焦点を当てています。

リンク

建設的なフィードバックをお待ちしております。

1投稿 - 1参加者

トピック全文を読む