イーサリアムのプルーフ・オブ・ステークにおける鍵について
最終更新: 2026年2月25日
イーサリアムでは、公開鍵と秘密鍵による暗号化を用いてユーザーの資産を保護しています。 公開鍵は、イーサリアムアドレスの基盤として使用されるもので、誰もが見ることができ、一意の識別子として使用されます。 一方で、プライベートキー(すなわち「秘密鍵」)はアカウント所有者以外はアクセスできないものでなければなりません。 秘密鍵は、トランザクションおよびデータに「署名」するために用いられ、特定の秘密鍵の所有者がその鍵のアクションを承認したことを暗号化によって証明できるものです。
イーサリアムの鍵は、楕円曲線暗号 (opens in a new tab)を使用して生成されます。
しかし、イーサリアムがプルーフ・オブ・ワークからプルーフ・オブ・ステークに移行した際、新しい種類の鍵がイーサリアムに追加されました。 従来の鍵も、これまでとまったく同様に機能し、楕円曲線暗号を用いて生成された鍵により保護されるアカウントは従来とまったく変更されません。 しかし、イーサのステーキングやバリデータの実行によりプルーフ・オブ・ステークに参加するには、新しい種類の鍵が必要になります。 この新しい種類の鍵は、暗号化の手段を必要とする非常に多くのバリデータ間におけるメッセージのやりとりが必要であるというスケーラビリティの課題を克服するために導入されたもので、メッセージを集約することで、ネットワークがコンセンサスを実現するために必要なコミュニケーションの規模を縮小することができます。
この新しい種類の鍵は、Boneh-Lynn-Shacham (BLS) 署名方式 (opens in a new tab)を使用します。 BLSは、署名を非常に効率的に集約できるだけでなく、集約された個々のバリデータの鍵に対してリバースエンジニアリングを実行することも可能であり、バリデータ間のアクションを管理する上で理想的なソリューションです。
2種類のバリデータ鍵
イーサリアムでは、プルーフ・オブ・ステークへの移行前は、楕円曲線ベースの秘密鍵だけを用いて資金にアクセスしていました。 プルーフ・オブ・ステークの導入により、ソロステーカーになることを希望するユーザーには、バリデータ鍵と出金鍵も必要になりました。
バリデータ鍵
バリデータの署名鍵は、以下の2つの要素で構成されます:
- バリデータ秘密鍵
- バリデータ公開鍵
バリデータ秘密鍵は、ブロックの提案やアテステーションといったオンチェーンの操作を行うために使用します。 このため、バリデータ秘密鍵は常にホットウォレットで管理しなければなりません。
この柔軟性により、バリデータの署名鍵をあるデバイスから別のデバイスに非常に迅速に移動できるという利点がありますが、紛失または盗難された場合、攻撃者はいくつかの方法で悪意のある行動をとることができます:
- 以下の行為に対して、バリデータの資産がスラッシングされうる:
- 提案者となり、同一スロットにおいて2つの異なるビーコンブロックに署名してしまう
- アテスターとなり、他のアテステーションを「取り囲む」アテステーションに署名してしまう
- アテスターとなり、同一のターゲットに対して2つの異なるアテステーションを署名する場合
- 自発的な退出を強制して、当該のバリデータがステーキングを行えなくし、出金鍵の所有者がバリデータのETH残高にアクセスできるようにする場合
バリデータ公開鍵は、ユーザーがステーキングの入金コントラクトにETHを入金する際のトランザクションデータに含まれています。 これは、入金データと呼ばれ、イーサリアムがバリデータを特定するために用いられます。
出金の認証情報
すべてのバリデータは、_出金の認証情報_として知られるプロパティを持っています。 この32バイトのフィールドは、BLSによる出金の認証情報を表す0x00か、実行アドレスを示す認証情報を表す0x01のどちらかで始まります。
0x00のBLS鍵を持つバリデータは、超過残高の支払いやステーキングからの全額出金を有効にするために、これらの認証情報を実行アドレスを指すように更新する必要があります。 これは、最初の鍵生成時に入金データで実行アドレスを提供するか、_または_後で出金鍵を使用してBLSToExecutionChangeメッセージに署名し、ブロードキャストすることで行えます。
出金鍵
出金鍵は、最初の入金時において設定していない場合、実行アドレスを示す出金の認証情報を更新する際に必要になります。 これにより、超過残高の支払いプロセスを開始できるだけでなく、ユーザーはステークしたETH全額を出金できるようになります。
出金鍵は、バリデータ鍵と同様に、以下の2つの要素で構成されます:
- 出金用秘密鍵
- 出金用公開鍵
出金の認証情報を0x01タイプに更新する前にこの鍵を紛失してしまうと、バリデータは残高にアクセスできなくなります。 ブロックや署名に必要なのはバリデータの秘密鍵であるため、この場合でも、バリデータはアテステーションやブロックに署名を行うことができますが、出金鍵を紛失してしまった場合、バリデータが署名を行う理由はほぼ/まったくなくなります。
イーサリアムのアカウント鍵とバリデータ鍵を分離することで、1人のユーザーが複数のバリデータを実行することが可能になります。
注: 現在、ステーキングの責務から退出してバリデータの残高を引き出すには、バリデータ鍵で自発的退出メッセージ(VEM) (opens in a new tab)に署名する必要があります。 ただし、EIP-7002 (opens in a new tab)は、将来、ユーザーが出金鍵で退出メッセージに署名することで、バリデータの退出をトリガーし、その残高を引き出すことを可能にする提案です。 これにより、ステーキング・アズ・ア・サービス・プロバイダーにETHを委任するステーカーが自身の資金の管理を維持できるようになり、信頼の仮定が軽減されます。
シードフレーズからの鍵の導出
ユーザーが32ETHをステークするには、相互に完全に独立した2つの鍵セットが新たに必要になるため、特に複数のバリデータを実行するユーザーにとっては鍵の管理がとても煩雑になります。 この状況を回避するため、1つの共通のシークレットから複数のバリデータ鍵を導出できるようになっており、この1つのシークレットを保存することで、複数のバリデータ鍵へのアクセスが可能になります。
ニーモニック (opens in a new tab)とパスは、ユーザーが自分のウォレットにアクセスする (opens in a new tab)際によく遭遇する顕著な機能です。 ニーモニックとは、特定の秘密鍵に対する当初のシードとして機能する単語のつらなりです。 ニーモニックは、追加のデータと結合することで、「マスター鍵」と呼ばれるハッシュを生成できます。 マスター鍵は、特定のツリーにおけるルートだと考えればよいでしょう。 このルートから派生したブランチについては、階層的なパスを用いて導出できるので、子ノードは親ノードのハッシュとツリー上のインデックスを結合したものとして存在することになります。 ニーモニックベースの鍵生成に関するBIP-32 (opens in a new tab)およびBIP-19 (opens in a new tab)標準についてお読みください。
パスは、以下のような構造を持ちます。ハードウェアのウォレットを使用したことがあるユーザーにとっては、おなじみでしょう。
1m/44'/60'/0'/0`このパスでは、秘密鍵の各要素をスラッシュで区切っています:
1master_key / purpose / coin_type / account / change / address_indexこのロジックにより、ツリーのルートは共通で、分岐点で差別化できるため、ユーザーは単一のニーモニックフレーズにできるだけ多くのバリデータを関連付けることができます。 ユーザーは、ニーモニックフレーズを用いて、鍵をいくつでも導出することができます。
1 [m / 0]2 /3 /4[m] - [m / 1]5 \6 \7 [m / 2]各ブランチは、/で区切られるため、m/2は、マスター鍵で開始され、ブランチ2に従うことを意味します。 以下の図の場合、1つのニーモニックフレーズを用いて3つの出金鍵が保存され、それぞれに2つのバリデータが関連付けられています。

