シークレットリーダー選出
現在のプルーフ・オブ・ステークベースのコンセンサスメカニズムでは、今後のブロック提案者のリストが公開され、彼らの IP アドレスをマッピングすることが可能です。 そのため、攻撃者は、ブロックを提案する予定のバリデータを特定し、そのバリデータに対してサービス拒否(DOS)攻撃を仕掛けることで、時間通りにブロックの提案を行わせないように妨害することができます。
この状況は、攻撃者にとって利益を得る機会になる可能性があります。 例えば、スロットn+1
に選ばれたブロック提案者が、スロットn
の提案者に対して DoS 攻撃を行うことで、ブロックを提案する機会を奪うことができます。 これにより、攻撃側のブロック提案者は、両方のスロットの MEV を抽出したり、2 つのブロックに分かれるはずだったすべてのトランザクションを 1 つのブロックにまとめたりすることで、関連するすべての手数料を独占できます。 この攻撃は、高度な方法を使って DOS 攻撃から防御することができる技術力の高い機関のバリデータよりも、一般的な家庭のバリデータに対して悪影響を与える可能性が高く、結果的にバリデータの集中化につながる可能性があります。
この問題には、いくつかの解決策があります。 1 つは、分散バリデータ技術(opens in a new tab)です。これは、バリデータの実行に必要なさまざまなタスクを、冗長性のある複数のマシンに分散する技術です。これにより、攻撃者が特定のスロットでブロックの提案を妨害するのが難しくなります。 しかし、最も有効な解決策は、シークレット・シングル・リーダー選出(SSLE) です。
シークレット・シングル・リーダー選出
SSLE(シークレット・シングル・リーダー選出)では、選出されたバリデータのみが自分が選ばれたことを知ることができるように、高度な暗号化が使用されます。 これは、各バリデータが秘密に対するコミットメントを送信することで機能します。このコミットメントは、バリデータ全員で共有します。 コミットメントは、シャッフル、再構成され、誰もコミットメントをバリデータにマッピングすることはできませんが、各バリデータは自分に属するコミットメントを把握しています。 その後、ランダムに 1 つのコミットメントが選ばれます。 バリデータが自身のコミットメントが選ばれたことを確認すると、そのバリデータがブロックを提案する番になります。
このアイデアを実装した主要なものとして、ウィスク(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 は競合しているので、両方が実装されるということはありません。 この提案をリリースするには、さらに研究開発を行い、プロトタイピングを作成した上で、公開テストネットで実装する必要があります。