用語集 / プライバシーとセキュリティ
二重支払い
別名は二重消費、Double spendです。
- 二重支払いとは?
- 二重支払いとは、同じビットコインで2人の異なる相手に支払うことを狙い、同じコインを使う2件目のトランザクションを1件目の代わりに承認させる試みです。
デジタルマネーは本質的にコピー可能であり、そのコピーを止めることが、ビットコインが解決すべく作られた課題です。すべてのコインはちょうど1回だけ消費できるアウトプットであり、台帳は一方の版をブロックの下に埋めることで紛争を決着させます。6回のコンファメーション(およそ1時間)の後でそれを取り消すには、ネットワーク全体をアウトマイニングする必要があります。支払いがコンファメーションするまでは、受け取ったお金ではなく約束として扱ってください。
仕組み
ビットコインを使うことは、特定のアウトプットを消費することを意味し、各アウトプットはそれを作成したトランザクションと、そのトランザクション内での位置によって識別されます。フルノードは未使用のすべてのアウトプットの集合を保持しており、検証は照合です。あなたのトランザクションが指定するアウトプットがその集合になければ、そのトランザクションは無効であり、どれだけ適切に署名されていても破棄されます。
これにより、コンファメーション済みの二重支払いは構造上不可能になります。興味深いケースはすべてコンファメーションの前に起こり、それには3つあります。
よくあるのは置き換えです。同じアウトプットを使う2つのトランザクションは競合し、生き残れるのは1つだけです。ノードは先に届いた方を受け入れ、通常は2つ目を無視しますが、より高い手数料を支払う置き換えは転送します。2024年10月にリリースされたBitcoin Core 28.0以降、-mempoolfullrbf設定はデフォルトで有効になっており、元のトランザクションが置き換え可能であることを要求したかどうかにかかわらず、ノードは競合するより高額な手数料のトランザクションを中継します。未コンファメーションのものはすべて対象になります。
2つ目は競争です。攻撃者はあるトランザクションを加盟店のノードに、競合するトランザクションをネットワークの残りに同時にブロードキャストし、自分に支払う版がマイナーに先に届くことに賭けます。手数料の上乗せは不要で、より良い接続性だけが必要です。
3つ目は再編成であり、ハッシュパワーの過半数を必要とし、51%攻撃の項目で扱っています。すでにブロックに入った支払いを取り消せる唯一の方法です。
ビットコイン自身のコードがこれについて公の場で誤ったのはちょうど1回だけです。2018年9月に開示されたCVE-2018-17144は、トランザクションが同じインプットを2回使っても、それを検証するノードがクラッシュしないバグでした。Bitcoin Core 0.16.3が数日以内に修正を出荷し、チェーンへの損害は発生しませんでしたが、この一件は、この保証が、人々が監査を続けなければならないソフトウェアによって守られているという有用な注意喚起になります。
ビットコインを購入するときにこれが重要な理由
購入者が二重支払いの被害者になることはほとんどありません。あなたがドルやユーロを取引所に送ってビットコインを受け取るとき、決済リスクを負うのは取引所です。だから取引所は出金を実行する前にコンファメーションを待ち、入金には進行状況のカウンターが表示されます。コインがあなたが管理するアドレスに届けば、支払いにはあなたの署名が必要なので、誰もそれらを再び使うことはできません。
あなたがビットコインを受け取る側になった瞬間に、リスクの向きは反転します。それは人々が思うより頻繁に起こります。個人間取引でコインを売ること、フリーランスの仕事でビットコインを受け取ること、支払いを受け付ける店を営むことです。いずれの場合も、未コンファメーションのトランザクションに対して商品や現金を渡したり、銀行振込を実行したりすることが誤りです。少なくとも1ブロック待ち、多額の場合は複数ブロック待ってください。
この言葉をめぐる詐欺のジャンル全体も存在します。メッセージアプリや動画サイトの売り手は「double spend software」「flash BTC」、あるいは手数料と引き換えに使用可能なコインを生成すると称するツールを提供します。彼らが売るものは何も機能しません。その無効なトランザクションはネットワーク上のすべてのノードに拒否されるからであり、商品とはあなたが支払った手数料のことです。当サイトのセキュリティガイドでは、これが属する詐欺の種類を扱っています。
ライトニングネットワークは問題を除去するのではなく、その形を変えます。支払いはチャネルの残高に対して数秒で決済されるため、加盟店はブロックを待つ必要がなく、二重支払いの問題は、チャネルの相手方が古い状態をブロードキャストしようとするかどうかに移り、それを罰するためにウォッチタワーが存在します。
未コンファメーションの支払いを置き換える手順
未コンファメーションの支払いを置き換えるのは攻撃の安価な版であり、実際の数字で一通り追う価値があります。
Aliceはノートパソコンを買い、0.01 BTCを支払います。彼女のウォレットは1つのインプットと2つのアウトプットを持つ約141仮想バイトのSegWitトランザクションを構築し、3 sat/vB、すなわち423 サトシの手数料を付けます。店の端末は支払いを受け取ったと表示し、ノートパソコンは店の外へ出ます。
ブロックが届く前に、Aliceは同じインプットを使う2つ目のトランザクションをブロードキャストし、今度はコインを自分のアドレスに送り、手数料を20 sat/vB、すなわち2,820 サトシにします。マイナーは自分たちにとってより価値の高い版を選びます。ブロックが届くと、店の支払いはメモリプールから消え、決してコンファメーションしません。Aliceは追加で2,397 サトシを支払っただけで、ほとんどの価格では1ドルを大きく下回り、ノートパソコンとコインの両方を手にしました。
その手順に珍しいものは何もなく、ハッシュパワーも関与していません。防御にも費用はかかりません。1ブロック、平均で約10分待てば、置き換えの窓は閉じます。
二重支払いvs replace-by-fee
replace-by-feeは同じ仕組みを正直に使うものです。あなた自身の支払いが滞留したとき、同じ受取人に対してより高い手数料で再ブロードキャストすれば、ネットワークは古い版を問題なく置き換えます。二重支払いはその仕組みを使って誰が支払いを受けるかを変えます。中継ポリシーは両者を区別できません。違いはアウトプットに表れた意図だからであり、未コンファメーションの支払いを受け付ける加盟店が今ではそのすべてを置き換え可能とみなす理由でもあります。
二重支払いvsトランザクションの展性
展性は、トランザクションが支払う内容を変えずにその識別子を変えます。コインは依然として意図された受取人へ移動し、あなたが追跡していたtxidが古くなるだけであり、これはかつて取引所の会計を壊し、2014年2月にはMt. Goxの出金システムを壊しました。2017年8月に有効化されたSegWitは、署名をtxidにハッシュ化されるデータの外に移すことで、第三者の展性を除去しました。展性の影響を受けたトランザクションは帳簿上の問題です。二重支払いは消えてなくなる支払いです。