
リプレイ攻撃は、過去に有効だった取引や認可を再びシステムに提出し、再実行させる攻撃です。たとえば、署名済みの書類をコピーして複数の窓口で繰り返しスタンプをもらう行為に例えられます。
ブロックチェーンでは、署名は秘密鍵によって生成され、「この操作を承認します」というデジタル印鑑の役割を果たします。署名済み取引が他の文脈でも認識される場合、リプレイ攻撃のリスクが生じます。
重複防止のため、ブロックチェーンはnonce(ナンス)という一意の識別子を使用します。ナンスは各操作ごとに付与される連番で、同じものは二度と使われません。未使用のナンスのみがシステムに受け付けられます。
クロスチェーンやフォーク環境では、chainIdも必要です。chainIdはネットワーク識別子として機能し、取引を特定のチェーンに紐づけ、他のチェーンでのリプレイを防止します。
リプレイ攻撃は、システムが操作の「コンテキスト」を明確に定義しない場合に発生します。コンテキストには、どのブロックチェーンに属するか、一意の識別子の有無、有効期限、特定のドメインやスマートコントラクトへの紐づけなどが含まれます。
署名が単に操作への同意だけを証明し、チェーンやアプリケーション、期間を指定しない場合、その署名を入手した第三者が他の場所で再利用できてしまいます。
アプリケーションが「使用済み/未使用」の状態をローカルやキャッシュのみで管理し、オンチェーンで追跡しない場合、リプレイ攻撃は容易になります。フォーク後に両チェーンが取引フォーマットやナンスを共有している場合も、クロスチェーンリプレイが生じます。
同一チェーンでのリプレイでは、攻撃者が認可メッセージや特殊な取引を傍受し、同じチェーン上で再提出します。これは「オフライン署名認可」にナンスや有効期限がない場合によく発生します。
クロスチェーンリプレイでは、取引やメッセージにchainIdの紐づけがなく、フォーク後に両チェーンが同じ署名フォーマットを受け付ける場合、攻撃者はチェーンAの有効な取引をチェーンBで再実行できます。
スマートコントラクト層では、処理済みメッセージIDの追跡や冪等性(繰り返し呼び出しても累積効果が生じない設計)がない場合、攻撃者は本来一度だけ実行されるべき操作を複数回呼び出せます。
2016年、Ethereumはチェーン分岐(フォーク)し、ETHとETCが誕生しました。初期の取引はチェーン間の区別がなく、クロスチェーンリプレイのリスクが生じました。これを受けて2016年にEIP-155が導入され、取引にchainIdを追加することで攻撃が大幅に減少しました(参考:Ethereum Improvement Proposal履歴)。
認可シナリオでは、署名ベースの承認(送金や利用制限など)に有効期限や一意のナンスがないと、署名が再提出される恐れがあります。2020年にはEIP-2612が導入され、ERC-20トークンの署名認可にナンスと有効期限の両方の必須化が標準化されました(参考:Ethereum Improvement Proposal)。
クロスチェーンブリッジやメッセージプロトコルが一意の識別子を割り当てず、消費済みメッセージの管理を怠る場合、リプレイ攻撃による資産の重複発行や解放が発生します。現在はメッセージIDやオンチェーンでの状態管理によりリスクが軽減されています。
まず、署名リクエストの内容を確認してください。ウォレットが「ブラインド署名」(明確な取引詳細やドメイン、チェーン情報がない署名)を求めてきた場合、リプレイリスクが高まります。
次に、認可に有効期限と一意のナンスが含まれているかを確認しましょう。どちらかが欠けているとリスクが上昇します。
明示的なチェーンコンテキストの有無も重要です。chainIdやドメイン分離(EIP-712でのdomainなど)がない場合、異なる環境間でのリプレイリスクが高まります。
最後に、不自然な繰り返し実行の兆候に注意しましょう。例えば、同じ認可が複数回使われている、短時間で資産が繰り返し移動している、同一メッセージが複数チェーンで効果を持っている場合などです。
ステップ1:取引をチェーンコンテキストに紐づける。EIP-155のchainIdを利用し、取引を本来のチェーンに限定し、クロスチェーンリプレイを防ぎます。
ステップ2:全ての認可に一意のナンスと有効期限を割り当てる。EIP-2612やPermit2のような標準では、全ての署名にナンスと期限の両方が必須です。期限切れ認可は無効となります。
ステップ3:スマートコントラクトで「使用済み」メッセージやナンスを記録する。各メッセージに再利用不可IDを持たせ、その消費状態をオンチェーンで管理し、冪等処理を実現します。
ステップ4:EIP-712に準拠した構造化署名を使用する。署名にドメイン名(verifyingContract、name、version)、chainId、明確な人間可読コンテンツを含めることで、誤用やリプレイの経路を最小化します。
ステップ5:クロスチェーンブリッジやメッセージチャネルで双方向検証を導入する。送信元・宛先チェーンだけでなく、メッセージの一意性、バッチ番号、処理状況も検証し、異なる経路での再実行を防ぎます。
ステップ1:明確なテキスト詳細を表示するインターフェースのみで署名する。ブラインド署名は拒否し、プロンプトにドメイン・チェーン情報・目的説明が含まれていることを確認してください。
ステップ2:認可の範囲を設定する。時間制限や上限付き承認を優先し、未使用権限はブロックチェーンエクスプローラーや管理ツールで定期的に取り消しましょう。Gateなどの取引所から出金する際は、必ずネットワークとアドレスが正しいことを確認し、クロス環境でのトラブルを防ぎます。
ステップ3:資金と運用用ウォレットを分離する。主要資産はハードウェアウォレットやウォッチオンリーウォレットに保管し、DAppsとのやり取りは少額のホットウォレットで行い、繰り返し認可による損失を最小化します。
ステップ4:アドレス帳やホワイトリストを活用する。Gateのアドレス帳に頻繁に使う宛先をメモ付きで保存し、出金ホワイトリストを有効化することで、誤操作やフィッシング署名による再提出リスクを減らせます。
ステップ5:異常な活動を監視する。重複取引や認可が短時間で繰り返し発動した場合、直ちに操作を停止し、認可を取り消し、デバイスや拡張機能のセキュリティを確認してください。
リプレイ攻撃は、同じ有効な取引や認可を再提出するもので、問題の本質は繰り返し実行です。二重支出は同じ資産を二度使うことを狙い、合意形成やブロック再編成などプロトコルレベルで根本的に異なります。
Sybil攻撃は多数のIDを使い、多数のユーザーを装って投票や分配操作を行うものです。取引の繰り返しとは無関係で、ID層の欺瞞に該当します。リプレイ攻撃は取引・メッセージ層で発生します。
さらに、中間者攻撃(man-in-the-middle)は通常データや経路の改ざんを行いますが、リプレイ攻撃は内容を変更せず、同一データの再提出のみを行います。
2016年にEIP-155でchainIdが導入されて以降、クロスチェーンリプレイ攻撃は激減しました。EIP-2612(2020年)やPermit2は署名認可にナンスと有効期限の標準化を進めています。2025年にはマルチチェーンやLayer 2ネットワークの拡大に伴い、メッセージチャネルやアンチリプレイID、冪等設計が基盤インフラとなりつつあります。
アカウント抽象化(例:ERC-4337)はドメインごとのナンス管理や戦略を推進し、操作ごとに異なるナンスを使うことでドメイン内リプレイリスクを低減します。クロスチェーンブリッジも送信元検証や一意メッセージ追跡を重視し、再実行の機会を制限しています。
リプレイ攻撃の本質は「有効な内容が誤ったコンテキストで再実行される」ことです。対策はコンテキストの明確化(チェーン識別子、一意ナンス、有効期限、ドメイン紐づけ)と、消費済み状態のオンチェーン記録にあります。開発者はEIP-155、EIP-712、EIP-2612/Permit2の標準と冪等設計を採用し、一般ユーザーはブラインド署名を避け、期間限定認可や用途別ウォレット、取引所ホワイトリストの活用でリスクを軽減しましょう。資産に関する異常な繰り返しが発生した場合は、直ちに操作を停止し、認可を取り消してください。
リプレイ攻撃自体が直接資産を盗むことはありませんが、悪意のある繰り返し取引につながる可能性があります。たとえば、チェーンAで100トークンを送金した際、攻撃者がその取引をチェーンBでリプレイすると、両チェーンで資産を失うことになります。防御策はchain ID検証対応ウォレットの利用と、クロスチェーン操作時の慎重な確認です。
Gateのような中央集権型取引所には複数のセキュリティ層があり、プラットフォーム内での通常取引ではリプレイ攻撃のリスクはほぼありません。主なリスクはセルフカストディ型ウォレットによるクロスチェーン送金時です。Gateでの現物・デリバティブ取引は、プラットフォームのリスク管理によって保護されています。
チェーンの合併やフォークなど大規模なエコシステム変更時には、リプレイ攻撃のリスクが高まります。しかし、プロジェクトは通常、事前にchain IDの更新など保護策を実施します。ユーザーは公式発表を待ち、移行期のクロスチェーン操作を控えることで、攻撃対象となるリスクを回避できます。
秘密鍵の漏洩はすでに重大なセキュリティ事故です。リプレイ攻撃は、攻撃者が単一チェーンだけでなく、複数チェーンで取引をリプレイすることで、類似資産をすべて失う可能性をさらに高めます。唯一の対処法は、直ちに資産を新しいウォレットに移すことです。
EIP-155はchain IDの仕組みを導入し、全ての取引に一意のネットワーク識別子を持たせることで、他チェーンでの実行を防ぎます。現在のEthereumネットワークや互換チェーンはこの標準を採用しており、ほとんどのリプレイ攻撃は成立しません。EIP-155対応ウォレットを使うことが、ユーザー自身を守る最も簡単な方法です。


