(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【暗号通貨/ハッキング】ブロックチェーンの巻き戻しとは?

スポンサーリンク

はじめに

改竄に対して強いブロックチェーン技術ですが、そうは言ってもBlock withholding attackSelfish Miningと呼ばれるハッキング攻撃が存在します。実際これらの攻撃が成功すると、直近の取引が消失する、いわゆる「巻き戻し(reorg)」と呼ばれる事象が発生します。

本記事では、この現象についてビットコインを例にして簡単に解説します。

前提知識

当たり前ですが誰かに送金をするには過去に誰かから送金されていないといけません。

ブロック群である分散台帳には過去の取引が全て記録されています。つまり、あなたの財布AからXを送付するには過去の取引を見て「ある財布から財布AにXだけ送金されているか」「財布AからXが既に送金されていないか」をチェックします。

このあたりは以下記事で詳細に解説しています。

巻き戻しの戦略と具体例

普通は、ブロックの解を見つけるとその解を発見したことをほかの参加者に通達します。
解が正しければ、ブロックの解を見つけたマイナーはマイニング報酬を受け取り、そのブロックに格納された取引は成約済みとなります。よって参加者は次のブロックの解探しに移ります。

一方、悪意ある集団が、ブロックの解を見つけても公表せずに次の解をまた見つけてどんどんブロックを長くしていくとどうなるでしょうか。なんと、ある取引を無かったことにできます

やり方はこうです。
単純化を行い、参加者を4人とします。(Aさん Bさん Cさん Dさん)

現在、ブロック4は解が発見済みで各自はブロック5の解を探しています。
ブロック5のフェーズにて以下の取引が発生しました。

  • AさんはDさんに100円送金します。
  • BさんはCさんに50円送金します。
  • CさんはDさんに20円送金します。

ここで、Aさんが悪意ある参加者とします。

その場合、Aさんは自分の取引をブロックにとりこみません。Aさん以外は皆、全ての取引をブロックに取り込みます。
f:id:mtiit:20190619212712p:plain
つまり、Aさんのみブロックの中身が戦略的に異なっています。

ここでAさんは解を発見しました。これを通知すると以下の2件のみ成約となり、報酬を受け取れます。

  • BさんはCさんに50円送金します。
  • CさんはDさんに20円送金します。

しかし、Aさんはほかの参加者に解を見つけたことを通知しません。報酬を我慢して、黙って次のブロックを探し始めます。
f:id:mtiit:20190619212927p:plain

そうするとCさんが解を見つけました。一番のりで見つけたと思ったCさんはその事を参加者に通知します。解は確からしいので報酬を受け取り、以下の取引がブロックに書き込まれます。

  • AさんはDさんに100円送金します。
  • BさんはCさんに50円送金します。
  • CさんはDさんに20円送金します。

DさんはAさんからの送金が成約したことを確認し、お礼にリンゴをAさんに渡しました。

そして次のチェーンに移ります。
f:id:mtiit:20190619213329p:plain

さて、ここでまたもやAさんが解を見つけたとします。ここでやっと解を公開します。

解が確からしいので、Aさんの台帳が正しいということになって次のブロックに移ります。

f:id:mtiit:20190619213923p:plain

ポイントは、Aさんは、Cさんが見つけた解であるBlock5を台帳に保持していないので、BさんCさんDさんの台帳がBlock5'に書き換わってしまう点です。

つまり、Dさんが貰った100円を送金しようとしても、どこを探しても

  • AさんはDさんに100円送金します。

という取引が見当たらないため、送金できません。取引が消失したことになります。なのにAさんはリンゴを返しません。

さらにCさんも可哀想で、Block5のマイニング報酬も消失します。過去のブロックを見てもCさんが解を見つけたブロックが登場しないからです。

Block5'がシェアされるイメージはブロックチェーンの仕組みを理解していないとピンとこないと思いますが、以下の記事で別の視点で解説しています。


ちなみに、この作戦はそうそううまくいきません。
参加者が大勢いる場合に、解を他のマイナーより早く連続して見つけることは困難です。
実際、Block5'の解を見つけたところでBlock5を取り入れた大勢のマイナーが先にBlock6を見つけると、Aさんは何も得れません。ただDさんに送金を行い、Block5'のマイニング報酬をもらい逃しただけです。

終わりに

2018年、モナコインのトランザクションが本手法によって消失したことがあります。自身が保有していたモナコインを取引所に送金してからすぐに出金し、その取引を含まないブロックに書き換えることで送金履歴を消失させました

ただしそうはいっても、ほかの参加者を出し抜いてブロックの解を見つけ続けるのはかなり困難で一部の悪意のあるマイナーが別のチェーンを生成させた場合でも、大半のマイナーがメインのチェーンでブロックを生成するため、チェーンの書き換えを防げます。

そういう意味では、本記事のサブタイトルは「ブロックチェーンの書き換えの難しさ」なのかもしれません。

ご参考になれば幸いです。