二重支払い

ビットコインの二重支払いとは?発生原因と防止方法について

ビットコインなどの暗号資産(仮想通貨)における二重支払いとは?

ビットコインを初めとする暗号資産(仮想通貨)の二重支払いとは、同じ暗号資産(仮想通貨)を二重に送金(支払い)してしまうことを指しています。

たとえば、AさんからBさんに1BTC(ビットコインの単位)を支払うという取引データがあったとします。二重支払いが発生すると、AさんからBさんに2回以上1BTCを支払う結果になってしまいます。あるいは、Bさんだけでなく別のCさんにも1BTCを支払ってしまうこともあります。暗号資産(仮想通貨)の信用に関わるため、二重支払いはとても深刻な問題です。

二重支払いの問題は、ビットコインを初めとした暗号資産(仮想通貨)に限らず、現金や電子マネーなどでも常に問題となります。二重支払いが当たり前になってしまうと、その通貨に対する信用を失墜させてしまいます。そのため、さまざまな手段で二重支払いを防ぐ試みが行われてきました。

電子マネーの場合は、中央にあるサーバーが取引履歴を管理することで二重支払いを防ぎます。クレジットカードである商品を購入した場合、お金を支払ったというデータはサーバーに送られ、サーバーからお店にそのデータを送ります。サーバーが乗っ取られない限り、そのデータが複数の相手に送られる事態は起きにくいと考えられます。

ビットコインは電子マネーと異なり、中央に発行者・監視者やサーバーが存在しないため、二重支払いを防ぐ技術が非常に重要です。データの複製は容易にできてしまいますし、データの送受信を厳格に管理することも難しいです。そのため、ビットコインでは技術によって二重支払いを防止しています。

二重支払い防止方法について

世界で初めて誕生した暗号資産(仮想通貨)であるビットコインを例に、二重支払いを防止する仕組みについてご説明します。ビットコインでは、2つの技術を実装することで二重支払いを防止しています。

まず、ブロックチェーン(block chain)と呼ばれるデータベース技術です。一般的なデータベースと同じように、ビットコインの取引データが発生すると、ブロックチェーンに格納されます。一般的なデータベースと異なるのは、取引データやビットコインの所有者の情報が、ビットコインを利用するすべての利用者に共有されているということです。仮に二重支払いが発生しても、全員が監視しているわけですからすぐに発覚し、無効データとして破棄されます。

もう一つの技術が、プルーフ・オブ・ワーク(Proof of Work)と呼ばれる取引承認システムです。ビットコインの取引データをブロックチェーンに格納するためには、それに適したパラメータの値を計算する必要があります。いち早くその値を計算し、他の人から正しいと認められた人が取引データをブロックチェーンにつなぎこみ、その報酬として新たなビットコインを手にできます。つまり、計算という仕事(=ワーク)によってデータの正しさを証明すること(=プルーフ)が、ビットコインにおいて二重支払いを防ぐ鍵になります。この仕事はマイニング(mining)と呼ばれています。

いくつかの取引データからなるブロックは、チェーンのようにつながれています。個々のブロック内のパラメータは、前にあるブロックのパラメータに影響を受けています。そのため、あるデータの改ざんを行いたければ、そのデータだけではなく過去のブロックまですべて改ざんしなければなりません。他の利用者が監視を行う中で、短時間で全データを改ざんすることはきわめて困難とされています。

このように、中央部分に発行者・監視者やサーバーが存在しない代わりに、ビットコインの取引システムにおいては、利用者がともにデータを監視できるデータベースであるブロックチェーンや、マイニングによってデータを承認する仕組みであるプルーフ・オブ・ワークという技術を用いることで、二重支払いを防いでいます。

もしも二重支払いが起きてしまったら

ブロックチェーンやプルーフ・オブ・ワークといった仕組みが導入されている暗号資産(仮想通貨)でも、悪意を持ったハッカーによって、二重支払いを意図した攻撃が仕掛けられる可能性があるとも言われています。

まず、「トランザクション展性(transaction malleability)」と呼ばれる脆弱性を突いた攻撃です。各取引データには、データを一意に識別するためのトランザクションIDが存在します。このトランザクションIDを変更することで、同じ取引データを複数作成することが理論的には可能となります。

ただし、トランザクション展性の問題については、2017年8月に実装されたSegwit(セグウィット)と呼ばれる新技術によって解決が期待されています。Segwitとは、トランザクションIDを算出するためのパラメータを取引データから切り離し、別の領域へ移動させる試みです。これによって、トランザクションIDの書き換えが起こらなくなるとされています。世界中でSegwitが普及していけば、トランザクション展性の危険性も下がることが考えられます。

もう一つの攻撃方法は、「51%攻撃」と呼ばれるものです。二重支払いがあっても、通常は他の利用者から「不正データである」と認識され無効化されます。しかし、利用者のコンピューターが持つ計算能力の合計値のうち、過半数を悪意のある利用者が占めることで、不正データをブロックチェーンに強引につなぎこみ、過去データも改ざんし、あたかも正常データであるかのようにブロックを伸ばし続けられるとされています。

しかし、そもそも過半数もの計算能力を手に入れること自体が、あまり現実的とは言えません。また、仮に世界中の企業が結託してそれほどの計算能力を手に入れたとしても、二重支払いの発生によって暗号資産(仮想通貨)の価値が暴落してしまうので、不正にビットコインなどの暗号資産(仮想通貨)を手に入れたところで、得られる利益より費やすコストの方がはるかに高いでしょう。そのため、当面は51%攻撃が発生するリスクはほとんどないと考えられます。

今、暗号資産(仮想通貨)を始めるなら
DMMビットコイン