ビットコインキャッシュにおけるリプレイアタックについて。危険性や有効な対策を知ろう

2018.09.05 (水) 17:00
ビットコインキャッシュにおけるリプレイアタックについて。危険性や有効な対策を知ろう

ビットコインキャッシュにおけるリプレイアタックについて。危険性や有効な対策を知ろう

仮想通貨におけるリプレイアタックとは、悪意あるユーザーにより不正に仮想通貨を移動される攻撃のことです。

近年では、仮想通貨がふたつのブロックチェーンに分裂したあと、片方のブロックチェーンで行われた取引情報を利用して、もう片方の資産を不正に送金する攻撃が問題となっています。

この記事では、リプレイアタックの説明のほか、リプレイアタックが起きる理由や原因、今までにあった事件の概要、そしてリプレイアタックに対する有効な対策について解説していきます。

 

1 リプレイアタックについて

「リプレイアタック」は、もともと仮想通貨界隈だけで使われる言葉ではありません。

一般的には、ネットワークやシステムに不正に入り込む方法のひとつで、正規ユーザーがログインした情報を傍受して、そのデータを使ってログインする方法のことです。

「反射攻撃」「リプレイ攻撃」とも呼ばれています。

仮想通貨におけるリプレイアタックは、仮想通貨を保有している本人が使った取引データを悪用して、別の仮想通貨を不正に送金、または出金することをいいます。

リプレイアタックが起こりやすいのが、ハードフォークなどで仮想通貨が分裂するタイミングです。

その理由は、仮想通貨がふたつのブロックチェーンに分かれた場合、片方のブロックチェーンで行われた取引データを悪用すると、もう片方のチェーン上にある仮想通貨を不正に送金できてしまうためです。

 

1.1 仮想通貨分裂前後での送金について

仮想通貨分裂前後での送金について

これだけでは分かりにくいので、具体的に例を紹介します。

Xという仮想通貨がハードフォークを行い、Yという新しい仮想通貨ができるとします。

分裂前からXを保有していた人は、分裂後、XとYを両方、同じ量、保有することになります。

分裂する前の送金フローでは送金依頼を行うと、Xのブロックチェーンにその記録が記載され、決済が完了します。

しかし、XとYに分かれたあと、Xの送金依頼を行うと、Yも同じ仕様なので、Yの送金依頼も一緒に行われてしまうのです。

これは、Xのブロックチェーンが分岐してXとYのブロックチェーンに分かれても、XとYの仕様が同じであるために両方に送金の取引データが送られてしまうためです。既存の仮想通貨であるXだけを動かしたつもりでも、新規に作られたYの処理も同時に行われてしまうのです。

 

1.2 リプレイアタックとは何か?

リプレイアタックは、こうした仕組みを悪用し、悪意を持った第三者が攻撃することをいいます。

悪意あるユーザーが、AさんとBさんが行ったトランザクションをコピーし、もうひとつのブロックチェーンでコピーした取引を実行することで、元の送信者が意図しない送金が行われてしまいます。

分岐したふたつのブロックチェーンは同じ秘密鍵(取引に必要な暗証番号のようなもの)を使っているため、マイナーはふたつのトランザクションを区別できず、正しい取引だと承認してしまうのです。

この攻撃は、仮想通貨取引所に対しても行われます。分裂後に仮想通貨を引き出した場合、分裂して新しくできた仮想通貨も同じ量が引き出されます。

これを悪用して何度も繰り返すと、理論上では、取引所にある仮想通貨を全額引き出すことも可能です。しかし、実際には取引所は何らかのリプレイアタック対策を講じていて、そのようなことはできなくなっています。

 

2  リプレイアタックはどう危険?

リプレイアタックはどう危険?

ここからは、リプレイアタックがどのような危険をおよぼすのか、また、実際にあったリプレイアタックによる事件をご紹介します。

 

2.1 リプレイアタックはどのように危険なの?

ここまで説明したように、悪意あるユーザーにリプレイアタックの標的にされると、大切な仮想通貨が勝手に流出してしまう危険性があります。

自分は仮想通貨Aだけを送金しているつもりでも、リプレイアタックの標的になると、同時に同量の仮想通貨Bも送金してしまいます。

例えば、ビットコインを1BTC送金したつもりが、分裂してできたビットコインキャッシュも、勝手に1BCH送金しているという事態になるのです。

同様に、お店でビットコイン決済を行い、自分はビットコインしか使っていないつもりなのに、リプレイアタックのせいで新しく分裂したビットコインキャッシュも失ってしまうということも考えられます。

 

2.2 リプレイ攻撃の被害にあった「The DAO」について

実際にこのリプレイ攻撃に被害にあった有名な事件が「The DAO事件」です。

「The DAO」は独自の仮想通貨DAOトークンを発行して、仮想通貨イーサリアム(ETH)を集めていた組織です。

しかし、プログラミングにミスがあり、短期間に同じトランザクションを大量に出すとすべて承認されてしまうというバグがあったため、リプレイアタックされ、DAO内にある資産の約3分の1が盗まれてしまいました。

この大きな事件をきっかけに、イーサリアムはハードフォークを行い、イーサリアムクラシックという新しい仮想通貨が誕生しています。

 

3 リプレイアタックの有効な対策は?

リプレイアタックの有効な対策は?

3.1 リプレイアタック対策(リプレイプロテクション)

ここまで仮想通貨におけるリプレイアタックについて解説してきました。攻撃を受けると大切な資産を勝手に移動されたり、盗まれたりする可能性があります。

それを防ぐためには、リプレイアタックが起こらないように対策を講じなければなりません。

ハードフォークが終わったあと、しばらくの間は取引や送金をしないという対策もありますが、ここではそれ以外の、取引所や開発者が行うリプレイアタック対策をふたつ紹介します。

どちらも、ビットコインから分裂したビットコインゴールドに実装された対策方法です。

 

3.1.1 SIGHASH_FORK_ID

「SIGHASH_FORK_ID」とは、ビットコインから分裂したビットコインゴールドに実装されたリプレイアタック保護対策機能のひとつです。

これは、SIGHASH_FORK_IDというタグのようなものをトランザクション内にあらかじめ付けておくことで、分裂したどの仮想通貨であるかを判断する方法です。この対策は、ビットコインキャッシュにも採用されています。

ビットコインはタグなし、ビットコインキャッシュは「0」というタグ、ビットコインゴールドには「79」というタグが付いているため、もし、ブロックチェーン上でタグの付いていない取引があったら、リプレイアタックによる取引であることが判断できる仕組みです。

 

3.1.2 オプトインリプレイプロテクション

もうひとつのリプレイアタック対策は、「オプトインリプレイプロテクション(Opt-in Replay Protection)」です。

オプトインは「選択可能」という意味で、プロテクションは「保護」という意味です。直訳すると「選択可能なリプレイ保護対策」という意味になります。

ビットコインゴールドなどで採用しているこの仕組みは、一定額のビットコインを特定のブラックリストアドレスに少量送ることで目印を付けておき、二重で送金されるのを防ぐ方法です。例えば、オリジナルビットコインのみを送金したい場合、指定されたアドレスにビットコインを一定の金額を送れば、Segwit2xビットコインは送信していないことが証明され、意図せずSegwit2xビットコインが送られてしまうのを防げます。

しかし、この方法は手数料がかかることや、ユーザーが能動的にリプレイアタック対策を選択しなければならないという問題点があります。

最新記事