初心者のためのダブルスペンドガイド
ホーム
記事
初心者のためのダブルスペンドガイド

初心者のためのダブルスペンドガイド

中級者
公開済 Feb 17, 2020更新済 Jan 31, 2023
7m

ダブルスペンドとは?

ダブルスペンドとは、デジタルキャッシュシステムにおいて、同じ資金が同時に 2 人の受取人に使用されてしまう問題です。適切な対策がなければ、この問題を解決しないプロトコルは根本的に損なわれてしまいます。 ユーザーは、受け取った資金がすでに他の場所で使用されていないことを確認する方法がありません。

デジタル・キャッシュに関しては、特定のユニットを複製できないようにすることが最も重要です。アリスが10個のユニットを受け取り、それを10回コピー&ペーストして、自分のものになってしまうと、システム全体が崩壊してしまいます。 100ユニットを送ることができます。同様に、同じ10ユニットをボブとキャロルの両方に同時に送ることができれば、このようなスキームは機能しません。つまり、デジタルマネーが機能するためには、このような行動を防ぐ仕組みが必要なのです。


ダブルスペンドの防止方法

中央集権的アプローチ

中央集権型のルートは、分散型の代替案よりも実装がとても容易です。これには通常、1 人の監督がシステムを管理し、ユニットの発行と分配を管理する必要があります。ダブルスペンド問題に対する集中型ソリューションの良い例として、 デヴィッド・チャウムのeCashがあります。

暗号学者デビッド・チャウム氏が1982年に発表した論文「Blind Signatures for Untraceable Payments」の中で詳述しているように、銀行は現金を模したデジタル資産(匿名でピアツーピアの交換が可能)をユーザーに発行するには、銀行はブラインドサインを使用することができます。

このような状況で、ユーザー(ここではダンと呼ぶ)が100ドルのデジタルキャッシュの受け取りを希望する場合、まず銀行に通知する必要があります。彼の口座に残高があれば、彼は乱数を生成します (小額の場合は多数の乱数)。5つの番号を生成し、それぞれに20ドルの値が割り当てられたとします。銀行が特定の単位を追跡できないようにするために、ダンは乱数のそれぞれにブラインディングファクターを加えることで、乱数を難読化します。

彼はこのデータを銀行に渡し、銀行は彼の口座から100ドルを引き落とし、5つの情報のそれぞれが20ドルで換金可能であることを証明するメッセージにサインします。これでダンは銀行から発行された資金を使うことができます。彼はエリンのレストランに行き、40ドルの食事を購入します。

ダンは、ブラインディングファクターを取り除くことで、デジタルキャッシュの”お札”(シリアル番号とよく似ている)に関連付けられた乱数を露出させることができます。ダンが他の商人と取引することを防止するために、すぐに銀行で償還しなければなりません。銀行は署名が有効であることを確認し、問題がなければエリンの口座に40ドルを振り込みます。

使用した紙幣は基本的に焼却されるため、エリンが新しい残高を同じように使用したい場合、さらに多くの紙幣を発行しなければなりません。

チャウムのeCashの仕組みは、個人的な送金に価値があるかもしれません。しかし、銀行は破綻の中心となるため、回復力に欠けます。発行された紙幣は、それ自体には何の価値もありません。顧客は銀行に翻弄され、貨幣が機能するためには銀行の善意に頼らなければなりません。これこそが、仮想通貨が解決しようとしている問題なのです。


分散型アプローチ

管理者が存在しないエコシステムにおいて、資金が二重に使用されないようにすることは困難です。同等の力を持つ参加者が、不正行為を防止し、すべてのユーザーが誠実に行動するようにインセンティブを与える一連のルールを調整しなければなりません。

ビットコインのホワイトペーパーで提示された最大のイノベーションは、ダブルスペンド問題の解決策でした。サトシは、そのように参照されていませんが、現在ブロックチェーンとして広く知られているデータ構造を提案しました。
ブロックチェーンは、実際にはいくつかのユニークな特性を持つデータベースです。ネットワーク上の参加者(ノードと呼ばれる)は、特殊なソフトウェアを実行し、データベースのコピーを仲間と同期させることができます。その結果、ネットワーク全体がジェネシスブロックまでさかのぼって取引の履歴を確認することができるようになります。ブロックチェーンを公開して閲覧できるようにすることで、ダブルスペンド取引などの不正行為を簡単に検出し、防止することができます。
ユーザーが取引をブロードキャストしても、すぐにブロックチェーンに追加されるわけではありません。マイニングによって、ブロックがチェーンに追加された場合のみ、その取引が有効であると考えるべきです。そうでなければ、送信者が他の場所で同じ通貨を使用する可能性があるため、彼らは資金を失うリスクがあります。 
取引が確認されると、所有権は新しいユーザーに割り当てられるため、通貨を二重に使用することはできません。このような理由から、多くの人は、支払いを有効なものとして受け入れる前に、複数の確認を待つことを推奨しています。後続の各ブロックでは、チェーンを修正したり書き換えたりするのに必要な労力が大幅に増加します(51%の攻撃時に発生する可能性があります)。

