Double Spend Attackとは何か?
Double Spend Attackとは、同じコインを二度使おうとして、ネットワークをだまして一つの支払いを受け入れさせたあと、静かに別の支払いに置き換える行為です。スニーカーの代金を支払って店を出たあと、領収書を巻き戻して代金が戻るようなイメージです。これはタイミングとコンセンサスの勝負で、魔法のようなものではありません。
「一度支払いが出れば起こらない」これは間違いです。十分な確認が得られるまでは、Double Spend Attackが結果をひっくり返す可能性があります。最初に見えたことが最終とは限りません。
Double Spend Attackの仕組み
攻撃者が店舗に支払いを行う一方で、同じコインを自分に戻す矛盾する支払いをこっそり用意していると想像してください。もし攻撃者側の取引が受理される競争に勝てば、店舗は代金を受け取れません。
- Setup: 攻撃者は同じコインを消費する二つの取引を作成します。
- Send: 一方は店舗へ送られ、店側はそれがブロードキャストされたのを見て「支払いを受け取りました」と表示するかもしれません。
- Compete: 攻撃者は二つ目の取引をネットワークに流して、最初の取引よりも先にブロックに取り込まれるように仕向けます。
- Confirm: マイナーは プルーフオブワーク(PoW) によってブロックを追加し、より早く伸びるチェーンが正当と見なされます。
- Reorg: 攻撃者側の取引が深い確認を得ると、先にあった取引が孤立ブロックになることがあり、店舗への支払いが取り消されます。
はい、ここではタイミングとインセンティブが大きな役割を果たします。
なぜDouble Spend Attackが重要か
では、誰かがこれを試したらどうなるでしょうか。気にすべき理由は、これがオープンな通貨の信頼モデルを試すからです。
- Benefit: 仕組みを知ることで、安全な確認ポリシーを選び、即時の後悔を避ける助けになります。
- Perspective: オープンなシステムはインセンティブで成り立っています。より多くのハッシュレートと正直な参加があれば、分散型ネットワークでは攻撃が難しくなります。
- Relevance: これは暗号通貨の支払い、取引所、深い確認を待たずにコインを受け取るアプリなどで見られます。
高額の支払いでは複数の確認を待ってください。少額の場合は、上限や評価のチェック、決済チャネルなどのリスクルールを使うとよいでしょう。将来の自分が感謝するはずです。
Double Spend Attackの主な特徴
通常の支払い失敗と異なる点は次の通りです:
- Timing: トランザクションが十分に確認される前の短い時間を狙います。
- Reorg: チェーンが再編成されて攻撃者側の取引が優先されることを期待します。
- Incentive: マイナーやネットワークの報酬構造を突いて、正当な取引に勝とうとします。
- Scope: 目的は一組のコインを二重に使う、いわゆる 二重支払い です。
変種
暗号通貨のチャットや開発スレでいくつかのパターンが取り上げられます:
- Race: 二つの取引が短時間で競合する即時のブロードキャスト争いで、しばしば Race Attack と呼ばれます。
- Finney: マイナーが矛盾する取引を含むブロックを事前に採掘し、被害者と取引してからそのブロックを公開する手法で、Finney Attack として知られます。
- Majority: 十分なハッシュレートがあれば、攻撃者は最近の履歴を書き換えることができ、古典的には 51% Attack と呼ばれます。
ゼロ確認は最終的ではありません。支払いを即時に受け入れるということは、速さを安全より優先しているという選択です。その判断はあなた自身の責任になります。
例
詐欺師が店でノートパソコンを購入し、店員が新しい取引を受け入れたところ、数分後にチェーンが攻撃者側の矛盾する支払いを支持すると、店舗はコインもノートパソコンも失います。
豆知識
サトシはフォーラムで初期の二重支払いの手口について議論し、辛抱強く確認を待つことで多くの素人の試みは防げると指摘していました。古い助言ですが、現在でも有効です。
まとめ
一言で言えば:Double Spend Attackはコンセンサスに対するタイミングを狙う手口で、最善の防御は確認ルールを守ることと実務的な注意です。
