2013年から暗号通貨について活動している、とあるモナコイナーのブログである。

2018年9月12日水曜日

Monacoin Core(0.16.2)の解説とBlock Withholding Attackとは


Monacoin Coreが0.16.2にアップデートされました。
面倒臭がらずにアップデートをしましょう。
ダウンロードはこちらから。

では、稚拙ながら、以下に解説をします。


アップデートの経緯


主なアップデートの内容は、モナコインのブロックチェーンへのアタック対策です。

ブロックチェーンは、全体として見ると、取引が格納されたブロックを数珠つなぎに一本に繋がっていく様子から、「ブロックチェーン」とその名前がつけられたものと思いますが、個々のブロックを繋ぐ段階では、マイニングは競争であるため、ほぼ同時にブロックを見つけた場合などには、頻繁にブロックチェーンに枝分かれが発生し、どちらの枝が正規のもの(正しいブロックチェーン)であるかを判断するルールが必要です。

その際に、最長のブロックチェーンを「正しいブロックチェーン」として扱うことになっており、無視されるブロック達を「オーファン(orphan)ブロック」と呼びます。
オーファンブロック側の視点では、ブロックチェーンは再構成(Reorganization、いわゆる「reorg」とか「巻き戻し」)され、以後そのブロックは無視されます。

ちなみに、自分の取引が含まれるブロックにreorgが発生し、オーファンブロックになってしまったとしても、改めて正しいブロックチェーンにその取引は取り込まれるので安心です。

しかし、先日、とある海外の取引所が上記のルールを利用され、モナコインを盗まれました。
方法としては、その取引所が、自身へモナコインの入金があったことを承認(正当なブロックチェーンと認識)した後に、悪意ある者が故意に隠していた、より長いブロックチェーンを公開することで、意図的にreorgを起こすことで実行されました。

取引所のデータベースは、ブロックチェーンとは独立しているので、reorgの結果、取引所にモナコインが存在していないのに、その取引所はモナコインが入金されたものとして認識しているために、その取引所で売買ができてしまったのです。

いわゆる、モナコインに対するSelfish Mining(またはBlock Withholding Attack)事件です。

ブロックチェーンとしては正常な挙動であり、この事件が起こるまで、「なぜ、ビットコイン の6認証(60分程)と同様に、モナコインも6認証(9分程)で正当なブロックチェーンであると確定していいのか」ということが、あまり検討さされなかったので、仕方がないのですが、酷な言い方ですが、取引所が正しいブロックチェーンの確定(ファイナリティ)を見誤ったとも言えます。

この事件を受けて、Bitbankは認証回数を100認証(150分程)や、tipmonaは30認証(45分程)へ変更しています。

bitFlyerの加納裕三社長はTwitterで、この事件に関しブロックチェーンが改竄されたと報道を受け、この事件はファイナリティの問題だと強調しています。

アップデートの内容


さて、今回のアップデートにより、ジャッジノードと呼ばれる特別なノードがネットワーク上に複数設置され、予め定められたルールに基づいて、モナコインのブロックチェーンを確定させるようになります。

今後は、このジャッジノードへブロックの発見報告が先に届いた方が「正当なブロックチェーン」としてみなされるということだと思います。
ジャッジノードが悪意のある者に攻撃されるリスクや、狂って暴走する可能性もあります。
したがって、手放しで喜ぶかは考え方次第です。


モナコインの開発者(通称、わたなべ氏)も下記のように述べるのはそのためでしょう。
物議を醸しそうな手法は避けるべきなのは重々承知で、まずはチェーンの安定と導入・廃止のしやすさを取った。
ハイブリッド案も検討したが採算度外視なら攻撃可能で、規模の小さいコインでの採用は危険と判断。
他のチェーンに依存する提案も来たが、それはあまり好ましくないかなと保留。

引用元

中央集権化、つまり、ブロックチェーンの分散台帳の意義がなくなるのではないかという意見に対しては、わたなべ氏は、次のようにコメントをしています。
わたなべ氏のモナコインに対する開発方針として透けて見えるのは、モナコインは新たな技術を開拓していくのではなく、既存の実践的な技術を取り込み、実際の問題の解決策として導入していく点にあると思われます。
この点については、いつか記事に書いてみたいと思います。
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の浸透前でもテストのため配信する場合があります。 一度配信されるとネットワーク上に残り続けるので、本配信開始前に古いブロックのチェックポイントを受け取ることがありますが正しい動作です。

引用元

画像はモナコインとは全く関係がない男性です。

今回のアップデートは、中央集権化という批判もあり得るところですが、以下の記事に書いたような、全体へ影響を与えるゲームルールの整備と、個々の環境への介入を区別して議論するのも面白いかもしれません。
平等ってなんだろう ★不平等な通貨とは? #暗号通貨界隈のキーワードを考える