教育目的の情報であり、投資助言ではありません。投資によって損失が生じる可能性があります。
端的な回答
エクリプス攻撃とは、標的ノードのネットワーク接続をすべて、または隔離に十分な数だけ支配して、正直なピアから切り離す攻撃です。攻撃者はその後、ブロックやトランザクションを遅延、遮断、選別して中継し、標的に攻撃者が作り上げたネットワーク像を見せることができます。
標的ノードは、署名、プルーフ・オブ・ワーク、その他すべてのコンセンサスルールを引き続き検証しているかもしれません。しかし、それだけでノードの視野が完全かつ最新になるわけではありません。完全検証ノードは無効なデータを拒否できても、有効だが古いブランチに留め置かれたり、競合トランザクションを見られなくされたり、より広いネットワークが何を受け入れたかについて誤認させられたりします。
これは、ネットワーク全体を対象とする多数派攻撃とは異なります。攻撃者が狙うのはP2Pレイヤーの1台、または限られた数のノードであり、ネットワークの採掘能力やステークの過半を支配する必要はありません。シビル攻撃は、攻撃者が支配する多数のIDやアドレスを供給することでエクリプス攻撃を助ける場合がありますが、両者は同じ概念ではありません。シビル攻撃はIDの増殖を指し、エクリプス攻撃は標的の情報視野の隔離に成功した状態を指します。
隔離の仕組み
P2Pクライアントは、候補アドレスを発見して保存し、アウトバウンドピアを選び、一部のインバウンドピアを受け入れ、障害や再起動の後に再接続します。具体的なアルゴリズムはクライアントやバージョンによって異なります。攻撃者は、こうした判断を十分な数だけ自らの支配するインフラへ偏らせる方法を探します。
典型的な攻撃経路は、次の 4 段階です。
- 攻撃者が支配するピアを用意する。 標的のピア選択ルールで別個と見なされやすい複数のアドレスに、外部から接続可能なノードやIDを配置します。
- 候補集合を偏らせる。 悪意あるピアから攻撃者支配下のアドレスを広告するなどして、標的のアドレスマネージャーから正直なエントリーを締め出そうとします。実際に可能かどうかは、バケット設計、ネットグループの規則、レート制限、保存済みアドレスの質に左右されます。
- 再接続を誘発するか待つ。 再起動、接続の入れ替わり、サービス拒否、ルーティング障害によって、標的が正直なピアを置き換えることがあります。標的に独立した経路が少ない場合や、初期のアドレスデータベースが脆弱な場合には、隔離しやすくなります。
- 接続を独占し、情報を選別する。 標的の関連接続が攻撃者だけに向けば、攻撃者は選んだブロックとトランザクションだけを中継できます。多くの場合、即座に拒否されないよう、コンセンサスルールの範囲内にとどまります。
2015 年のUSENIX研究は、当時のBitcoinのP2P実装に対してこの種の攻撃を実証し、確認を利用した二重支払い、セルフィッシュマイニングの支援、敵対的フォークなどの影響を説明しました。そこで示された具体的なリソース見積もりやクライアントの詳細は歴史的なものであり、現在のBitcoin Coreや他のネットワークに普遍的に当てはまる定数ではありません。
現代のクライアントは、ランダム化・分割されたアドレス保存、ピア供給元の多様化、テスト接続、保護されたアウトバウンド接続やブロック中継接続、再起動をまたいで保持するアンカー、切断ルール、アドレス中継の制限を通じて、隔離のコストを高められます。これらは多層的な緩和策であり、エクリプス攻撃が不可能だと証明するものではありません。
支払いの例と対応
ある加盟店のノードが支払いを受け取り、6 confirmations と表示したとします。そのノードを隔離した攻撃者は、支払いを含む有効なブランチを密かに維持して見せる一方、正直なネットワークでは競合トランザクションが承認されている可能性があります。加盟店が隔離されたノードだけを根拠に取り消せない商品を引き渡せば、表示された確認数は、正直なネットワークがその支払いを確認した証拠にはなりません。
インシデント対応では、システムに大きな変更を加える前に証拠を保全します。
- 報告されたチェーン先端、累積作業量、直近のブロックハッシュ、ピア一覧、接続方向、ネットワーク種別、取得できる場合は対応する自律システム、最後にブロックを受信した時刻を記録します。
- チェーン先端とトランザクションの状態を、ネットワーク経路と管理経路の両方が実際に分離された、独立運用のノードと比較します。公開ブロックエクスプローラーも、そのインフラが独立している場合に限って役立ちます。
- 独立した視野が一致しない場合は、高額決済や自動引き渡しを停止します。同じ隔離された視野から確認数を増やしても、問題は解消しません。
- 信頼できることが確認済みのソフトウェアと設定に切り替え、DNS、ルーティング、ファイアウォール、プロキシ、ホストの侵害を調査し、クライアントの文書化された復旧手順に従ってピア状態を再構築します。
- 段階的に再接続し、ピア、ネットワークグループ、ブロック到着、チェーン作業量、トランザクション観測が多様化していることを確認します。汚染された可能性があるピアデータベースを無条件に復元してはいけません。
- ログを保存し、ノードまたはプロトコルのセキュリティチームへ報告します。エクリプス攻撃の疑いは、通常の停止、ルーティング障害、より広範なホスト侵害と重なっている場合があります。
Bitcoin Core 30.0の getpeerinfo は、network、mapped_as、inbound、last_block、synced_headers、synced_blocks、connection_type などのフィールドを返します。これらは調査に役立ちますが、単独で隔離を証明できるフィールドはありません。監視では平常時の基準値を確立し、ピアの集中と独立したチェーン観測を突き合わせる必要があります。
リスクと対策
- 受取人に対する二重支払い: 標的には、攻撃者が支配するブランチ上の確認が表示される可能性があります。高額または取り消せない引き渡しでは独立観測を必須とし、決済リスクに応じた上限を設定します。
- マイニングやバリデーター業務の妨害: 隔離された運用者は古い情報を基に作業し、収益を失ったり、敵対的なブランチを助けたりするおそれがあります。チェーン作業量、先端の鮮度、ピアの多様性を本番ノードの外部から監視します。
- 選択的な検閲: 攻撃者は無効なデータを送らなくても、トランザクションを隠したりブロックを遅延させたりできます。ブロック到着間隔の異常や独立観測者間の不一致を警告対象にします。
- ブリッジ、オラクル、RPCの障害: 単一の上流ノードを信頼するオフチェーンサービスは、古い状態を中継したり、チェーン再編成を見落としたりする可能性があります。管理主体とネットワークが独立した複数のデータソースを使い、明確なクォーラムと鮮度の規則を定めます。
- 接続数による過信: 単一の組織、ネットワーク、アドレス供給元が支配する 20 ピアは、数が少なくても多様な集合より独立性が低い場合があります。数だけでなく、多様性を測定します。
- 固定ピアによる集中化: 手動設定した単一の信頼済みピアは、汚染された候補プールを迂回できる一方、単一障害点になります。固定アンカーが適切なら、独立運用された複数の経路を使い、ランダム接続も維持します。
ノード運用者は、サポート対象のクライアントを最新に保ち、クライアント固有のピア管理の初期設定を理解し、管理アクセスを保護して、インバウンドとアウトバウンドの両方のトポロジーを監視する必要があります。支払い・プロトコル運用者は、署名、ブロードキャスト、チェーン観測、引き渡しの判断を分離し、一台の隔離されたノードだけで不可逆な処理を承認できないようにします。
よくある誤解
- フルノードはだまされない。 フルノードはコンセンサス上無効なデータを拒否しますが、正直なピアがより優れた有効チェーンを見せていないことを自動的に察知できるわけではありません。
- 確認数が多ければ常に十分である。 確認は、観測しているチェーンの視野に対してのみ意味を持ちます。隔離が疑われる状況では、観測経路の独立性が重要です。
- ピアを増やせば必ず解決する。 追加のピアが役立つのは、その所有者、ネットワーク経路、発見元、障害モードが十分に独立している場合だけです。
- エクリプス攻撃とシビル攻撃は同じである。 シビル攻撃のリソースは隔離を容易にしますが、エクリプス攻撃とは、標的のピア視野を支配した結果を指します。
- 一つのブロックエクスプローラーと一致すればノードは正常である。 エクスプローラーが、影響を受けたシステムと同じ上流事業者、ネットワーク経路、管理ドメインを共有している可能性があります。
- 古くなったノードはすべて攻撃を受けている。 ソフトウェアの不具合、混雑、保守、ルーティング障害、リソース不足でも同様の症状が生じます。エクリプス攻撃は仮説として扱い、複数のシグナルで検証します。
関連トピック
出典
- Eclipse Attacks on Bitcoin’s Peer-to-Peer Network - USENIX Association(参照日:2026-08-20)
- Bitcoin Core RPC: getpeerinfo - Bitcoin Core(参照日:2026-08-20)
- Bitcoin Core: connection_types.cpp - Bitcoin Core(参照日:2026-08-20)