Double Spendとは何ですか?
Double Spendは、同じデジタルコインを二回の支払いに使おうとする行為です。コンサートのチケットをコピーして二人の入場係に渡すようなイメージです。ブロックチェーンでは合意形成がDouble Spendの試みを抑えますが、タイミングの隙やトリックが悪用されることがあります。
ウォレットに入金が表示されたからといって確定とは限りません。ネットワークが確認を完了するまでは、トランザクションが別のものに置き換えられたりマイナーに無視されたりする可能性があります。
Double Spendの仕組み
ここでは、抜け目のある攻撃者と何も知らない売り手を例に、簡単な流れを示します。
- ステップ1:攻撃者は同じコインを使う二つのトランザクションを作成します。一方は売り手へ、もう一方は自分へ戻すものです。
- ステップ2:まず売り手への支払いをブロードキャストして保留状態に見せ、売り手が商品を渡します。
- ステップ3:次に競合する取引に高い手数料を付けてマイナーや採掘プールの注目を集めます。
- ステップ4:マイナーが競合する取引を先にブロックに含めると、売り手の保留中の支払いはネットワークによって無効になります。
- ステップ5:より強力な攻撃者は非公開のチェーン枝を採掘して後で公開し、公的な履歴を置き換えてどちらの支払いが有効かをひっくり返すことがあります。
これが基本的な仕組みであり、確認が重要な理由です。
なぜ Double Spend が問題になるのか
暗号通貨で支払いを受けるなら、これは軽視できません。収益や安心感に影響します。
- 利点:リスクを把握することで確認ルールを適切に設定し、即時決済を安全に保てます。
- 観点:Double Spendの脅威は、チェーンが最終性や手数料、マイナーの挙動を考える際に影響を与えました。
- 関連性:POSの流れ、取引所、NFT販売、DeFiブリッジなどで見られます。
少額の購入ではリスクの階層を使い、replace by feeのフラグに注意してください。大きな金額では複数の確認を待ちましょう。ビットコインでは6確認が依然として有力な目安です。
Double Spendの主な特徴
注目すべき主要な点:
- 競合:二つ以上のトランザクションが同じ入力を使おうとし、ネットワークは両方を同時に受け入れられません。
- タイミング:確認数が増えるほど成功率は下がります。
- 動機:マイナーは一般に手数料の高い取引を好む傾向があり、それが攻撃者に有利に働くことがあります。
- リスク:売り手が確認ゼロの支払いをチェックなしで受け入れるとDouble Spendが起きやすくなります。
バリエーション
手口はいくつかありますが、基本は同じです。よくある例を挙げます:
- Race Attack:攻撃者はほぼ同時に二つの競合する取引を送信し、マイナーが自分に有利な方を選ぶことを期待します。
- Finney Attack:採掘者が自分宛ての支払いを含むブロックを事前に採掘し、そのブロックを公開する前に売り手にコインを使って支払いを行います。
- 51% Attack:十分なハッシュレートがあれば、攻撃者は正当なチェーンを上回り、支払いを継続的に取り消せる場合があります。
ブロックの深さが増すほど確定度は高まります。十分な確認が行われると実質的なimmutabilityが働き、まとまったリソースなしにDouble Spendを行うのは非常に困難になります。
例
カフェが確認ゼロの支払いを受け付け、買い手がコーヒーを持ち去った後で手数料の高い競合取引が確定し、カフェの支払いが無効になる場合があります。
豆知識
Satoshiはビットコインを二重支払い問題の解決策として提示しました。したがってDouble Spendを防ぐことは副次的な課題ではなく、主要な目的の一つでした。
まとめ
簡単に言えば:Double Spendはタイミングと合意に関する問題で、確認や適切なチェック、少しの忍耐で対処できます。ロレックスとRedditの話が交わるようなイメージです。
