2018年5月13日から15日にかけて日本発の仮想通貨モナコインに対する攻撃がありました。攻撃によってブロックチェーンが上書きされ、被害にあう取引所が出ましたが、明るみになった問題について未だ明確な解決策はみつかっていません。本記事ではモナコインの概要、攻撃の経緯、攻撃のキーワード「セルフィッシュマイニング」と「確率的ファイナリティー」、今後の影響の順に説明します。
モナコインとは
モナコインは2014年1月から発行されている日本初で日本発の仮想通貨です。名前の由来にもなった、匿名掲示板2ちゃんねるのアスキーアート「モナー」をモチーフにしたコインのイメージに見覚えがあるという人も少なくないでしょう。
画像: モナコイン(Wikipedia より)
モナコインはBitcoinから派生したLitecoinをもとに作られ、合意形成アルゴリズムはPoW(Proof of Work、プルーフ・オブ・ワーク)のLyra2REv2と呼ばれるアルゴリズムが採用されています。
※ PoWについて詳しくは本ブログの分散ネットワークでの合意を可能にしたコンセンサスアルゴリズム「プルーフ・オブ・ワーク」を参考にしてください。
通貨単位はMONA、ブロックタイムは約90秒で、マイニングの報酬としてMONAは新規発行され、2018年5月現在のマイニングの報酬は25MONAです。ブロックタイムはベースになったLitecoinの2.5分、Litecoinの派生元のBitcoinの10分よりも短く、ブロックタイムを調整するためのマイニングのパズルの難易度調整が1ブロック毎に行われるのも特徴的です。
MONAの価格は長らく低迷してきましたが、2017年秋に取引所bitFlyerでの取り扱いをきっかけに高騰し、2017年末の仮想通貨バブルでは1MONAが20ドルにせまり、対ビットコインでも最高値を記録しました。2018年5月末現在1MONAは3.3ドルほどに落ち着いています。
画像: モナコインのチャート(CoinMarketCapより)
モナコインの取引量は2017年の価格高騰と前後して増加し、日本国内の取引所に加え、海外の取引所でも取り扱われています。
画像: モナコインを扱う取引所(CoinMarketCapより)
今回の攻撃では上のリストにもあるLivecoinという取引所が利用され被害が出ました。Livecoinは2015年にサービスを開始し、数百もの仮想通貨に加え法定通貨のドル、ユーロ、ロシアルーブルを扱っています。
モナコインに対する攻撃の経緯
モナコインへの攻撃は2018年5月13日から15日にかけて行われ、攻撃によってブロックチェーンが複数回分岐しました。攻撃手法に関わるキーワード「セルフィッシュマイニング」「確率的ファイナリティー」については後述しますが、犯人はLivecoinでモナコインを他の通貨にかえ、セルフィッシュマイニングと呼ばれる手法でブロックチェーン上の取引を衝突させ、すでにブロックチェーンで上ではモナコインの取引をなかったことにしつつ、ブロックチェーンの外では他の通貨へ換金 し、お金を手に入れることに成功したと言われています。今回のブロックチェーンの上書きはブロックチェーンの過去への巻き戻し、再編成とみることができ、リオルグ(reorg、reorganizationの略)とも呼ばれます。
5月18日にモナコイン プロジェクトのTwitterアカウントで攻撃を把握したと発表があり、これと前後して国内の取引所が対応を発表しました。
2018年5月末現在、犯人は不明のままで、問題の全面解決にいたっていません。今回の攻撃はモナコインそのものの問題ではなく、PoWがもともとかかえる問題によるもので、合意形成がPoWで行われる仮想通貨では避けられない問題だからです。モナコイン プロジェクトはTwitterで次のように説明しています。
現状ではサービス提供側で入金の承認数を上げる以外に有効な手段はありません。
PoWコインである以上は避けられない問題でもあるので、PoS等への移行も視野に入れていく必要があると考えています。— monacoinproject (@tcejorpniocanom) May 17, 2018
今回の攻撃の肝はセルフィッシュマイニングによるブロックチェーンの書き換えに加え、取引所の確率的ファイナリティーの虚をついたところにあります。続いて今回の攻撃のキーワード「セルフィッシュマイニング」と 「確率的ファイナリティー」について詳しく見てみましょう。
攻撃のキーワード1: セルフィッシュマイニング
犯人はセルフィッシュマイニング(selfish mining、直訳すると「利己的なマイニング」で、マイナーの都合でブロックをブロードキャストしたりしなかったりすることによるネーミングと考えられます)と呼ばれる手法でモナコインのブロックチェーンを攻撃しました。
マイニングに成功した犯人はブロックをネットワークに伝播せず隠しておきます。他のマイナーたちが公開されている古いブランチのマイニングをしている間に、犯人は隠しているチェーンの採掘を進めます。しかし、簡単にブロックを生成することができないように、採掘難易度(Difficulty)が常に調整されています。モナコインの場合はブロック生成時間が90秒になるように、1ブロックごとにDifficultyが調整されています。言い換えると、全世界のモナコインのマイニングに参加しているノードが90秒に1度だけ正解できるように難易度が調整されています。よって、犯人は大きなコンピューターパワーを事前に用意して今回の犯行にあたったと考えられます。さらに、持っているコンピューターパワーを最大限活用できるよう、Difficultyが下がったところが狙われたと考えられています。
犯人はこのコンピューターパワーを持って、次々とブロックを生成し、隠し持っているチェーンを伸ばしていきます。そして、現在パブリックになっているチェーンより長いチェーンを用意します。この長いチェーンをネットワークのノードにブロードキャストすると、ブロックチェーンが分岐が発生ます。分岐が起こった際は、ブロックに取り込まれた取引が全て問題の無いものであれば、長い方のチェーンが正しい取引として採用されます。そこで、犯人が隠し持っていた長い方のチェーンが採用されます。こうして犯人は自分が隠し持っていたチェーンへの書き換えに成功します。
画像:セルフィッシュマイニングの概要
セルフィッシュマイニングはすでに知られていた手法で、2013年にアメリカのコーネル大学のEyal氏とSirer氏によって指摘され、2015年にイスラエルのヘブライ大学のSapirshtein氏らにより最適化されたセルフィッシュマイニングの戦略が示されました。Sapirshtein氏らの論文によるとハッシュレートが25%以下でもセルフィッシュマイニングでそれ以上の収益をあげられるといいます。
- Majority is not Enough: Bitcoin Mining is Vulnerable (2013年のEyal氏とSirer氏の論文)
- Optimal Selfish Mining Strategies in Bitcoin (2015年のSapirshtein氏らの論文)
セルフィッシュマイニングについて記述を探してみると、上記Eyal氏らの論文をもとに解説した2016年の日本語の記事がありました。
ビットコインは本当に安全なのか、理論研究が示す意外な落とし穴 | 日経 xTECH(クロステック)
このようにセルフィッシュマイニングは以前から知られていて、かつ多くの仮想通貨でPoWが合意形成アルゴリズムとして採用されているにもかかわらず、なぜこれまでセルフィッシュマイニングによる攻撃が起こらなかったのでしょうか。ブロックチェーンの書き換えはできても、攻撃によりブロックチェーンが不安定になり、仮想通貨の価格下落を招いてしまっては攻撃をするメリットがなく、攻撃できるほどのハッシュレートがあれば正直にマイニングに励んでいた方がよいというビットコインをはじめとする仮想通貨ならではの経済原理が働いていたと考えられます。
攻撃のキーワード2: 確率的ファイナリティー
今回の犯行の巧妙なところは、セルフィッシュマイニングと合わせて取引所を巻き込んで収益をあげたところにあります。
ウォレットや取引所は通常取引を確定するまでに「N段階の承認を受ける必要がある」という承認数を定めています。ビットコインなどの仮想通貨を送金した直後にトランザクションが「未承認」という状態になっているのを見たことのある人も少なくないでしょう。承認数分のブロックがネットワークで処理されると当該トランザクションは「承認済」となり、送金の場合は着金が確定します。ただし、トランザクションが確定したといってもPoWの仕組みから100%承認が確定したわけではなく、正確には「とても高い確率で確定したとみなせる状態」で、「確率的ファイナリティー」と呼ばれています。
※ 確率的ファイナリティーについて詳しくは本ブログのブロックチェーンのおいて確定を意味する言葉「ファイナリティー」を参考にしてください。
実際今回の攻撃で犯人はここをうまく活用しました。犯人はパブリックなチェーンの上で取引所で、あらかじめ持っていたモナコイン換金し、承認数分のブロックが処理されて決済を確定します。次に隠していたチェーンを流すことでそちらの取引が正となり、取引所で使用したモナコインを使用しなかったことにしてしまいました。このように承認数分のブロックが処理されていてもトランザクションは100%確定しておらず、とても小さな確率ではありますがトランザクションがくつがえる可能性が残るのです。
犯人が伸ばしたチェーンは最長で24ブロックといわれています。仮に承認数を25ブロックに引き上げたとして、モナコインの場合ブロックタイムが90秒で、オンチェーンではトランザクションの確定までに37.5分かかることになり、サービスの利便性にもかかわります。ブロックタイムとセキュリティーはトレードオフの関係にあり、ブロックタイムが長いことは必ずしも悪いことではないのですが、よりブロックタイムの長い仮想通貨の場合、このような対応は難しくなるでしょう。
今後の影響
今回の攻撃では、難易度調整が1ブロックごとに行われるモナコインが都合のよい仮想通貨としてターゲットとなりました。ハッシュレートを上げるのが難しい規模の大きな仮想通貨は別としても、PoWを合意形成アルゴリズムとして採用している仮想通貨では同様の攻撃が行われる可能性が指摘されており、それが実際に行われてしましました。
また、独自のパブリックチェーンを利用した仮想通貨は常にこの問題と、51%攻撃の危険性にさらされます。特にハッシュパワーの小さいうちは、時価総額とアタックにに必要な投資のバランス次第でその危険性も高くなります。こういったことも気にしながらブロックチェーンやサービスの構築をしなくてはならいないことは以前から指摘されておりましたが、ここへ来て課題が浮き彫りになりました。
今回の攻撃は合意形成の方法、ブロックチェーンの異常の早期発見など、仮想通貨やそれを支えるブロックチェーンについて重要な議論のきっかけになりえます。この問題の根幹となる「確定となるファイナリティーが無い」という問題を解決した、確定となるファイナリティーがあるブロックチェーンの提案が以前からいくつもされています。事件後、今回の攻撃がどのように受け止められ、今後どのような変化がもたらすか注目しておきたいところです。