3分でわかるビットコインの二重支払
先週、ビットコインの2重支払いがあったという騒ぎで価格が急落しました。もちろんこれはFUDで、二重支払いはなかったのですが、多くの人が信じてしまいました。つまり、ほとんどの人はビットコインの動作原理について理解していないということなのです。そこで、もう一度、基本から、二重支払いの問題について解説します。
二重支払いの基礎知識
まず、二重支払いを防ぐ一番簡単な方法をがあります。それはすべて中央の権限者の元でトランザクションがチェックされて、不正を弾くというものです。つまりこれは銀行システムです。銀行のデータベースに不整合がおきないように銀行がチェックします。しかし、分散型のシステムではこのような権限者を儲けてしまったら分散ではありません。たまに、中央のチェックシステムがあるXXXのほうが2重支払いがなく優れているというような論をみますが、それはまったくわかったない証拠です。たとえば、リップルのシステムは、リップル社のノードがすべてのチェックをしているため、早くて、ファイナイティもすぐに得られます。
ビットコインの二重支払い解決法
次に、ビットコインのシステムを見てみましょう。簡単にいうと、「2重払いがおきることを前提として、ただし、事後にそれを無効にすることで、解決するシステム」といえます。つまり、2重払い自体は防げない。不正なトランザクションを発行することは防げないが、それを事後に無効にして整合性をとるということです。その、整合性をとるという作業が、つまりマイニングになります。1承認がつくということは1ブロック分の検証作業が行われたことになります。さて、ここからはビットコインのややこしいところです。ビットコインでは、ほぼ同時にマイナーが別々のブロックを見つけることがあります。そうすると、一時的にブロックチェーンが分岐することがあります。こうした一時的な分岐は日常的におきており、一日に1回レベルでおきています。さて、チェーンが分岐してしまうと、どちらのチェーンの内容を正当とすべきかがわからなくなります。有るユーザーにとっては、チェーンAが正当な世界で、有るユーザーチェーンBが正当な世界に見えます。つまり、おかしなことになってしまっているのです。この場合は、ユーザーは、もう1ブロック採掘されるのを待つことになります。マイナーは、分岐したチェーンのどちらかをランダムに選んで、そのあとにブロックを続けようと採掘をがんばります。どちらかのチェーンの続きが採掘された時点で、そちらのチェーンのほうが長くなりますので、そちらが正当なチェーンになり、他方は捨てられます。これが、ビットコインの動きです。次に、2重支払いが何処に含まれるかということですが、ポイントは、一時的にブロックチェーンが分岐した時点にあります。このとき、それぞれのブロックに、矛盾した2つのトランザクションが同時に取り込まれている状態が発生します。これが2重支払いです。ブロックA(チェーンA)には、たとえばアドレスYへの支払いが含まれていますが、ブロックB(チェーンB)には、おなじコインをアドレスZへ送ったものが含まれている。こういう状態が二重支払いになります。
2重支払いを作るのは実に難しい
ただし、この状態を意図的につくるのは難しいです。なぜなら、トランザクションをネットワークに流した時点で、基本的にはあっというまにすべてのノードに到着するからです。同じコインを別の宛先に送るという2つの矛盾したトランザクションを同時にながしたとすると、それでも、到着が僅かにはやいほうがリレーされて、後から到着したほうは其の時点で却下されてしまいます。2重支払い状態をつくるには、ネットワークの遅延や分断が起きてないといけません。たとえば、中国と、その他の世界で、インターネットのデータをおくるときに、間で1秒の遅延がおきるとします。こういう場合は、二重支払いを作りやすいです。同じコインを、YとZという別々の宛先に送るトランザクションを作成し、ひとつは中国内、もうひとつはその他の世界だけに送信します。すると、中国内のノードは宛先Yのトランザクションを認識し、その他の世界は宛先Zのトランザクションを認識するというわけです。この状態のまま、最初に述べたように、偶然に中国とその他の世界で、偶然にもほぼ同じ時刻にブロックが採掘された場合、矛盾する2つのトランザクションがそれぞれにとりこまれた状態がブロックチェーンが一時的に分岐します。これが2重支払いになります。つまり、二重支払いを意図的につくるということは、かなり難しいのです。しかも、先程もいったように、これは永続せずに、その次のブロックが採掘された時点で解決してしまいます。ということで、実際には二重支払いが起きてもなんら問題がないということになります。
取引所から二重支払いでコインを搾取する
しかしながら、この2重支払いによって被害を被る対象がひとつあります。取引所です。取引所が1承認で入金をOKとしている場合はどうでしょうか。さきほどの例で言うと宛先Yが取引所のアドレス、宛先Zを自分宛の自己送金に設定しておき、2重支払い状態をつくります。取引所のノードがYのほうのブロックを正当なものとして取り扱い、1承認で入金をOKとしてしまったらどうなるでしょうか?その瞬間に、悪意有るひとは、取引所で別のコインに変換して、引き出しをしてしまいます。そして、次のブロックでZのほうが正当なものになれば、送ったはずのコインが自分にもどってきます。これで、取引所からコインを搾取することができます。これが現状2重支払が問題になる唯一のケースです。これを防ぐには、取引所は1承認ではなく、入金に2承認待てばよいことになります。また多くの取引所ではそれより多くの3承認や6承認としています。1承認にすれば取引所としてはリスクがありますが、ユーザーにとっては利便性があがります。6承認にすれば取引所のリスクはさがりますが、ユーザーの利便性は悪いです。どうするのか、それは経営判断です。ビットコインの問題ではなく、経営判断ということになります。ここが重要なのです。何承認まつかというのは、ビットコインの内部の問題ではなく、使う側の外部の判断だということなのです。100ビットコインの取引であれば6承認まったほうがいいでしょうし、5ドルの取引であれば仮にだまされたとしても仕方ないとしても問題ないでしょう。そういう外部の問題なのです。
マイナーによる二重支払い工作
さてここまで読んで、実際に二重支払いをおこすのはなかなか難しい(ネットワーク遅延など)ということがわかったとおもいます。つまり1ユーザーが意図的に二重支払いをコントロールして取引所から搾取するのは、とてもむずかしいのです。しかし、世の中には、こうした状況をコントロール出来る立場にあるひとがいます。そうです、マイナー自身です。マイナー自身が不正をして、2重支払いが再現できるようにブロックを掘り進めるということができます。実際にETCやMONAでは、マイナーのアタックによる二重支払い攻撃がなされて、取引所から多額のお金が盗まれた事件が起こりました。ETCに至っては、100ブロックを超える巻き戻しを発生させ、約5.9億円を取引所から搾取することに成功しました。なぜ、こういうことができてしまうのかというと、単純にアルトコインのハッシュレートが低く、一人でブロックチェーンをコントロールできるだけの計算力を手にすることができてしまうからです。ETCの場合は、ナイスハッシュというハッシュレートと一時的に借りてこれる市場でハッシュレートを調達したことがわかっています。つまり、ハッシュレートが低いチェーンであればあるほど危険だということは、そういうことです。ビットコインでこれができるかというと、無理です。あまりにコストがかかります。ですから、ハッシュレートが最も高いビットコインが信頼されるというのはそういう点であるわけです。(大石)
次の記事
読者になる
一緒に新しい世界を探求していきましょう。
ディスカッション