【解説】モナコインへの攻撃 Block Withholding Attackって一体何なの?
こんにちは、NABです。
5/15に話題となった、モナコインへの攻撃。その名もBlock Withholding Attack。
モナコインだけでなく、ビットコインを含む他通貨も大きく下げる原因となっていました。
「モナコインにバグ発見」
「モナコインが攻撃を受け、大規模な巻き戻しを実施 」
ってつぶやく声も聞こえてきたので、取引所ハッキング?って思ったのですが、そうではなくブロックチェーン自体に「攻撃」がされた様子。
モナコイン高騰前から推していたホリエモンも、
こりゃ大事件。
— 堀江貴文(Takafumi Horie) (@takapon_jp) May 18, 2018
暗号通貨史上で最も大きいブロックチェーンへの攻撃について。モナコインでの事件の重要性。 (Junya https://t.co/NtBTBrIi3i) - https://t.co/JDA2nygvdA
と言っているし、なんだかとんでもないことが起きたのかもしれない。
不可能とされていた、ブロックチェーンへの「攻撃」ってどういうことだろう?
同じことがビットコインにも起こりうるのか気になるところ。
というわけで調べました。
モナコインへの攻撃について(Block withholding attack) | ビットコイン研究所
暗号通貨史上で最も大きいブロックチェーンへの攻撃について。モナコインでの事件の重要性。 | JunyaHirano.com
モナコインへの攻撃から、ブロックチェーンへの攻撃やマイニングを深掘りする - Gunosy Blockchain Blog
大御所お二人と、最近テクノロジー系の良記事をよく見かける強いグノシー。
これら3つのブログの解説は素晴らしいです。
ただ初心者には難解に感じる部分もあるので、自信の理解を深めるためにもう少し噛み砕いてみました。
通常のRe-Orgをおさらい
Re-Orgって概念は、昨年8月のUASF騒ぎの時に知りました。
当時、ビットコインの信頼性を揺るがす大問題として界隈で話題になっていました。
Re-Orgというのは、もう承認されたから大丈夫、って思ってた取引がごっそりとなくなることでした。
もう自分のものになった、と信じていたコインが突然なくなるかもしれないということです。
初心者向けに解説してみますが、nonceやハッシュ値などの基礎的な内容は省いているので、「マイニングって何?」ってレベルだとわからないかもです。
また、専門知識が薄いので間違えがあるかもです。あればぜひご指摘を。
PoWの場合、マイナーたちマイニング報酬を得るために競って次のブロックの正解を探します。
あるマイナーが最初に次のブロックの正解を見つけたとします。
この段階ではまだマイニング報酬を受け取ることができないので、マイニング成功とは言えません。
そこで最初に正解を見つけたマイナーは、
「正解みっけ!」
とネットワーク全体に宣言します。
これを「ブロードキャスト」と呼びます。
ビットコインの台帳を管理するノードたちは「ブロードキャスト」で伝わってきた新ブロックが本当に正解かどうか検証をします。
ノードたちが検証の結果「正解」を確認することでそのブロックのマイニングが終了。こうなって初めてマイナーはマイニング報酬を受け取ることができます。
このようにして通常、ブロックチェーンは1本の鎖として伸びてゆきます。
しかし、「ブロードキャスト」された新ブロックがネットワーク全体に伝播するまでは数秒かかります。
その間に別のマイナーが別の正解を見つけることもあります。
こちらも正解には違いないので、とりあえずブロックにつなげておきます。
そのため一時的にブロックが二股に分かれます。いわゆる、ソフトフォーク。
それぞれのブロックには、その後もブロックが伸びてゆきます。
ただし、ビットコインには「ブロックが長い方が正しいチェーン」という基本ルールがあります。
したがって短いと判定された時点で、短い方のチェーンは消えます。これがRe-Org(Re-Organization:再編成)です。
つまり、頻繁にチェーンは分岐してますが、多くは1〜2ブロックで消えてしまいます。
消えてしまったブロックに入っていたトランザクションはなかったことになります。
ただし、未承認の段階に戻るだけなので、いずれ新しいブロックに取り込まれて承認されます。
消えてしまったチェーンに入っていた取引は、
おそらくこんな流れになるのだと思います。(推測)
なので1承認されたからといって安心できない。
ビットコインでは「6承認ぐらい」が、いわゆる安全な取引の目安とされるの根拠のようです。。(ビットコインも過去に具体的に6承認程度の取引がRe-Orgにより消えたことがあるようです。)
Block Withholding Attackのカラクリ
悪意のあるマイナーは、十分なハッシュパワーを集めて計画実行をはじめました。
①まず1つのブロックの採掘に成功します。そしてそれをブロードキャストせずに次のブロックの採掘を続けます。
②標的にする取引所へモナコインを送金します。これは隠しているチェーンではない、この後消す予定のチェーンの方に乗せます。
③同じモナコインを自分のウォレットに送信します。こちらは自分が隠しているチェーンの方に乗せます。
④取引所がモナコインを承認完了してくれたらすかさず他のコインにトレードして出金。
⑤出金完了と、自分が隠しているチェーンが、正規のチェーンよりも十分長いことを確認したらブロードキャスト。
⑥するとRe-Orgが起こり取引所が受け取ったはずのモナコインが消えてしまいます。
通常Re-Orgにより消えてしまった取引は0承認に戻り、時間が経つとまた新しいブロックに取り込まれて承認数が増えてゆきます。
しかし今回は後からブロードキャストされたチェーンの方に自分のウォレットに対する送金が記録されています。そのため0承認となった取引所への送金は二重送金(不正送金)と判断されて、こちらの送金の方が取り消されてしまうのです。
これで計画成功となりました。
対策は?
すぐにできる対策は、決済完了と認める承認回数をあげることしかないようです。
今回のBlock Withholding Attackでは20承認を超えるチェーンのRe-Orgが複数回起こっているので、多くの取引所は必要承認回数を大幅に引き上げました。
また今回のBlock Withholding Attackはいわゆる二重支払いを行うことが目的でしたが、Block Withholding Attackにはそういった不正以外にもインセンティブがあるように思えます。それは自分が次のブロックを発見できる十分なハッシュパワーを持っている自信があれば、採掘したブロックをブロードキャストせずに、次のブロックの採掘を開始した方が有利に採掘することができそうだからです。
なぜなら、ブローキャストせずに次の採掘を始めれば、その間他のマイナーたちはすでに答の出ている無駄なブロックの採掘を続けてくれているからです。ブロードキャストせずにせっせと掘り進めてゆけばどんどん差がついてゆく仕組みです。
隠し持っている自分のチェーンが他のチェーンより十分長いこと確認してから一気にブロードキャストすれば、その間のブロックは全て自分のものになります。なんだかオセロゲームの大逆転みたいですよね。
Block Withholding AttackはSelfish Miningとも呼ばれているそうです。
自分が有利にマイニングを成功させるためのズルなので、Selfish Miningという呼び方もとてもしっくりきます。
そんな自分勝手なBlock Withholding Attack。それをできる仕組みを放置しておくなんてネットワーク全体にメリットがあるように思えません。
素人考えでは、採掘したブロックは即ブロードキャストしなければいけない(2個以上まとめてブロードキャストするの禁止)というルールに変更できれば良いと思うのですがどうなのでしょう?
でも簡単にそうできない理由があるのでしょう。
今回はその理由まではわかりませんでしたが、今後わかったら追記しますね。
またご存知の方がいらっしゃれば、教えていただけると嬉しいです。
わかったこと
調べて見てわかったのは、今回のBlock Withholding Attackと言われる手法はブロックチェーン技術全てに対する信頼を揺るがすものではないということ。
攻撃対象となるのは少なくとも、PoWを採用しているコインで、かつ、
- 流動性が比較的高い(簡単に他のコインに交換できなければ成功しないので)
- 攻撃可能な程度に小規模(大きなハッシュパワーを集めなければならないので)
- ブロックタイムが短い(掘りすすめる時間が長いとキツイ)
- 難易度調整の頻度が高い(難易度が低くなった瞬間を見計らってサッと計画実行できる)
- GPU(汎用パソコン)でマイニングするコイン(ASIC(特定通貨のマイニング専用機)でマイニングするコインだと当然高価なASICが大量に必要。高価なASICをたくさん持つということは、そのコインの将来性にBETすることになる。するとBlock Withholding Attackすることでコインの価値を下げるような馬鹿げたことをするインセンティブがなくなる。)
- KYCの低い取引所で取引可能(足がつかないように)
という条件を満たした場合です。
ビットコインもPoWですが、これらを考えると同様の攻撃をビットコインに行うのはほぼ不可能とみました。
結論
当初報じられていたように「ブロックチェーンを揺るがす重大バグ発見」というような深刻なものではないとわかって一安心です。
ビットコインって、なんで承認に10分もかかるのだろう?とか、難易度調整って、ハッシュパワーの変動に合わせてもっと頻繁にあれば良いのに、と疑問に思っていました。でも信頼性の確保のためには大切な設計だったんですね。
今回の件で、ビットコインの初期設定を考えたナカモトサトシの神がかりっぷりを改めて感じました。
いい勉強になったなぁ。
ブロックチェーンはまだ未成熟な技術。こうした問題を経験して、より信頼性の高いものにアップデートされてゆくのでしょう。
ブロックチェーンの未来に期待します。
長くなりましたが、最後まで読んでくださってありがとうございます。