リプレイアタック(リプレイ攻撃)とは?
元々は情報セキュリティの用語
リプレイアタックというのは情報セキュリティの分野で使われている用語で、日本語では「反射攻撃」や「リプレイ攻撃」などと呼ばれるものです。代表的な例としては、サーバーへの不正ログインを挙げることができます。
ユーザーがログインする際に入力するIDとパスワードの情報を第三者が傍受し、不正アクセスするといった具合です。リプレイアタックは直訳すると「繰り返し攻撃」となりますが、何を繰り返すかというとそれはユーザー情報の入力です。
ユーザーが入力したデータ(IDとパスワード)をそのまま繰り返し同じように入力して、不正アクセスをしていくから「繰り返し攻撃」と呼ばれています。一見すると何だか分からない用語ですが、実はとてもシンプルな攻撃方法なのです。
ただ仮想通貨におけるリプレイアタックの意味合いはもう少し限定されたものになります。サーバー(取引所)への不正アクセスという意味では合っているのですが、より特殊な形といえるでしょう。
ハードフォークの仕組みを利用した攻撃
仮想通貨界隈ではしばしばコインが分裂する(ハードフォークする)ということが行われてきました。ビットコインからはビットコインキャッシュが分裂して誕生したことは有名ですが、他にもビットコインゴールドやビットコインダイヤモンドなど、様々なコインが分裂して誕生しています。
ここでは仮想通貨Aから仮想通貨Bが分岐したと考えていきましょう。ハードフォークへの対応は取引所によって異なり、対応していないところではBをもらうことはできません。ただ実際にはBは存在しており、送金に必要な秘密鍵が同じであるため、Aを送金するとBも同額送金したことになってしまいます。
ここで不正ログインする第三者がいると考えてみます。 彼はこのハードフォークに対応していない取引所のユーザーアカウントに不正ログインし、Aを数枚出金してしまいます。
するとAとBが同額出金されるのですが、直ぐに彼はAを同額入金します。この結果、ユーザーの口座にはAがそのままの金額残り、攻撃者の口座には引き出した額のBが残るのです。
そしてこれを繰り返し行っていくと、ユーザーの口座にあったAと同額のBを全て彼が手にすることになります。仮想通貨におけるリプレイアタックというのは、不正ログインの手法という意味でのリプレイと、繰り返し出金するという意味のリプレイが重なり合った意味といえるでしょう。
個人としてリプレイアタックに対処する方法は以下の通りです。
リプレイアタックの事例
リプレイアタックの事例として、2016年のThe DAO事件を振り返ります。
The DAOとは、非中央集権的な投資ファンドのプロジェクトのことで、従来の投資ファンドとは異なり、運営ではなくDAOを保有する投資家が投票によって投資先が決定し、保有量に応じて配当を受けることができる仕組みになっていました。
またDAOには「スプリット機能」という投資家にとって有利な仕組みが備わっていました。この機能によって、投資先に賛成できない場合などに投資額をまるまる別の場所へ移動し、イーサリアムに変換することができました。
しかし、スプリット機能には「何度もDAOを送金することができる」というバグがあり、ハッカーはこのバグを利用し、結果的には約65億円ほどが盗まれてしまいました。The DAO事件についてさらに詳しく知りたい方は、【The DAO事件とは?DAOプロジェクト概要やその後の対策を徹底解説!】を参考にしてください。
リプレイアタック対策(リプレイプロテクション)とは?
リプレイアタックを防ぐための対策のことを「リプレイプロテクション」といいます。 代表的なものとしてはビットコインから派生したビットコインキャッシュやビットコインゴールドで採用されている「SIGHASH_FORKID」というものです。
ビットコインの取引時にはいくつかの署名が行われています。その中のパラメータの1つとして、ビットコインキャッシュやビットコインゴールドでは「SIGHASH_FORKID」というものが追加されました。
この値はビットコインには存在しないものなので「SIGHASH_FORKID」が記載されている以上、ビットコインの取引ではないということが明示されるのです。
また「SIGHASH_FORKID」にはハードフォークした通貨のどれかを識別するために「fork id」という値も含まれています。このように、シンプルながら通貨を識別するIDを付与したことでリプレイプロテクションが成立するようになったのです。
新しいハードフォークが生まれるときは信頼性を測る意味でもリプレイプロテクションの有無に注意することをおすすめします。