Arbitrumの共同創設者:Rollup遅延攻撃に対する3つの解決策
著者:Ed Felten, Offchain Labs の共同創設者
編訳:DeFi の道
Rollup プロトコルの設計者が直面する微妙な問題は、遅延攻撃(delay attacks)にどのように対処するかです。この記事では、それらが何であるか、そして Arbitrum がどのようにそれらを防ぐかについて議論し、いくつかの興味深い新しい展開を紹介します。
遅延攻撃は、Rollup プロトコルの進行を妨げようとする悪意のある行為であり、プロトコルの安全性を攻撃するわけではありません。つまり、間違った結果を強制的に確認しようとはしません。代わりに、遅延攻撃は、結果の確認を妨げたり遅らせたりすることによってプロトコルの活性(liveness)を攻撃します。
これらの問題は微妙であり、正直なところ、プロトコル設計者は通常、遅延攻撃について話したがりませんが、すべての Layer 2 システム、Optimistic Rollup、ZK Rollup、またはその他のシステムは、遅延とプロトコルの進行に関する問題に対処する必要があります。
この記事では、遅延攻撃の問題を深く掘り下げ、さまざまなバージョンの Arbitrum rollup プロトコルがこの問題にどのように対処しているかを議論します。
遅延攻撃とは?
遅延攻撃では、悪意のある当事者(または悪意のある当事者のグループ)が Rollup プロトコル内で行動し、結果が L1 チェーンに戻る確認を妨げたり遅らせたりすることを目的とした戦略に従います。
これは、サービス拒否(DoS)攻撃とは異なります。サービス拒否攻撃では、攻撃者はプロトコル内での行動を妨げようとします。対照的に、遅延攻撃では、行動は引き続き発生しますが、攻撃者の行動によって結果の確認が妨げられたり遅れたりし(つまり、L1 からの資産の引き出しが遅れる)、誠実な検証者がガスを消費することを強いることになります。
合理的に見える Rollup プロトコルは、参加者がステークを行う必要があるため、遅延攻撃者は必然的に一つまたは複数のステーク権益を失うことになります。ここでは、攻撃者が攻撃を追求するために、一定の範囲内でステーク権益を犠牲にすることを厭わないと仮定します。
また、攻撃者がトランザクションをチェーンに載せることにおいて優位性を持っていると保守的に仮定します。したがって、攻撃者が誠実な当事者と競争してチェーン上のトランザクションの優先権を得る際、攻撃者は常に勝つことになります。
最後に、攻撃者が基盤となる L1 ブロックチェーンへのアクセスを監視できると仮定しますが、これは限られた時間内に行われ、これを「チャレンジ期間」と呼びます。特に、攻撃者は概念的な「監視モード」を有効または無効にすることができます。監視モードが有効になっていると、攻撃者はどのトランザクションが L1 に到達できるかを完全に制御できます。ただし、攻撃者は一つのチャレンジ期間内にのみ監視モードを有効にできます。(私たちは、監視モードの期間が一つのチャレンジ期間を超えると、L1 コミュニティの社会的反応が発生し、監視の試みを阻止することを仮定します。)
遅延攻撃に対するプロトコルの評価
プロトコルを評価する際に、私たちは次の6つの質問をすることができます:
そのプロトコルには詐欺証明メカニズムがありますか?(そうでなければ、遅延攻撃は実際には意味がなく、参加者は結果を遅らせることができません------詐欺的な結果でさえも。)
中央集権的なオペレーターや証明者がいて、データを単に停止または保持することで進行を妨げることができますか?もしそうなら、その当事者は無限の遅延を引き起こす可能性があります。
そのプロトコルは、最終的な進行を信頼なしに保証していますか?言い換えれば、攻撃者が何をしても、誠実な参加者が最終的な進行を強制できるのでしょうか?
プロトコルが信頼なしのプロセスを保証する場合、攻撃者が引き起こす遅延の上限はどのくらいですか?
攻撃者のコストは、引き起こされる遅延時間とどのように比例していますか?
誠実な当事者の応答にかかる総コストはどのように測定されますか?
これらの基準を特定した後、Arbitrum rollup プロトコルの2つの歴史的バージョンを評価しましょう。
プロトコル 1 :学術論文プロトコル
2018 年の Arbitrum 学術論文は、以下のプロトコルを大まかに使用しています(無関係な合意パターンは無視します)。任意のステークホルダーは提案された結果を主張することができ、これをアサーション(assertion)と呼びます。ある時間ウィンドウ内で、他のステークホルダーの任意のサブセットがアサーションに挑戦することができ、アサーションを行った者は各挑戦者に対して自らのアサーションを守らなければなりません。一度に一人の挑戦者に対してです。各挑戦が終了するたびに、負けた側はそのステーク権益を失います。
(注意すべきは、複数のステークホルダーがアサーションに反対することを許可し、各挑戦者にアサーションを覆す機会を与える必要があるということです。これは、悪意のある当事者が故意に「勝つべき」挑戦に負ける可能性があるためです。各挑戦者に個別の挑戦を与えることで、誠実な挑戦者が不正確なアサーションを打ち負かすことができることが保証されます。)
挑戦がなければ、またはアサーションを行った者がすべての挑戦に勝った場合、アサーションは確認され、プロトコルは進行します。しかし、アサーションを行った者が任意の挑戦に負けた場合、そのアサーションは拒否され、プロトコルの状態はアサーションを行う前の状態にロールバックされます。
評価
このプロトコルは有効な詐欺証明を持っていますが、進行を保証するものではありません。悪意のある参加者は無限に不正確なアサーションを行うことができ、毎回ステーク権益を犠牲にしますが、アサーションの作成と拒否の無限ループを引き起こし、継続的なロールバックと進行の欠如をもたらします。
プロトコル 2 :フォークとトリミング
現在の Arbitrum プロトコル(2020 年以来、各バージョンの Arbitrum に展開されています)は、フォークを導入することで以前のプロトコルを改善しました。その考え方は、複数のステークホルダーが相互に競合するアサーションを行うことを許可し、相互に競合するアサーションをフォークチェーンとして扱うことです。次に、一連の挑戦がフォークを対抗させ、最終的にすべてのフォークをトリミングし、残った一つのフォークを確認します。
具体的な方法は次のとおりです。ブロックチェーン内の各 Rollup ブロックは、その最初のサブブロック(すなわち後続ブロック)がステークホルダーによって作成されたときのタイムスタンプを追跡します。他のステークホルダーは追加のサブブロックを作成できます。各サブアサーションは、すべての年長のブロックが不正確であると暗黙的に主張します。
アサーションを作成するステークホルダーは、そのアサーションに対してステークを行う必要があり、他のステークホルダーもそのアサーションに対してステークを行うことを選択できます。
もし二人のステークホルダーが姉妹(siblings)アサーションに賭け、二人のステークホルダーが挑戦の中にいない場合、二人のステークホルダーの間で挑戦を開始することができます。この場合、二つの姉妹アサーションのうち、より早いステークホルダーが年長の姉妹アサーションの正当性を守り、もう一方のステークホルダーがその正当性に挑戦します。挑戦に負けたステークホルダーは、そのステーク権益を失い、ステークホルダーの集合から除外されます。
このプロトコルには行動の期限が含まれています。まず、親アサーションを作成するサブアサーションの締切は、最初のサブアサーションが作成された後の一つの挑戦期間です。次に、アサーションに対するステークの締切は、そのアサーションが作成された後の一つの挑戦期間です。
もしアサーションに対するステークの締切が過ぎ、誰もそのアサーションに対してステークを行わなければ、そのアサーションは削除されます。トリミングされたアサーションの子孫、孫、またはその他の後代も同時にトリミングされます。
もしアサーションが挑戦期間よりも早く、未トリミングの姉妹アサーションがなければ、そのアサーションは確認され、プロトコルの進行を代表します。
評価
このプロトコルは有効な詐欺証明を持ち、中央集権的なオペレーターや証明者が進行を妨げることはできません。したがって、任意の参加者が進行を促進できます。進行を促進するために、誠実なステークホルダーは正しいサブアサーションを発表できます(まだ存在しない場合)。その後、締切前に限られた時間が経過し、これにより新たな姉妹アサーションが作成されず、既存の姉妹アサーションに対して新たなステークホルダーが賭けることもできなくなります。その時点から、誠実なステークホルダーは一連の挑戦に参加し、誤ったステークを行った側を一度に打ち負かし、除外します(複数の誠実な参加者がステークを行っている場合、彼らは同時に対戦相手を打ち負かすことができます)。これらの参加者がすべて除外されると、正しいサブアサーションが確認されます。
このプロトコルに対する最も効果的な遅延攻撃は、悪意のあるステークホルダーが不正確な姉妹アサーションに対してステークを行い、N-1 の悪意のあるステークホルダーが正しい姉妹アサーションに対してステークを行うことです。正しい姉妹アサーションに賭ける誠実なステークホルダーが何人いても、攻撃者は誤ったステークを行った者が誠実な側が挑戦を開始する前に、同盟に対して挑戦を開始するように手配できます(悲観的に言えば、攻撃者は常に誠実な側よりも先に取引に入ることができると仮定します)。同盟者も挑戦を故意に放棄し、できるだけ時間を引き延ばします(遅延ルールにより、各同盟者は1〜2の挑戦期間が必要になる場合があります)。すべての N-1 の同盟者が自らを犠牲にした後、誤ったステークを行ったステークホルダーは誠実な側と挑戦することを求められ、誠実な側が勝利し、最終的に誤ったステークを行ったステークホルダーを排除します。
この攻撃は約 N の挑戦期間の遅延を実現し、攻撃者は N のステーク権益を犠牲にします。
誠実な側がこの攻撃に対して負担するコストは、誠実な側の数に線形に関係しています。なぜなら、各誠実な側はステークの締切前にステークを行う必要があるからです。
小結:
進行の保証
攻撃コストは引き起こされる遅延と線形に関係する
誠実な側のコストは誠実な側の数に線形に関係する
許可制の検証
現在、Arbitrum に展開されているプロトコル 2 が直面している遅延攻撃の問題は、検証者の役割を許可された一群の当事者に一時的に制限することを選択した理由です。完全に許可なしの検証を実現するための最終ステップは、遅延攻撃に最大限抵抗するプロトコルのバージョンを必要とします。このようなプロトコルのバージョンが存在することはおそらくご想像の通りであり、私たちは現在それを実現するために努力しています。
近日公開予定のプロトコル 3
この記事はすでに長くなっているので、新しいプロトコルに関する具体的な説明は提供しません。それは後の文章で紹介されるものです。
要点を簡単に述べると、Arbitrum プロトコルの次のバージョンは、アサーションと挑戦の動作方法にいくつかの小さな、しかし(私が考えるに)優雅な変更を加え、最悪の場合の遅延攻撃が一つの挑戦期間の遅延しか引き起こさないようにします(攻撃者がどれだけのステーク権益を失うことを望んでも)。
これは、Arbitrum 研究チームの技術的な突破口に基づいており、「all-against-all」挑戦を実現可能かつ効率的にします。これにより、誠実なステークホルダーが悪意のある分岐アサーションを発表する攻撃者の大群を効果的に打ち負かすことができます。
新しいプロトコルの仕様は完全に確定しており、現在実装中です。もちろん、コードを徹底的にテストし、監査する前に、メインネットでの展開は行いません。
今後の文章では、この新しいプロトコルについて詳しく掘り下げていく予定です。
















