Bitcoin Transaction Malleability and MtGox という論文が26日に投稿された。これによれば、トランザクション解析によると、Mt.Goxに対するトランザクション展性の攻撃が起こっていたにしろごくわずかであり、到底85万ビットコインが失われることにはならないとしている。この論文の見積では、せいぜい386ビットコインが盗まれたに過ぎないとしている。
その論文を読んだので以下、要約を書いておく。なお、トランザクション展性の説明については、私の過去エントリを参照してほしい。
「彼らは、2013年の1月から実験的なノードを立ち上げ、ビットコインネットワークのトランザクションを収集分析しはじめた。このノードは、理論的に、ほぼすべてのトランザクションを検出できるという。
彼らは、トランザクション展性による攻撃がどのくらいの数、頻度、金額、成功率で起きているのかを分析した。
分析によると、35,202のトランザクション展性攻撃が行われたという証拠のトランザクションを特定したという。
そのうち29,139はブロックに取り込まれコンファームされた。のこりの6,063は署名違いほかの理由で取り消されている。ブロックにとりこまれた、29,139のトランザクションのうちのほとんどの28,595は、スクリプトの一部を変更する方法でなされている*1。
35,202のトランザクションに含まれる、ビットコインの送金合計は302,700BTCであり、これが被害額の上限になるはずだ。
実際に、スクリプトの一部を変更する方法で、攻撃に成功したかどうかを(変更後のトランザクションのほうがブロックに取り込まれ、オリジナルが弾かれた例)チェックすると、5,670のトランザクションが成功しており、19.46%の成功率だという。全体では21.36%の成功率。
故に、トランザクション展性の攻撃が成功したBTCの総量は、
302,700 * 21.36% = 64,564BTC になる。
さらに、このトランザクション展性攻撃のほぼすべてが、2/7にMt.GOXがビットコインの引き出しを停止した以降におきた。(下記の図を参照)
2/7以前に検出された展性トランザクションは421件であり、対象となる額は1,811BTCだという。それがすべて、Goxに向けられたものだったとしても、(成功率20%程度で)せいぜい386BTCが失われたに過ぎないと結論づけている。
残りの展性アタックは、2/7のプレスリリース後に起きており、サイバー攻撃者はこの手法が有効であることを知り、これが引き金になって、トランザクション展性攻撃が大流行したと分析する。
2012-1月~2014/2/7 : 421件、1,811BTC
2/8-9にかけて: 1,062件、5470BTC
2/10-28にかけて: 25,752件、286,076BTC
結論としては、トランザクション展性自体は2010年に最初に指摘された。しかしながら、プライオリティが低い問題とされ、それほど注目を浴びなかったし、攻撃もわずかなものだった。
むしろ、Mt.Goxのリリースが引き金になり、トランザクション展性が攻撃につかえることを知ったサイバー攻撃者が、以後大量の攻撃をさまざまなサイトに仕掛けたというのが、実際におこったことだ。」
というのが論文の結論だ。要するに、Mt.Goxはウソをついている。Mt.GoxがBTCの引き出しを停止した時点までのトランザクション展性攻撃は、たかだか421件、1,811BTCで、これがすべてMt.Goxにむけられたとしても、せいぜい386BTCが盗まれたにすぎない。
それ以降のアタックの数は膨大だが、すでにGoxはBTCの引き出しを停止した後の話である。
この分析が正しいとすれば、Mt.Goxは明らかなウソをついている。Mt.Goxが現在も顧客のビットコインのすべてを保有しているのか、それとも(他の理由により)失っているのかはわからないが、どちらにしても、トランザクション展性によって失われた可能性はない、ということがわかったといえる。
この事件は、不可解であり、Mt.Goxの説明を鵜呑みにはできない。まだいろいろな事実が出てきて、二転三転してくると思う。引続き追っていきたい。
なお、前回マスコミ向けにおこなった、ビットコインの基礎セミナーを今回は一般に開放して行う。当日は、財布を作成いただき、ビットコインの送金などの体験や、仕組みなどを解説する。また、参加者には全員に、少額のビットコイン配布する。
この論文の話や、トランザクション展性についても、お話する時間を設けるので興味があるかたは参加ください。
<日時・場所> 2014年4月5日(土)
大阪会場 13時30分 http://peatix.com/event/32696
京都会場 17時30分 http://peatix.com/event/32709
*1 トランザクション展性攻撃のうち主流は、スクリプトのOP_0を、OP_PUSHUDATA2に置き換えるもので、署名検証時のデータコピーのしかたを1バイトから2バイトに変えるだけなので、結果として署名は正しく検証される。しかしながら、スクリプトは4バイト文字数が増えるので、トランザクションハッシュ値は変わる。
[1] Bitcoin Transaction Malleability and MtGox Christian Decker, Roger Wattenhofer (Submitted on 26 Mar 2014)