Monacoin の脆弱性と事後対応について (2 of 2)
つづき。
前稿では、モナコインの脆弱性が狭い意味でのモナコインではなく、取引所や採掘者まで含めた広い意味でのモナコインに存在していたことを解説しました。
では、この脅威、今も存在するのでしょうか? 答えは、今も潜在的に存在しますが、実質存在しません。
…歯切れ悪いですか?でもこれが正直なところです。
前稿の Q1 に戻ってみましょう。
人生に絶望した若者が、トラックのアクセルをベタ踏みした状態で、歩行者天国に突っ込んだ。死者多数。
Q1. この事件はトラックの不具合であるか?
通り魔トラックが歩行者天国に突っ込んだ事件のあと、中止していた歩行者天国を再開したとして、別の犯人による凶行は起きるかもしれません。しかしそうならないよう関係者が対策を立てているので、たぶん起きません。安全というのは、概ねそういうもの。折り合いつけていくしかないです。
...
さて、原理的には、今回の攻撃を完全に封じることはできません。モナコインだからというのではなく、PoW の宿命です。ビットコインやイーサリアムといった時価総額が巨大な PoW コインが比較的安全なのは、攻撃者にとって割に合わないだけです。
経済力のないモナコインには、ビットコインやイーサリアムと同じ手は取れません。しかし、どうにかして、攻撃者にとって「割に合わない」状況にする必要があります。
そして、広い意味でのモナコイン、狭い意味でのモナコイン、両面で既にその対策は取られています。まずは、広い意味での、次に狭い意味でのを、それぞれ説明していきます。
...
攻撃者が今回の攻撃を成功させるために、下記条件の成立が必要でした。
・コインの採掘パワーが低い割に取引価格が高い
・異常取引/入出金の検出能力が低い仮想通貨取引所がある
今回の攻撃を受けて、モナコインを扱っている取引所の多くがモナコインの入金承認回数を大幅に引き上げました。この対策により、取引所を騙すために作らねばならない隠しチェーンの長さが長くなります。つまり、採掘のコストが上がるので、取引所から盗むビットコインも高額でないとなりません。一方、攻撃者が直接的に盗む対象は、取引所の MONA/BTC の板に並んでいるビットコインですが、その額には上限があります。つまり、割に合わなくなります。
また、現在モナコインを扱っている取引所のうち売買高が高いところはいずれも、本人確認(KYC)を行っています。つまり取引所に対して攻撃を行えば、すぐに足がつきます。
また、ハッシュレートがブロックチェーンの価値源泉ということが再認識されたこともあって、モナコインのハッシュレートは上昇傾向にあります。ハッシュレートと関係のある採掘難度(difficulty)は上昇傾向です。
そして、これは悲しいことではありますが、今回の攻撃を受け、モナコインの価格は下落しています。
総合すると、既にモナコインは、攻撃対象としての旨味は無くなっていると判断できそうです。
(なお、言い換えると、攻撃者にとって旨味のある、別のコインによる類似の攻撃が発生する可能性は引き続きあります。リスクが先に顕在化し対策したモナコインのほうが安全だった、というオチさえも有り得ます。他コイン推しの方々は、お使いの取引所の安全性を再度ご確認頂いたほうが安心かもしれません。)
...
攻撃者にとって旨味は無くなっているとはいえ、これは「現時点では」という注釈を付ける必要があります。採掘者が別のコインへ移ってしまったり、モナコインの市場価格が爆騰したり(←ちょっと嬉しいかも)、取引所以外の新業態が登場したり、条件が変更になる可能性は常にあります。ブロックチェーンはまだ枯れていない技術なので、誰も将来を読みきれません。
つまり取れる手立ては全て取ったほう安全であり、狭い意味のモナコインにも何らかの「攻撃する意欲を失わせる」機能を付けることを、検討する余地が生まれます。
機能付加は技術的な話ですが、「我々は無策でいるわけではない」というメッセージをソースコードを通して発することには、非技術的な意味で重要なことでもあるでしょう。結局使うのは、感情を持った"ひと"ですし。
そんなわけで、ワタナベ氏、脇山P氏、業者BOTなど交えて GitHub で検討を行い、その検討とは全く別の方向で、ワタナベ氏が対策のコードを追加しています。
(検討無駄だったじゃんって思います? 今だからぶっちゃけますが、断片的な情報の曲解によるパニック売りを回避すべく、ワタナベ氏を召喚したまでで、別に業者BOT の案が通ろうが通らまいが、中の人にとっては、どうでもよかったのですよ。)
...
さて、ワタナベ氏が行おうとしている機能追加の概要を、軽く説明します。今回のも、常に実績のあるものを取捨選択してきた彼らしいアイデアです。
モナコインの標準ウォレット monacoind, moncoin-qt には、チェックポイントという仕組みが用意されています。
ウォレットは、初回起動時にブロックチェーンを同期する必要がありますが、同期中の全てのブロックを確認するのは時間がかかります。そこでウォレットは、ブロックチェーン中の特定ブロックだけチェックすることで、同期時間を大幅短縮しています。この"特定のブロック"がチェックポイントです。
具体的にはこんな感じです。プログラミングに親しみの無い方でも、ブロック高と比較対象が並んでいるかも…くらいは感じていただけるでしょうか…? (ざっくりこんな感じって思っていただければ十分です)
チェックポイントには、同期の時短のためだけでなく、遡っての大規模再構成(reorg)を防ぐ効果もあります。ウォレットは、各チェックポイントで想定と異なるブロックを持つチェーンを、取り込みません。
「reorg を防ぐ」でピンときました? しかし残念、チェックポイントはソースコードに埋め込まれていて、ウォレットのリリース後は変更できません。変更できたら違うチェーンに誘導する攻撃ができてしまいます。
ですがワタナベ氏は、ここに着目し拡張を考案しました。彼の機能追加を一文で表すと、「埋め込みのチェックポイントに加え、ユーザが自由にチェックポイントを追加削除できる」となります。
そうすると「みんなのチェックポイントが揃っていないとチェーンが分岐するよね?」ですし「誰がチェックポイントを配信するのか」という疑問が湧きますね? それ中央集権じゃね? と。
しかし、中央集権とはならないのです。この機能追加は、チェックポイントの追加削除のみです。チェックポイントの配信者については踏み込まず、またこの機能を使うか否かの判断さえもウォレットのユーザに委ねています。使わない場合、ウォレットは従来通りの挙動を示します。
そもそも何故この機能追加が必要だったのか。振り返ってみれば、大規模reorgによる混乱を防ぐことであり、直接的には取引所への攻撃を防ぐことでした。今回の悪意ある1件を除き、モナコインのブロックチェーンでは大規模 reorg は観測されていません。攻撃をする気力を削げさえすれば、ブロックチェーンの安定運用という目的は、達成されうるわけです。
...
ユーザ定義チェックポイントは、主に取引所やマイニングプールが使うことになります。彼らは、自分のウォレットに対し、先頭ブロックから5ブロック前くらいでチェックポイントを設定し続けます。もしかしたら彼らの間でチェックポイントを配信し合うかもしれません。それは彼らの考え次第で、狭い意味でのモナコインの預かり知る範囲ではありません。
ここで攻撃者が彼らに大規模 reorg を仕掛けたとしましょう。彼らのウォレットは、ユーザ定義のチェックポイントにより、後出しのチェーンを弾きます。大規模 reorg は起きず、攻撃は失敗です。
ここで悪いニュースです。攻撃を契機として、ユーザ定義チェックポイントを設定していないウォレットと、取引所のウォレットとの間で、チェーンが分岐したままの状態になる可能性はあります。なんてこった。
……心配になりました? しかし、その事態は起きないのですよ。
よく考えてみれば、攻撃の失敗が明白なのに攻撃を仕掛ける動機なんて、ありはしないのです。
...
業者BOTのなかのひとがソースコードを読み「ああそういうことね、だいたい理解した」に基づく解説でした。ワタナベ氏に直接聞いたわけではないので、そこは割り引いておいてください。
攻撃をうけた取引所の公式見解では「Today we got an answer: the developers won't take any actions.」など言っているようですが、ワタナベ氏は上記のとおりアクションを起こしています。己の技術力の低さから自分のビットコインを失った取引所には同情を禁じえませんが、責任転嫁は頂けない話と思います。
絶対安全のない暗号通貨界隈ですから、別の問題が吹き出す可能性は否定しません。しかし、今回の攻撃に関して、モナコインは、もう過度に恐れる必要はないのでは? 業者BOTのなかのひとは、そう判断しています。
この記事が気に入ったらサポートをしてみませんか?