リプレイアタック

ビットコインにおけるリプレイアタック

リプレイアタックとは

リプレイアタックとは、ハードフォークを実施してブロックチェーンが枝分かれした際に、悪意のある第三者によって仕掛けられる攻撃の1つです。

ハードフォークは「ブロックチェーンの仕様」を変更することを意味します。ブロックチェーンのブロック内の書き込みがフルになってデータ処理速度が遅くなるというスケーラビリティ問題への対策として、「ブロックチェーンの仕様」を変更してブロックの容量を増やします。特にビットコインは他の暗号資産(仮想通貨)と比べてブロックの容量が相対的に小さく、このスケーラビリティ問題の解決が重要な課題となっています。

ハードフォークの実施に伴い、従来の仕様に基づいて連なってきたブロックチェーンから、新たな仕様に沿ったブロックチェーンが枝分かれすることになります。「旧仕様」と「新仕様」の間には互換性がないため、ブロックチェーンが分岐した状態が継続し、その暗号資産(仮想通貨)が分裂することになります。

リプレイアタックの手口とは、ハードフォークが実施されるタイミングを狙い、ブロック(台帳)内に記載されているトランザクション(取引の内容)をリプレイ(別の台帳上でも実行)させることによって、送金者が意図していない別の台帳に資産を移してしまうものです。

具体的には、ハードフォークで「旧仕様」のブロックチェーンから「新仕様」のチェーンが分岐してそれぞれが独立したものとなった際に、誰かが送金する瞬間を犯罪者は待ち構えています。誰かが送金手続きを行って「旧仕様」のブロックにトランザクションが記録されると、犯罪者はそのコピーを「新仕様」のほうでも実行させます。この企みが成功して「新仕様」のブロックチェーンにそのトランザクションが記録されてしまうと、送金者は意図していないにもかかわらず、「旧仕様」と「新仕様」の両方において送金を行ったことになってしまいます。もちろん、送金した当人は気づいておらず、犯罪者は「新仕様」のほうに送金された暗号資産(仮想通貨)を自分のものにしてしまうわけです。

犯罪者が着目したのは、「旧仕様」と「新仕様」のブロックチェーンがどちらも同じ「秘密鍵」を用いていることです。「秘密鍵」は取引のために不可欠な暗号技術を用いたデータで、本来は暗号資産(仮想通貨)の保有者だけが知り得るものなのですが、「旧仕様」と「新仕様」でそれが同一であることから、リプレイアタックが可能となってしまったのです。

このリプレイアタックは、仮想通貨交換業者を標的とすることも可能です。ビットコインにおいてハードフォークが実施され、新たにビットコインβが分裂・誕生したと仮定した場合に、きちんとした対策が施されていない仮想通貨交換業者では、その通貨の同一性を認識できないため、まず犯罪者は手持ちのビットコインを仮想通貨交換業者に送金します。そして犯罪者自らのトランザクションをリプレイアタックによって、ビットコインβのブロックチェーンにも書き込み、それに成功すればビットコインとビットコインβの両方を引き出すことが可能となります。そして、ビットコインだけを仮想通貨交換業者に戻し、ビットコインβは密かに別のウォレット(暗号資産(仮想通貨)の保管場所)に移します。こうした作業を繰り返していけば、その仮想通貨交換業者内にあったビットコインをすべて奪い尽くすことも不可能ではありません。

リプレイアタックの事例

このように、巨額の被害が発生しかねないリプレイアタックですが、実際に事件も発生しています。2016年6月にDAOというトークン(代替仮想通貨)が標的となり、当時の価格で43億円相当がハッカーによる不正送金で盗難に遭いました。

DAOはイーサリアム(ETH)という暗号資産(仮想通貨)のブロックチェーン上に成り立っているトークンで、ドイツのベンチャー企業・Slock.itが運営するThe Daoというプロジェクトで使用されていたものです。自律分散型の投資ファンドを構築するというプロジェクトで、DAOを購入すれば誰でも参加できました。

購入によって手に入れたDAOは、The DAO本体でプールされていきます。そして、DAOの保有者たちは投票で投資先を決定し、資金プールのDAOの運用を行います。その成果が配当としてDAOの保有者に還元されていくという仕組みになっていたのです。

ハッカーが目をつけたのは、DAOに採用されていたSplit機能と、その開発コード上に存在していたバグ(欠陥)でした。Split機能とは、DAOの運営に賛同できなくなると、自分が貯めてきた報酬をDAO本体から切り離したうえで、自分でアドレスを作成した新しいDAOに移動できるというものです。しかも、そのDAOをイーサリアムに変換できます。そこで、ハッカーは「Split機能で移動先のアドレスを作成→報酬を送金する指示を出す→コード上のバグによって何度も送金指示が繰り返される」というパターンで360ETHを強奪したわけです。

ただし、Split機能で新たなアドレスに移すと、28日間はそのDAOを別のところへ動かすことができないというルールも存在していており、ハッカーはその期限が来るまでは完全に資金を奪い去ることができません。

DAOの保有者たちはこのタイムリミットの中で議論を繰り返し、最終的に3つの対処方法のうちのいずれかを選ぶ決断を迫られることになりました。それは、①ソフトフォークを実施し、ハッカーが資金の移動先に用いたアドレスを無効化、②諦めて何も手を打たない、③ハードフォークを実施し、その取引事実を抹消する(ブロックチェーン上に記載されている犯行後の記録を削除)、という三者択一の選択肢です。ただ、③においてはイーサリアムコミュニティにおける過半数の賛成が必要となります。結局、事件が発生してから約3週間後にハードフォークが実施され、ブロックチェーン上から記録が抹消されることで不正送金の事実はなかったことにされたのです。

リプレイアタックへの自衛策は?

では、リプレイアタックに対する防衛策はあるのでしょうか。いくつか挙げられますが、最も効果的なのは、リプレイプロテクションと呼ばれる機能を追加することでしょう。これを搭載しておけば、ハードフォークが実施されてブロックチェーンが分岐しても、それぞれが完全に独立した存在となるので、リプレイアタックを仕掛けるのは不可能だとされています。すでにビットコインには、SIGHASH FORKIDというリプレイプロテクションが搭載されています。

一方、暗号資産(仮想通貨)のユーザーが自分でできる防衛策としては、「危うい局面では取引を控える」ということに尽きるでしょう。アルトコイン(ビットコイン以外の暗号資産(仮想通貨)の総称)はもちろん、ビットコインにおいても、念のためハードフォークの直後には取引しないのが賢明です。リプレイアタックに限らず、ブロックチェーンが分岐した直後は予期せぬトラブルが発生しやすいと言っていいでしょう。

冒頭でも述べたように、リプレイアタックとは、ハードフォークを実施してブロックチェーンが枝分かれした際に、悪意のある第三者によって仕掛けられる攻撃です。ビットコインにはリプレイプロテクションと呼ばれる防衛機能が搭載されているものの、もしハードフォーク(暗号資産(仮想通貨)の分裂)が実行されたら、その直後は取引を控えるのが最善の防衛策でしょう。

今、暗号資産(仮想通貨)を始めるなら
DMMビットコイン