シークレットリーダー選出
現在のプルーフ・オブ・ステークをベースとしたコンセンサスメカニズムでは、次期ブロック提案者のリストが公開されており、彼らのIPアドレスをマッピングすることが可能です。 そのため、攻撃者は、ブロックを提案する予定のバリデータを特定し、そのバリデータに対してサービス拒否(DOS)攻撃を仕掛けることで、時間通りにブロックの提案を行わせないように妨害することができます。
この状況は、攻撃者にとって利益を得る機会になる可能性があります。 例えば、スロットn+1に選ばれたブロック提案者が、スロットnの提案者に対してDoS攻撃を行うことで、ブロックを提案する機会を奪うことができます。 これにより、攻撃側のブロック提案者は、両方のスロットのMEVを抽出したり、2つのブロックに分かれるはずだったすべてのトランザクションを1つのブロックにまとめたりすることで、関連するすべての手数料を独占できます。 この攻撃は、高度な方法を使ってDOS攻撃から防御することができる技術力の高い機関のバリデータよりも、一般的な家庭のバリデータに対して悪影響を与える可能性が高く、結果的にバリデータの集中化につながる可能性があります。
この問題には、いくつかの解決策があります。 その1つが分散バリデータ技術 (opens in a new tab)です。これは、バリデータの実行に関連する様々なタスクを、冗長性を持たせて複数のマシンに分散させることで、攻撃者が特定のスロットでブロックが提案されるのを防ぐのをはるかに困難にすることを目的としています。 しかし、最も堅牢な解決策は**シングル・シークレット・リーダー選出(SSLE)**です。
シングル・シークレット・リーダー選出
SSLE(シークレット・シングル・リーダー選出)では、選出されたバリデータのみが自分が選ばれたことを知ることができるように、高度な暗号化が使用されます。 これは、各バリデータが秘密に対するコミットメントを送信することで機能します。このコミットメントは、バリデータ全員で共有します。 コミットメントは、シャッフル、再構成され、誰もコミットメントをバリデータにマッピングすることはできませんが、各バリデータは自分に属するコミットメントを把握しています。 その後、ランダムに1つのコミットメントが選ばれます。 バリデータが自身のコミットメントが選ばれたことを確認すると、そのバリデータがブロックを提案する番になります。
このアイデアの主要な実装は、Whisk (opens in a new tab) と呼ばれています。 ウィスクは、次のように機能します。
- バリデータは共有シークレットにコミットします。 このコミットメントスキームでは、バリデータのアイデンティティにバインドできるように設計されています。また、第三者がこのバインドをリバースエンジニアリングして、特定のコミットメントを特定のバリデータに関連づけることができないようにランダム化することもできます。
- エポックの開始時に、RANDAOを用いて16,384のバリデータからランダムなバリデータセットが選択され、コミットメントがサンプリングされます。
- 次の8182スロット(1日分)の間に、ブロック提案者は独自のプライベートエントロピーを使用して、コミットメントのサブセットをシャッフルし、ランダム化します。
- シャッフルが終了したら、RANDAOを使用して、コミットメントを順番に並べたリストを作成します。 このリストは、イーサリアムスロットにマッピングされます。
- バリデータは、自身のコミットメントが特定のスロットに紐づいていることを確認し、そのスロットになったらブロックを提案します。
- この手順を繰り返し行うことで、スロットに対するコミットメントの割り当ては、常に現在のスロットよりもはるかに先に進んでいきます。
これにより、攻撃者は、次のブロックを提案する特定のバリデータが事前にわからないので、DOS攻撃ができなくなります。
シークレット・非シングル・リーダー選出(SnSLE)
プルーフ・オブ・ワーク下でのブロック提案の決定方法と同様に、各バリデータがスロットごとにランダムにブロックを提案する機会を得る仕組みを作るという別の提案もあり、**シークレット・非シングル・リーダー選出(SnSLE)**として知られています。 例えば、現在のプロトコルでバリデータをランダムに選択するために使われているRANDAO関数を活用すれば、簡単に実現できます。 RANDAOを使うアイデアとは、多くの独立しているバリデータから送信されたハッシュを混合することで、十分な乱数が生成するというものです。 SnSLEにおいて、これらのハッシュを使って、次のブロック提案者を選ぶことができます。例えば、最小値のハッシュの選択です。 有効なハッシュ値の範囲を設定することで、各スロットでバリデータが選ばれる可能性を調整することができます。 ハッシュが2^256 * 5 / N (N = アクティブなバリデータの数) 未満でなければならないとアサートすることで、各スロットで個々のバリデータが選ばれる確率は5/Nになります。 この例では、少なくとも1人の提案者が各スロットで有効なハッシュを生成する確率は99.3%になります。
現在の進捗
SSLEとSnSLEはまだ研究段階にあるため、 仕様が決まっていません。 また、SSLEとSnSLEは競合しているので、両方が実装されるということはありません。 この提案をリリースするには、さらに研究開発を行い、プロトタイピングを作成した上で、公開テストネットで実装する必要があります。
参考リンク
最終更新: 2024年4月11日