思考は現実化する

自分の潜在意識を書き換えるために、自分が学んだ事を整理しまとめています。

【図解】ブロックチェーンはどのように改ざんされたのか【仮想通貨モナコイン消失】

f:id:b204638:20180524194247j:plain

 

こんにちは。

 

2018年5月15日に国産の仮想通貨「モナコイン」がハッキングにあったのをご存知でしょうか?

 

「また仮想通貨が流出したの?今度はどこの取引所?いったいいくら流出したの?」そんなふうに思われる方もしれません。それくらい大きな被害を出している印象のある仮想通貨のハッキング事件ですが、今回の被害金額はおよそ1,000万円といわれています。

 

え?たったの1,000万円?

 

いえ、そりゃ1,000万円でも大金ですよ。それでもコインチェックのNEM流出のときの約580億円のインパクトに比べたらたいした金額ではないような気がしてしまいます。しかし、今回のハッキングはこれまでとは異なる大きな問題が取りざたされているのです。なんと、仮想通貨の根幹技術である「ブロックチェーン(分散型台帳)」が改ざんされてしまったのです。

 

今回は、モナコインのブロックチェーンがどのように改ざんされたのか、ブロックチェーンの仕組みを図を織り交ぜておさらいしながら考えてみます。

 

ブロックチェーンの仕組み

まずはブロックチェーンの仕組みについておさらいしてみます。

ブロックチェーンとはインターネットを通じてつながった複数のコンピュータ(ノード)が同じデータを共有し、一定量の取引データを「ブロック」として数珠つなぎに追記していく仕組みのことです。

 

ブロックチェーンは多くのノードがお互いのデータが正しいものかを常に監視し合う仕組みで管理し、情報を追記していく仕組みのため、悪意のあるユーザーがデータを改ざんしようとしても、他の多くのデータと整合性がとれないため、これまでハッキングは理論上ほぼ不可能とされていました。

 

ブロックチェーンは次のような仕組みでデータの信頼性を担保しています。

ブロックチェーンがデータの信頼性を担保する仕組み

  • 「ブロック」に含まれた取引のみを「正しい取引」と認める
  • ネットワーク全体で唯一の「ブロックチェーン」を共有するする
  • 分岐した際は一番長い「ブロックチェーン」を正しいものとする

これを実現するブロックチェーンの技術を1つずつ確認してみましょう。

 

ブロックチェーンのデータ構造とブロックの生成方法

ブロックチェーンのデータ構造は、データの格納された「ブロック」が時系列に連なって追記されていく仕組みとなっています。

この「ブロック」には多数のトランザクション(取引の情報)と直前のブロックのハッシュ、そして 「ナンス(Nonce)」と呼ばれる特別な値が格納されています。

f:id:b204638:20180524203454p:plain

 

 

ハッシュとは1つ前のブロックのデータを要約した短いデータのことです。もし前のブロックのデータが1ビットでも改ざんされてしまうと、そのデータのハッシュ値が異なってしまい、チェーンをつなぐことができなくなってしまいます。

f:id:b204638:20180524203742p:plain

 

 

ブロックチェーンでは取引の検証作業を行なった人が新しい「ブロック」を生成します。この検証作業はナンス(Nonce)という値を計算し見つけ出すことで行います。

f:id:b204638:20180524204211p:plain

 

ナンスとは、ブロックのデータをハッシュ関数に通したときに先頭に0がたくさん並ぶような非常に小さいハッシュ値が生成されるように調整するための値のことです。

この値がターゲット値以下になるようにナンスを計算することができると新しいブロックが生成されます。(このナンスを計算する作業がマイニングです。)

ナンスを見つけ出すには大量の計算資源(膨大なCPUリソースと多くの電力)が必要になります。

 

ナンスを見つけ出した人は「ブロッチェーン」に新しい「ブロック」を生成します。この際、仮想通貨であれば、一定額の定められたコインをマイニング報酬としてもらうことができるのです。

 

ブロックチェーンのデータの管理方法

ブロックチェーンのデータは、インターネットを通じてつながった複数の参加者のコンピュータ(ノード)が管理します。

f:id:b204638:20180524210410j:plain

 

 

データの格納された「ブロック」は検証作業を行ったノードが生成し追加していきます。

f:id:b204638:20180524213326p:plain

 

この際、複数の人が「ブロック」を追加すると「ブロックチェーン」が分岐してしまうことがあります。

f:id:b204638:20180524213420p:plain

 

その場合は分岐点から先が一番長い「ブロックチェーン」が正しい「ブロックチェーン」として認められ、他の分岐したチェーンは廃棄されます。

f:id:b204638:20180524213515p:plain

 

仮想通貨のマイニング報酬は正しい「ブロックチェーン」の生成でしか付与されないためマイナーは短いチェーンを伸ばそうとはしません。

マイナー

ブロックチェーンの維持管理作業への参加者。採掘(マイニング)を行う人のこと。

 

もし、攻撃者が改ざんしたデータを含む「ブロックチェーン」を作ろうとした場合、他の大勢のノードを上回る速度で不正なブロックチェーンを伸ばし続ける必要があります。

攻撃者とブロックチェーンの伸ばし合い競争をした場合、善意のノードの持つ計算資源が、攻撃者のそれより少しでも多いかぎり、攻撃者がブロックチェーンを乗っ取れる可能性はきわめて低いとされています。

 

