モナコイン関連サービス紹介
モナコイン史
Monacoin Core(0.16.2)の解説とBlock Withholding Attackとは
画像はモナコインとは全く関係がない男性です。
面倒臭がらずにアップデートをしましょう。Monacoin 0.16.2をリリースしました。攻撃によるreorg対策を行っているので更新を強く推奨します。— monacoinproject (@tcejorpniocanom) 2018年9月12日
Monacoin Core v0.16.2 released! All users are strongly advised to upgrade.
ダウンロードはこちらから。
では、稚拙ながら、以下に解説をします。
アップデートの経緯
主なアップデートの内容は、モナコインのブロックチェーンへのアタック対策です。ブロックチェーンは、全体として見ると、取引が格納されたブロックを数珠つなぎに一本に繋がっていく様子から、「ブロックチェーン」とその名前がつけられたものと思いますが、個々のブロックを繋ぐ段階では、マイニングは競争であるため、ほぼ同時にブロックを見つけた場合などには、頻繁にブロックチェーンに枝分かれが発生し、どちらの枝が正規のもの(正しいブロックチェーン)であるかを判断するルールが必要です。
その際に、最長のブロックチェーンを「正しいブロックチェーン」として扱うことになっており、無視されるブロック達を「オーファン(orphan)ブロック」と呼びます。
オーファンブロック側の視点では、ブロックチェーンは再構成(Reorganization、いわゆる「reorg」とか「巻き戻し」)され、以後そのブロックは無視されます。
ちなみに、自分の取引が含まれるブロックにreorgが発生し、オーファンブロックになってしまったとしても、改めて正しいブロックチェーンにその取引は取り込まれるので安心です。
しかし、先日、とある海外の取引所が上記のルールを利用され、モナコインを盗まれました。
方法としては、その取引所が、自身へモナコインの入金があったことを承認(正当なブロックチェーンと認識)した後に、悪意ある者が故意に隠していた、より長いブロックチェーンを公開することで、意図的にreorgを起こすことで実行されました。
取引所のデータベースは、ブロックチェーンとは独立しているので、reorgの結果、取引所にモナコインが存在していないのに、その取引所はモナコインが入金されたものとして認識しているために、その取引所で売買ができてしまったのです。
いわゆる、モナコインに対するSelfish Mining(またはBlock Withholding Attack)事件です。
ブロックチェーンとしては正常な挙動であり、この事件が起こるまで、「なぜ、ビットコイン の6認証(60分程)と同様に、モナコインも6認証(9分程)で正当なブロックチェーンであると確定していいのか」ということが、あまり検討さされなかったので、仕方がないのですが、酷な言い方ですが、取引所が正しいブロックチェーンの確定(ファイナリティ)を見誤ったとも言えます。
この事件を受けて、Bitbankは認証回数を100認証(150分程)や、tipmonaは30認証(45分程)へ変更しています。
bitFlyerの加納裕三社長はTwitterで、この事件に関しブロックチェーンが改竄されたと報道を受け、この事件はファイナリティの問題だと強調しています。
モナコインの件に関して、改ざん不可能性(immutability)とファイナリティを勘違いしています。今回の件は想定されており、特に大きなニュースになる事案でもありません。— 加納裕三 (Yuzo Kano) (@YuzoKano) 2018年5月20日
ブロックチェーンが改ざん不可能であることは間違いありません。
アップデートの内容
今後は、このジャッジノードへブロックの発見報告が先に届いた方が「正当なブロックチェーン」としてみなされるということだと思います。
ジャッジノードが悪意のある者に攻撃されるリスクや、狂って暴走する可能性もあります。
したがって、手放しで喜ぶかは考え方次第です。
monacoin 0.16.2はreorgに関する判定が実質中央集権的?になりますので、人によって感じ方が分かれる絶妙な更新内容になっていると思います。— なちゃっと (@nachat_dayo) 2018年9月12日
個人的には、認証数が少ない場合に攻撃が比較的しやすい現状はすでにmonacoinの価値が毀損された状態になっていると考えているため...->
ん~— なちゃっと (@nachat_dayo) 2018年9月12日
にてしても長期的に考えるとやはり微妙な気がする...
あくまで中期的な処置になるといいなと思うなあ
モナコインの開発者(通称、わたなべ氏)も下記のように述べるのはそのためでしょう。
物議を醸しそうな手法は避けるべきなのは重々承知で、まずはチェーンの安定と導入・廃止のしやすさを取った。
ハイブリッド案も検討したが採算度外視なら攻撃可能で、規模の小さいコインでの採用は危険と判断。
他のチェーンに依存する提案も来たが、それはあまり好ましくないかなと保留。
引用元
ハイブリッド案も検討したが採算度外視なら攻撃可能で、規模の小さいコインでの採用は危険と判断。
他のチェーンに依存する提案も来たが、それはあまり好ましくないかなと保留。
引用元
中央集権化、つまり、ブロックチェーンの分散台帳の意義がなくなるのではないかという意見に対しては、わたなべ氏は、次のようにコメントをしています。
わたなべ氏のモナコインに対する開発方針として透けて見えるのは、モナコインは新たな技術を開拓していくのではなく、既存の実践的な技術を取り込み、実際の問題の解決策として導入していく点にあると思われます。所謂マスターノードに移行したら戻れなくなる点と、Bitcoinの仕様から大きく逸脱することで関連技術の流用が難しくなる。— monacoinproject (@tcejorpniocanom) 2018年9月14日
対してジャッジノード案は所詮一時的な対策であり、現仕様のまま導入・廃止がいつでも可能。
今のMonacoinはCoreだけで成り立ってるわけではないので。 https://t.co/0qvHubYUPO
この点については、いつか記事に書いてみたいと思います。
Monacoin Coreについて、もっと知りたい方はこちら。
とりあえず、古参が使っているMonacoin Core(フルノード)
アップデートの内容はこちらです。
51%攻撃などの大規模reorgを狙った攻撃を無効化するため、0.16.2がある程度浸透したところでチェックポイントの配信が行われます(*)。
ジャッジノードと呼ばれる特別なノードがネットワーク上に複数設置され、予め定められたルールに基づいてチェーンを確定させます。採掘から数ブロックの経過をモニタし、確定したブロックをチェックポイントとして配信します。
判定には個々のトランザクションの内容は参照されず、Monacoinprojectが取引に介入するようなことはありません。ただしMonacoinのチェーンを乱すSelfish Mining等の手法に対しては今後対策を行う可能性はあります。ジャッジノードの仕様についてはセキュリティの点から非公開とします。
最後に受信したチェックポイントはdumpvolatilecheckpointコマンドで参照できるので、このコマンドで返るHeightの値より低ければ入金は確定したとして良いと思います。ただしメンテナンス等によりチェックポイントの配信が停止する場合も考えられるので、200ブロック以上経過など、大きめのブロック数経過による判定も併用してください。
また、このチェックポイントの受信は強制ではなく、monacoin.conf(cmdcheckpoint=false)又は実行時に引数(-cmdcheckpoint=false)を指定することで拒否できます。チェックポイント関連RPCを用いて誰でも同様の機能を作成可能なので、より良い提案があればそちらを使用されると良いかと思います。
* 0.16.2の浸透前でもテストのため配信する場合があります。 一度配信されるとネットワーク上に残り続けるので、本配信開始前に古いブロックのチェックポイントを受け取ることがありますが正しい動作です。
引用元
ジャッジノードと呼ばれる特別なノードがネットワーク上に複数設置され、予め定められたルールに基づいてチェーンを確定させます。採掘から数ブロックの経過をモニタし、確定したブロックをチェックポイントとして配信します。
判定には個々のトランザクションの内容は参照されず、Monacoinprojectが取引に介入するようなことはありません。ただしMonacoinのチェーンを乱すSelfish Mining等の手法に対しては今後対策を行う可能性はあります。ジャッジノードの仕様についてはセキュリティの点から非公開とします。
最後に受信したチェックポイントはdumpvolatilecheckpointコマンドで参照できるので、このコマンドで返るHeightの値より低ければ入金は確定したとして良いと思います。ただしメンテナンス等によりチェックポイントの配信が停止する場合も考えられるので、200ブロック以上経過など、大きめのブロック数経過による判定も併用してください。
また、このチェックポイントの受信は強制ではなく、monacoin.conf(cmdcheckpoint=false)又は実行時に引数(-cmdcheckpoint=false)を指定することで拒否できます。チェックポイント関連RPCを用いて誰でも同様の機能を作成可能なので、より良い提案があればそちらを使用されると良いかと思います。
* 0.16.2の浸透前でもテストのため配信する場合があります。 一度配信されるとネットワーク上に残り続けるので、本配信開始前に古いブロックのチェックポイントを受け取ることがありますが正しい動作です。
引用元
今回のアップデートは、中央集権化という批判もあり得るところですが、以下の記事に書いたような、全体へ影響を与えるゲームルールの整備と、個々の環境への介入を区別して議論するのも面白いかもしれません。
詳しくはこちら。
POWは平等か?平等ってなんだろう
2019年2月現在では、モナコインのアルゴリズムに対応したASICが登場し、ネットハッシュレートがNicehashで購入できるハッシュレートと比較して大きくなっています。
その結果、同様の攻撃の成功するためのコストはさらに大きくなっています。
ASICについてはこちら。
LYRA2REV2対応のASIC MINERとモナコインの今後