メモログ

Vergeの攻撃が51%攻撃ではない話

タグ: Verge 51%攻撃 

前半は説明だから長い。
ぱっと見で分かりやすい説明が欲しい人は、
画像が出てくるところまで飛ばしてください。
 


よくある間違いとして、
Vergeは51%攻撃を受けたという話がある。


まず、51%攻撃とは、本来、攻撃者のハッシュレートがその他の"善意の"ハッシュレートを上回ることによって、二重支払いをしたり、もしくは他のマイナーに報酬を出さないようにできるものである。(常に自分によって生成されたブロックを伸ばし続けることでこれは実行できる)

しかし、Vergeにおいては51%攻撃が起きたのではない。
難易度調整アルゴリズムのバグを突いて
ほんの少しのハッシュレートで不正に大量のブロックを生成し、
攻撃者はブロック報酬を手元に収めるという攻撃であった。
取引所への二重支払いが発生したかは定かではないが、
少なくとも自分の調べた限りでは「二重支払いを併用して攻撃した」という
取引所による声明等は一切見ていない。

さて、ではどのように攻撃したのか?


一度目の攻撃は単純に同じアルゴリズムでブロックを掘り続けたのだが、以下のような手法を用いた。
「正しいタイムスタンプのブロック→異常なタイムスタンプのブロック→
正しいタイムスタンプのブロック→異常なタイムスタンプのブロック→・・・」
これを繰り替えすことによって採掘難易度を一気に落とし、不正にコインを採掘したのである。
またこの時、攻撃者は自分のチェーンのみを伸ばし、他のチェーンをことごとくOrphanにしていった
そのため、他の採掘者が正しいタイムスタンプを付けたブロックを生成しようと全てOrphanになるので何の意味もなかったのである。

この脆弱性はTime-warp exploit等と呼ばれるもので、
昔Monacoinが難易度調整アルゴリズムをKGWからDigishieldにしたのもおそらくこれ対策であろう。

尚、Vergeの難易度調整アルゴリズムはDGWv3であるが、
DGWv3は本来このTime-warp exploitを対処している難易度調整アルゴリズムであった。
しかし、なぜ攻撃が成功したのか?
Vergeはマルチアルゴリズム故にこの攻撃が成功してしまったのではないかと言われている。

この攻撃は、Bitcointalkでも話題になった。スレッドを立てたのはocminer氏であるが、
この人、オルトコインのプール運営で非常に有名なSuprnovaの管理人である。
https://bitcointalk.org/index.php?topic=3256693.0

また、攻撃時のブロックエクスプローラーのスクリーンショットがある。
これを見れば簡単にわかる。

また攻撃中のブロック難易度は異常に低いものであった。





この攻撃を受け、Verge開発者は以下のような対策を行なった。


1. 遡れる時間を制限
2. 同じアルゴリズムで6連続以上ブロックを掘れないようにする

しかし、この対策は1および2のどちらも不十分であったため、二度目の攻撃を受けてしまう。

二度目の攻撃は攻撃者も少し工夫したようで、今度は2つのアルゴリズムを混ぜた。
Scryptで掘ったりLyra2REv2で掘ったりしてこの制限を逃れた。
また、遡る時間も少し幅を減らしたようである。
 

以下は2回目の攻撃のブロックエクスプローラーのスクリーンショットである。



 

今回は2つのアルゴリズムを混ぜたようである。

Scrypt



 

Lyra2REv2

(lyra2reと書かれているが、Lyra2Rev2を採用している)



 

こうして攻撃者は2回も攻撃に成功してしまった。

2回目の対策以降はもはやこの問題は発生していないので、
ようやく事態は収束したのだろう。



尚、この攻撃は巻き戻されなかったので、攻撃者は数千万円程度の利益を得たと言われている。

(巻き戻すと取引所のデータベースとの整合性が取れなくなる等の問題もあり、
開発者は巻き戻すという選択を取らなかったようだ。)
  • 公開日時:2018/07/10 19:35
  • 277 view
  • +3.16228504 MONA

スポンサーリンク

コメント


※ログインすることで、投げMONAも送信可能になります。 → Login

コメントはまだありません