イチからわかるマイニング事情【第4回】:セルフィッシュマイニング
Crypto Times 編集部
前回の記事では、理論上対立するマイニングプール同士の攻防の末、全体で得られる利得が減少し、マイニングプールの規模縮小が進むというシナリオを解説しました。
前回紹介した論文では、マイニングパワーの増加によってさらなる巨大化が進むという危惧が自警団”攻撃”によってある程度抑えられると説明しましたが、ひとえに”攻撃”(attack)といっても様々な種類があります。
マイニングプールの巨大化を妨げる手段となった「自警団攻撃」に加え、総ハッシュパワーの過半数(51%以上)を握るマイナーあるいはマイニングプールが恣意的にブロックチェーンに攻撃を加える有名な「51%攻撃」があります。
それらに加え、「セルフィッシュマイニング(selfish mining )」、別名「ブロックウィズホールディングアタック( block-withholding attack )/一時的ブロック隠匿攻撃」と言われる攻撃方法があります。
今回はその中で、”Majority is not Enought:Bitcoin Mining is Vulnerable”という論文を元に、セルフィッシュマイニング(selfish mining )とは何かを解説していきます。
目次
Majority is not Enough: Bitcoin Mining is Vulnerable
Majority is not Enought:Bitcoin Mining is Vulnerableの論文では、初期に理想とされていたことに反して、マイニング行為は誘引整合性がない(incentive-compatibleではない)と、研究者は結論付けています。
誘引整合性とは、個々人がインセンティブにしたがって動く時、それが結果的に集合体(社会)にとってもいいということです。
つまり個々人が自分自身の利益を最大化しようとして取った選択と、社会にとっての利益最大化が整合的であることを表しています。
しかし、仮想通貨におけるマイニングは、この誘引整合性を有していない、ということになるのです。マイナー達が自分自身の利益を最大化しようとした結果、社会にとってベストな状況にならないということになってしまいます。
具体的な例を使って誘引整合性がない状況を解説します。
ある学生が時給1000円のアルバイトに申し込みをしたとします。このアルバイトは成果によって報酬が変動することはなく、どのような働き(勤勉であろうと怠惰であろうと)をしても1時間に対して1000円が支給されます。
また彼の働きを監視する管理人もいないものとします。
このときアルバイトをする学生には努力をするインセンティブがなく、1000円の報酬に見合う働きをしないことがあります。
つまり、この学生が自分自身の利益を最大化しようとすれば(最小の努力で1000円を得るようにすれば)、雇い主である企業にとってあまり良い結果に繋がらないのです。
ではなぜマイニングを取り巻く環境は誘引整合性を満たしていないのでしょうか。
その背景にはセルフィッシュマイニング(selfish mining)と言われるブロックチェーンに対する攻撃手法の存在があります。
セルフィッシュマイニング
セルフィッシュマイニングとは、ある時点で悪意を持ったマイニングプールが有効なブロックを発見したにもかかわらず、すぐに公開せずに隠し持ちながら(bitcoinネットワークへブロードキャストせず)、次のブロックを生成しようとする行為です。
イメージを掴んでいただくために以下にセルフィッシュマイニング(selfish mining)のイメージ図をお見せします。
初めに見える2(pool)と書かれているブロックが、悪意のあるマイニングプールが隠し持っているブロックです。
そのブロックは、ブロードキャストされていませんから、他の大勢のマイナーが通常時のようにブロック1から新たなブロックを繋げていくことになります。
それが、2(pub)と書かれているブロックです。
他の正直なマイナーが2(pub)の次に繋がれるブロックを生成する前に、悪意のあるマイナーが次のブロックである3(pool)を生成し、それをブロードキャストします。
そうすることによって、悪意のあるマイニングプールが生成したブロックが最長のブロックになるという攻撃です。
このような攻撃は、他のマイナーのマイニングパワーを無駄にさせることから「セルフィッシュマイニング(selfish mining)」、「利己的なマイニング」と呼ばれています。
また「一時的ブロック隠匿攻撃」と呼ばれることもあるようです。
この攻撃の存在により、正しく生成したブロックを即bitcoinネットワークにブロードキャストするインセンティブが低くなってしまうのです。
なぜならセルフィッシュマイニング(selfish mining)によって正直にブロードキャストする時よりも多くの利益を得られる可能性があるからです。
上記の場合では、2(pool)と3(pool)のブロックを生成したことによりプール側が報酬を得ています。
セルフィッシュマイニング(selfish mining)の理論
セルフィッシュマイニング(selfish mining)の構造、攻撃方法はご理解していただけたかと思います。
次にセルフィッシュマイニング(selfish mining)の理論的枠組みではどのような考えがあるのかということをご説明いたします。
Majority is not Enought:Bitcoin Mining is Vulnerableの論文ではセルフィッシュマイニング(selfish mining)で見られる攻防を様々に場合分けをして分析がされています。
その場合分けの中でも特に重要なものを今回ご紹介したいと思います。
上記で見たように、プール側が2(pool)と3(pool)のブロックを生成することに成功し、他のマイナーが追いつけなくなったような状況で、2(pool)と3(pool)をブロードキャストすればセルフィッシュマイニングが完了します。
これはプール側が持っているマイニングパワーによってセルフィッシュマイニングが成功するか否かがかかっているというわけです。
悪意のあるマイニングプールのマイニングパワーが他を圧倒している場合、簡単にセルフィッシュマイニング(selfish mining)が成功してしまうことになってしまいます。
では以下に示しているように、プール側が3(pool)を見つける前に、他の大勢の正直なマイナーが2(pub)を生成し、3つ目のブロックの生成に取り掛かろうとしている状態を考えてみましょう。
分析で最も肝心なのが、この状況です。
二つ並列されたブロックのうち、どちらに新しいブロックを繋げるのかでセルフィッシュマイニング(selfish mining)が成功するか失敗に終わるかということが決まります。
大半の正直なマイナーが、2(pub)に新たなブロックを繋ぎ合わせるのであれば、セルフィッシュマイニングは失敗に終わりますが、下のイメージのように、他のマイナーが2(pool)、つまり悪意のあるマイニングプールによって生成されたブロックに新たなブロックをつなぎ合わせた場合、結果的にセルフィッシュマイニングは成功してしまうことになります。
よって、ここで非常に重要となる一つの問題は、”分岐している並列された二つのブロックのどちらに多くのマイナーが新規のブロックを繋げるのか”ということです。
生成されたブロックが”悪意”のあるマイナーによって生成されたかどうかはわかりませんので、後にブロックを追加するマイナーがどちらのブロックに追加するかは、バイアスのない問題になり得ます。
上記をまとめると、セルフィッシュマイニング(selfish mining)が成功するかしないかには主に2つの要因が関係していることになります。
1つ目は、悪意のあるマイニングプールのもつマイニングパワーです。
マイニングパワーが大きければ大きいほど、他のマイナーよりも早くブロックを生成することができますから、上で見たように3(pool)のブロックを生成する確率が高くなります。
2つ目は、二つのブロックが並列した場合、他のマイナーが悪意のあるプールによって生成されたブロック2(pool)を選んでしまう確率です。
仮に悪意のあるマイナーのブロックに新規ブロックを繋げるのであればマイニングパワーがそれほど大きくなくてもセルフィッシュマイニングは成功してしまうことになります。
論文では、この2つの変数に対して1000人のマイナーを想定したコンピュータ上のシミュレーションが実行されました。
その結果、selfish miningは51%攻撃と違い、最大で1/3(33.33%)のマイニングパワーを持つプールなら成功してしまうということがわかりました。
仮に、他の大勢の正直なマイナーが、正直なマイナーによって生成されたブロックに新たなブロックをつなぎ合わせていく場合でも、つまり他のマイナー全員が新たなブロックを2(pub)につなぎ合わせていく場合でも、悪意のあるプールが全体の1/3のマイニングパワーを持っている場合、セルフィッシュマイニングが成功する可能性があるのです。
しかし、正直なマイナー全員が偶然にも正直なマイナーによって生成されたブロックに新たなブロックを繋げていくと考えるのは現実的ではありません。
半数のマイナーが悪意のあるプールによって生成されたブロックに、つまり2(pool)につなぎ合わせることを考えると、悪意のあるプールが1/3どころか、1/4(25%)のマイニングパワーを握っていれば成功する可能性があることがわかったのです。
よってselfish miningを防止するには最大規模のマイニングプールでも1/4以下の規模を保っていなければいけないという結論になりました。
最低でも総マイニングパワーの2/3以上が、正直なマイナーで占められていなければ、理論上いつでもセルフィッシュマイニングが起こりうるということになります。
またセルフィッシュマイニングの戦略を取るマイニングプールは、規模に比例して成功確率も上がり、よって利得も規模によって増加していきます。
そして、合理的なマイナー達にとって、このようなセルフィッシュマイニングを行うマイニングプールに参加しないことが損になり、マイニングプールへの参加のインセンティブが増していくのです。
これが先に説明した誘因整合性がないということです。
各マイナーが賢い選択をするのであれば、つまり個々人が個々人の利得を最大化するように選択していくならば、それは全体にとってよくない方向へと進むということです。
モナコインが受けたセルフィッシュマイニング攻撃
去年2018年5月13日から15日にかけてモナコインがセルフィッシュマイニング攻撃を受けました。
モナコインプロジェクトはTwitterでこのようにセルフィッシュマイニング被害について語っています。
セルフィッシュマイニングは、仕事量に応じて取引の承認権を与えるProof of Workならではといえます。ですから、セルフィッシュマイニング被害を受けてシステムの変更・修正を考慮に入れるということです。
現状ではサービス提供側で入金の承認数を上げる以外に有効な手段はありません。
PoWコインである以上は避けられない問題でもあるので、PoS等への移行も視野に入れていく必要があると考えています。— monacoinproject (@tcejorpniocanom) May 17, 2018
理論の枠組みだけではなく、現実の世界にも現に起きているということが重要であり、注目するべき点でしょう。
まとめ
以上に見てきたように、”攻撃”と言っても様々なものがあります。
過半数のハッシュパワーを用いて行われるブロックチェーンに対する攻撃、他のプールへ仕掛けるなりすまし行為である「自警団攻撃」、他のマイナーのマイニングパワーを無駄にさせ、ブロックに書き込まれている取引内容を改ざんするselfish mining(セルフィッシュ・マイニング)/block-withholding attack(ウィズホールディング・アタック)などがあり、目的や難易度も様々であることがお分りいただけたと思います。
これらの知識を元にして、セルフィッシュマイニングに関する報道やブロックチェーンへの攻撃に関する報道に注意すればより興味が湧いてくるのではないかと思います。