こんにちは。ブロックチェーンやマイニングについて研究している榎本 (@mosa_siru)です。
2018年5月15日に、Monacoinのチェーンが攻撃されたようです。 今回は、事件そのものというより、それを通じてPoWやその攻撃手法、マイニングについて改めて深堀りしようかと思います。
- ブロックの承認数
- 確率的finalityとトレードオフ
- Block withholding attack
- Selfish miningの研究について
- マイニングの中央性とハッシュアルゴリズム
- 対策
- 終わりに
- 宣伝
手前味噌ですが、マイニングについての基本的な理解はこちらを御覧ください。
ブロックの承認数
まずご理解いただきたいのは、今回は最長チェーンが変わっただけで、「バグを突かれた」「ブロックチェーンのデータが改竄された」という話はありません。また、「6ブロック承認で送金が確定するのでは?」などもよくある誤謬です。bitcoinをはじめとする一般的なPoW パブリックチェーンの場合、送金が“完全に“確定すること(finallity)はありません。
n=6 を入金確認の閾値として実装しているウォレット等があるというだけの話で、実際、コインによっては2承認で入金される取引所もあります。あくまで確率的に、「さすがにここまで積み上がったブロック数より長いチェーンが出てくることは、大規模な計算量を持つ攻撃者がいない限りありえないだろう」と言えるブロック数を、各々が閾値として採用しているにすぎません。
確率的finalityとトレードオフ
逆に言うと、そういったマイナーがいなくても、積み上がった6ブロック分のチェーンがひっくり返される(それより長いチェーンが公開される)ことは、たとえ天文学的確率でも無いとは言い切れません。実際1ブロック程度なら、コインによっては良く起きます。つまり、信頼性と送金の速さはトレードオフ です。もしあなたが超高額のbitcoinを受け取る場合、万一(万どころじゃないですが)に備えて1000ブロック以上の承認を待つのが賢い態度かもしれませんし、売店で飲料代を受け取るような小額決済なら、1ブロック程度でOKとしてしまうのもありでしょう。また、異なるブロックチェーンではブロック生成間隔や難易度調整も異なるため、コインによって「6承認」の持つ信頼性は全く変わってきます。仮にbitcoinが10分ではなく1分のブロック間隔になったとしたら、同じ承認回数では現在の信頼性は担保できないでしょう。
「送金や入金にfinalityは無く、確率的」というところに不安を覚える方はいるかもしれませんが、そもそもあなたの秘密鍵を復号してコインを盗むことも天文学的確率では可能ですし、さらにいえばGmailや銀行口座へのログインや二段階認証の突破に当てずっぽうで成功することも確率的には可能なのです。「確率的」それ単体で否定するのは早計かもしれません。
Block withholding attack
さて今回モナコインでは、非常に多くの計算量のシェアを占めるマイナーが現れたことによって、それぞれのソフトウェアが採用していた必要承認数によっては天文学的ともいえない話になってしまいました。悪意のあるマイナーが、秘密裏なブロックの生成(適切なnonceを見つけてブロックを作成しても、P2Pネットワークかプール管理者に配信しないこと)をし続け、ある時まるっと最長チェーンを配信することで、既存のチェーンを無効にしてしまいました。
必要なハッシュパワーの全体における割合は高いですが、これを「Block withholding attack」と呼び、各種攻撃に利用されます。意図的に他のマイナーを妨害し、収益性を高められる「Selfish mining」等にも用いられます。詳細はblockchain.tokyo #5で発表した、拙作のスライドをご覧ください。
www.slideshare.net
また、旧チェーンとは異なるトランザクションをブロックに入れる/外すことによって、「今までの最長チェーンでは10 confirmされていたトランザクションが、いきなり0 confirmになってしまった」などが起きます。
AさんがBさんの商品を買い、送金していたとして、Bさんが「10 confirmされてて安心」と思って商品を渡したとします。新たな最長チェーンでは、A => A への(無意味な)トランザクションが先に取り込まれており、信じていたA => Bのトランザクションは不正なものとみなされることもあります(二重送金)。
さらに派生して、そのお金をB => Cに渡すトランザクションを旧チェーンで作っていたとしたら、被害はCさんにまで拡大していくでしょう。
これが個人間ならまだしも、取引所に対する入金や出金まで絡むものなら、取引所のデータと実際のブロックチェーン上の値に齟齬が出てくるでしょう。攻撃者は、実際は旧チェーンでしか送金していないのに、取引所のなかで資産を得ることができます。今回の事件はこの収益を狙ったものだと考えられています。
※よくある誤解なのですが、基本的に取引所は各個人の資産量をブロックチェーンではなく、単なるリレーショナルデータベース等で独自に管理しています。ユーザーの資産は、個人ごとのウォレットではなく、取引所のホットウォレットやコールドウォレットでまとめて保有されています。
これはselfish miningにかぎらず、ソフトフォーク時にも起きうる、大規模な最長チェーンの入れ替え(reorg)による混乱です。
Selfish miningの研究について
Selfish miningは当初からフォーラムで議論されており、2013年には論文も出ています。( Majority is not Enough: Bitcoin Mining is Vulnerable )
研究では、最高でも33%のハッシュレートのシェアを持てば、Selfish miningをすることで他マイナーよりも収益性を高められることがわかっています。さらに、Sybil attack等と組み合わせれば、必要なシェアは0%に近づいていきます。
理論的には新しい話ではなく、むしろ現実的でないとの批判もありました。 ( On Subversive Miner Strategies and Block Withholding Attack in Bitcoin Digital Currency )
論文での33%以下の閾値は、あくまでマイニング収益単体の話です。今回面白いのは、攻撃者にはおそらく33%近くのシェアはなく、あくまでブロックチェーン内の世界では攻撃インセンティブがなかったはずが、取引所(ブロックチェーン外)への攻撃を合わせることで攻撃インセンティブができてしまったという点です。
マイニングの中央性とハッシュアルゴリズム
決してこれはmonacoinだけの話でもないし、ましてバグでもなく、どのコインでもハッシュパワーが集中化することで起きうる事態となります。現在bitcoin等において、ハッシュパワーが地理的に偏っている危険性があらためて示された といえるでしょう。
MonacoinではLyra2REv2というハッシュアルゴリズムが使われています。Lyra2REv2を採用しているコインを他にもありますし、アルゴリズムのASIC耐性によりGPUで採掘するのが一般的です。もしかしたら他のコインを採掘していたGPUマイナーのハッシュパワーが一時的に集まったのかもしれません。現在Ethereum等を掘っているGPUマイナーたちが流れたら、容易に実現できるでしょう。
価格下落やハッシュレートの上昇で、昨今のマイニングの収益性は一時期に比べ低下しており、GPUマイナーが一稼ぎするために仕掛けた可能性もあります。
他のコインと同じハッシュアルゴリズム(またはハードウェア)で掘れる二番手以降のコインは、常にそういった危機にさらされます。例えばSHA256を採用したオルトコインは全て、いつでもbitcoinの大規模ASICマイナー達が移動することで51%攻撃を受ける可能性があります。これは対象がbitcoin cashであろうと可能です。
既存のアルゴリズムを使う新コインは、マイニングソフトウェア側の対応が簡単でマイナーが集まりやすいメリットがあります。nicehash等のSSP的なソフトウェアが対応すれば、一気にハッシュパワーが得られるでしょう。一方で、一番手コインのマイナーからの攻撃を受ける可能性に晒されるのです。
ただし、そういった攻撃をして収益を得ても、攻撃発覚時点でそのコインの価格が下がったり、二番手以降のコインは流動性がそもそも低いのですので、売りさばくにせよ空売りするにせよ大きな利益を上げるのは難しいかもしれません。さらに暗号通貨全体の信頼を落としますので、そこまでのハッシュパワーを集めたファーム資産を短期売上に当てるのは賢い行動とはいえないかもしれません。そういった市場原理からか、今までオルトコインへの露骨な攻撃は(知る限り)起きていませんでした。そのため、今回のケースは極めて珍しいといえるでしょう。
あるいは、実はLyra2REv2のASICが秘密裏に開発されており、攻撃に用いられた可能性もあるでしょう。ASIC開発においては、まず製作元がリスクヘッジや利確のために、一定期間秘密裏に採掘してからマシンを発売するパターンが多いと聞きます。アルゴリズムにもよりますが、ASICとGPUの計算能力の差は段違いです。ASIC耐性があるとされ、GPUマイニングが基本だった数々のハッシュアルゴリズムに対し、2018年にASICマシンが次々と発表・発売されています。Lyra2REv2がその範疇なのも想像に難くないでしょう。
図:これまでNvidiaのGPUで掘ることが主流だったZcashも、Antminer Z9(EquihashのASIC)などの登場により、ASICで掘る時代になっています。
対策
monacoinにおける現時点での対策としては、必要な承認数を上げるしかないと思います。実際そういったオプションがあるようです。取引所は、monacoinだけでなく各コインの必要承認数を1つ1つ点検することが肝要です。入金金額に応じて承認数を上げても良いでしょう。利用者としても、高額の場合は十分承認されてから取引完了とみなすのが良いでしょう。
また、二番手以降のコインが攻撃対象となるとしたら、これから開発されるコインが対策するにはどうしたらいいのでしょうか?
- コンセンサスアルゴリズムの変更
- PoW以外を採用する方法です。しかしながらパブリックチェーンにおいては、PoSをはじめ他のアルゴリズムもまだまだ論点や検証の余地があり、そう簡単な話でもないでしょう。
- サイドチェーンとして開発し、メインチェーンの信頼性に乗っかる
- 例えばPlasmaでは最悪サイドチェーンが攻撃されてもrollback可能で、Ethereumの信頼性に乗っかることができます。
- 異なるハッシュアルゴリズムを採用し、ASICチップを自分で製造し、広く販売する
- GPUマイナーの流入を防ぐために、ASICをあえて自分で作ってしまう手法です。思いつきです。
- 自分への中央性が高まってしまうので、チップの設計図等を公開してしまうのも面白いかも。
- 実際に、Bytomのメインチェーン公開と同時にbitmainからASIC(Antminer B3)が発売されました。ハッシュパワーの分散化を意識した訳では無いでしょうが、かなり珍しい例かと思います。
- GPUマイナーの流入を防ぐために、ASICをあえて自分で作ってしまう手法です。思いつきです。
終わりに
長くなりましたが、以上が今回の攻撃に対する所感です。繰り返しますが、これはmonacoinの問題ではなく、PoWを採用しているコイン全てに言える話です。そして「だからPoWはダメだ!」という話でもありません。(不謹慎かもしれませんが)こういった事件を通して、利用者側は必要以上に慌てず、ブロックチェーンのプロトコルやセキュリティへの正しい理解をするのが重要かと思います。
(筆者: @mosa_siru)
宣伝
Gunosyではブロックチェーンを始めとしてスマートスピーカー、VR/ARと言った新規領域での研究・開発を進めており、メンバーを募集しています。
少し話を聞いてみたい!という方も歓迎していますので、下記のリンクからの応募お待ちしております。
また弊社Gunosyでは、blockchain.tokyo を主催するなど、ブロックチェーンや仮想通貨に関する研究開発を進めています。
次回は2018/5/24にて開催する予定です。イベントグループへメンバー登録をしていただくとイベント参加者募集の通知が来るので、こちらもぜひ登録してみてください。