もう一度、ブロックチェーンがデータの信頼性を担保する仕組みをおさらいしてみます。

ブロックチェーンが取引の信頼性を担保する仕組み

  • 「ブロック」に含まれた取引のみを「正しい取引」と認める
  • ネットワーク全体で唯一の「ブロックチェーン」を共有するする
  • 分岐した際は一番長い「ブロックチェーン」を正しいものとする

 

今回のハッキングは、この中の「分岐した際は一番長い「ブロックチェーン」を正しいものとする」という仕様のスキをついたものでした。

 

 

ブロックチェーンを改ざんする「Block withholding attack」

「Block withholding attack」とは「ブロックチェーンが分岐した際にチェーンが長い方を正しいものとする」という仕様をついた攻撃手法のことです。

通常、マイナーは生成した「ブロック」をすぐにネットワークにブロードキャスト(データ送信)します。

 

ところが今回、犯人が用いた「Block withholding attack」という攻撃では、攻撃者は強力なマシンを用いて生成した「ブロック」すぐにネットワークにブロードキャストせずに、ローカルに未公開のまま長いブロックチェーンとして貯めこみます。

f:id:b204638:20180524220225p:plain

 

そして、正しいブロックチェーンより長いブロックチェーンを貯め込んだ状態で、今回、攻撃者は取引所でモナコインの換金を行います。

f:id:b204638:20180524220730p:plain

 

そして、その後タイミングを図って貯め込んだブロックチェーンを公開することで、それまで正しいとされていたブロックチェーンを無効化してしまったのです。

f:id:b204638:20180524221109p:plain

 

これにより、取引所で換金がおこなわれたという正しい取引記録の格納された「ブロック」が無効化されてしまい、取引所からは受け取ったはずのコインが消えてしまいます。

これは、犯人が貯め込んでいたブロックチェーンでは、取引所で換金したはずのコインが別のアドレスに送ったという情報に書き換えられていたため、正しいチェーンが無効化され入れ替わった瞬間に、コインを取引所に送ったという事実がなかったことにされてしまったためです。

いわゆる二重支払いが発生してしまったことで、犯人はコインを失うことなくお金をだまし取ることに成功したのです。

二重支払い (Double Spend/ダブルスペンド)

すでに使用したコインを再び使用すること。

 

しかし、このようにブロックチェーンを改ざんし、仮想通貨取引で二重支払いを行うためには、採掘速度の51%を支配する必要があります。ですが、それはブロックチェーンを管理するネットワーク上のノードの過半数を超える膨大な計算パワーが必要ということでもあります。

そういう意味では、参加するマイナーの少ない小規模通貨のほうが、よりハッキングのリスクが高いといえます。

ところが、実はブロックチェーンには、計算パワーが50%より少なくても、一部の悪意あるノードがブロックチェーンの生成をコントロールできる方法があるのです。

 

 

少ない計算パワーでブロックチェーンを支配する「Selfish mining」

ブロックチェーンでは、マイニングノードがブロックを生成する確率は、そのノードが持つ計算パワーに比例するとされていました。

計算パワーが大きなノードほど、他のノードに比べより早くナンスを見つけられる可能性が高く、先にブロックを生成できる確率が高くなる、というのは当然のような気がします。

 

ところが「Selfish mining」という方法を行うと、ノードが持つ計算パワーより大きな確率で「ブロック」の生成に成功することができてしまうことがわかってきました。

 

「Selfish mining」では、攻撃者は強力なマシンを用いて生成した「ブロック」すぐにネットワークにブロードキャストせずに隠し持ちます。そして、他のマイニングノードが古いブロックをマイニングする間に、自分は隠し持ったブロックを次のブロックのマイニングを行います。

f:id:b204638:20180524232540p:plain

 

そして、隠し持ったブロックの1つ先のブロックを生成できた段階で隠し持っていたブロックを1つ公開します。

f:id:b204638:20180524232942p:plain

 

すると他のマイニングノードは、攻撃者が公開したブロックの次のブロックをマイニングしようとします。しかし、この時点で攻撃者はさらに1つ先のブロックのマイニングをはじめているのです。

f:id:b204638:20180524233407p:plain

 

このように「Selfish mining」を続けることで、攻撃者は自分の持つブロックチェーンを長くし続けることができるのです。

 

そして「Selfish mining」を行うと、マイニングノードの計算パワーが41%あれば50%以上の確率でブロックを生成できる=ブロックチェーンを支配することができてしまうのです。

 

 

まとめ

これまでもいく度か世間を騒がせてきた仮想通貨のハッキング。今までの攻撃は取引所のスキをついた手口ばかりでしたが、今回は仮想通貨の根幹技術である「ブロックチェーン」の仕様のスキをついた攻撃でした。

そういう意味では被害金額こそ少ないですが、金額以上に大きなインパクトのある事件だったといえます。とくに、モナコインと同じような仕組みで、かつ、参加するマイナーの数が少ない小規模通貨は同じように狙われてしまう可能性があるかもしれません。

 

今回の事件が、仮想通貨の、ひいてはブロックチェーンの信頼を揺るがすような事態に発展しないことを祈るばかりです。

ブロックチェーンがどのように改ざんされたのかについての考察は以上です。