レストランのシナリオをもう一度見てみましょう。ダンはレストランに戻り、今回は窓に"Bitcoin Accepted Here"のステッカーが貼られているのに気づきました。前回食べた食事が美味しかったので、再度注文しました。彼には 0.005 BTC のコストがかかります。

エリンは彼に資金を送金するための公開アドレスを提示します。ダンはその取引をブロードキャストし、これは実質的にはダンが所有していた0.005 BTCがエリンのものになったことを示す署名入りのメッセージを送信しました。詳細は省きますが、ダンの署名入り取引を確認した人は誰でも、ダンが実際に通貨を所有していたことを確認することができ、通貨を送る権限を持っていたことがわかります。

前述したように、その取引は確認済みのブロックに含まれている場合にのみ有効です。未確認の取引を受け入れることは、先ほどの例であるeCashの40ドルを銀行ですぐに現金化せずに受け入れるのと似ています。送信者は、それを他の場所で使用することができます。そのため、エリンはダンの支払いを受け入れる前に、少なくとも6つのブロックの確認(約1時間)を待つことをお勧めします。


ビットコインでのダブルスペンド

ビットコインは、少なくともプロトコルが想定通りに使用されている場合、ダブルスペンド攻撃を防ぐために慎重に設計されています。つまり、個人がブロック内で取引が確認されるのを待っていても、送信者が簡単に元に戻す方法はありません。そのためには、ブロックチェーンを“反転”する必要があり、非現実的な量のハッシュパワーが必要となります。

しかし、確認されていない取引を受け入れる当事者をターゲットとしたダブルスペンド攻撃はいくつかあります。例えば、低価格の商品を購入した場合、商人は取引がブロックに含まれるのを待ちたくないかもしれません。多忙なファストフード・レストランでは、ネットワークがすべての購入について処理されるのを待つ余裕はないでしょう。そのため、ビジネスが“即時”決済を可能にした場合、ダブルスペンドの可能性が出てきます。誰かがハンバーガーを注文して支払い、その後すぐに同じ資金を自分のアドレスに送るかもしれません。手数料が高くなると、この新しい取引が先に確認される可能性が高くなるため、前の取引が無効になります。

ダブルスペンドを行うには、3つの一般的な方法があります。

  • 51%攻撃単一のエンティティや組織がハッシュレートの50%以上を管理している場合、取引の順序を除外したり変更したりすることができます。このような攻撃はビットコインでは考えにくいですが、他のネットワークでは発生しています。
  • レース攻撃:同じ資金を使用して、相反する2つの取引が連続してブロードキャストされますが、確認されるのは1つの取引のみです。攻撃者の目的は、自分に利益をもたらす取引のみを検証することで、支払いを無効にすることです(例えば、自分が管理するアドレスに同じ資金を送るなど)。レース攻撃では、受信者は未確認な取引を支払いとして受け入れることが要求されます。
  • フィニー攻撃:攻撃者は、1つの取引をすぐにネットワークにブロードキャストせず、プレマイニングをします。その代わりに、別のトランザクションで同じ通貨を使用し、その後、先にマイニングをしたブロックをブロードキャストするだけで、支払いが無効になる可能性があります。フィニー攻撃は、特定のイベントが発生する必要があり、また、受信者が未確認のトランザクションを受け入れることを条件としています。

このように、ブロック確認を待っている商人は、ダブルスペンドの被害者になるリスクを大幅に減らすことができます。


まとめ

ダブルスペンドとは、電子マネーシステムを利用して金銭的な利益を得るために、同じ資金を複数回利用することです。従来、この問題に対する適切な解決策がないことが、この分野の進歩の妨げになっていました。

しかし、幸いなことにブラインド署名の使用は、中央集権型の金融スキームのための興味深い解決策を提案しました。その後、プルーフ・オブ・ワークのメカニズムとブロックチェーン技術の創造は、分散型マネーの強力な形態としてのビットコインを誕生させ、他の何千もの仮想通貨プロジェクトにインスピレーションを与えました。