こんにちは。管理人です。


最近の仮想通貨界隈、みなさんの大きな関心の的となっているのは、なんと言っても11月中旬に予定しているビットコインのハードフォーク(Segwit2X)による分裂問題でしょう。


この予定しているビットコインの分裂について「ヤバイ」と騒がれているのを一度は耳にしたことがあると思います。


中でも最も懸念されていると言ってもいいのが「リプレイアタック」と呼ばれるビットコインネットワークへの不正攻撃です。


ビットコインゴールドの時もそうですが、色んな取引所が、「リプレイアタックへの対策がしっかりと行われない限りは、ビットコインゴールドを取り扱わない」といった発表も行っていますよね。


今回は「リプレイアタック」という言葉を聞いたことはあるけど、中身はよく知らないという方向けに、「リプレイアタックとは何なのか」「リプレイアタック対策が無いと何がヤバイのか」ということを簡単に話していきたいと思います。

リプレイアタックって何?

仮想通貨におけるリプレイアタックというのは、1つのブロックチェーンがハードフォークによって2つのブロックチェーンに分裂した後、片方のチェーンで行われた取引のデータを不正に利用することで、もう片方のチェーン上にある資産を、本来の保有者の意思とは関係なく不正に動かす(送金させる)攻撃のことです。


おそらくこの文章を読んだだけではよく分からないという人が多いと思いますので、もう少しかみ砕いて話します。


まず仮想通貨でハードフォークが行われると、もともとのブロックチェーンに加えて、新しいブロックチェーンが作られて、合計2つのブロックチェーンに分かれることになります。
※ハードフォーク・・・互換性のないアップデートのこと。





ハードフォークによって新しく生まれたブロックチェーンを「A」、従来のブロックチェーンを「B」とします。





リプレイアタックでは、仮にブロックチェーンB上で取引(送金)が行われた場合に、その取引データを不正に利用することで、ブロックチェーンA上にある資産を、本来の所有者の意思とは関係なく、勝手に動かすことができます。


ビットコインで例えてみます。

11月中旬ごろ、ハードフォークによって新しく「Bitcoin Segwit2X(BTCS2X)」が生まれ、従来の「Bitcoin Segwit1X(BTCS1X)」とで2つのブロックチェーンに分かれ、何の対策もしないままBTCS2XがBTCS1Xの保有者に配布されたとします。
(※現状では配布されるかどうかは未定なのであくまで仮定です)


ここで保有していた1BTCS1XをAさんが送金したとします。悪い人がこの取引(送金)データを利用し、BTCS2Xのブロックチェーン上に載せることで、1BTCS2XをAさんの意思に関係なく不正に送金することができます。





逆も然りで、1BTCS2Xを送金した場合に、その取引データの悪用によって、1BTCS1Xを不正に送金することができます。


つまり、Aさんとしては片方のBTCしか送金していないつもりなのに、その後悪い人によって、もう片方のBTCも勝手に送金されてしまっているということです。

なぜ片方のブロックチェーンの取引データを利用することで、もう片方のブロックチェーンでも取引を行ったことにできるの?

このようにハードフォーク後にリプレイアタックを可能としている大きな理由としては


「分岐した後どちらのブロックチェーンも同じ秘密鍵を使用している」


ことが挙げられます。

秘密鍵・・・よく暗証番号のようなものだと言われることが多いですが、簡単に言えば、取引を行うために必要となる自分だけの暗号のことです。


秘密鍵が同じなので、たとえその取引が本当はチェーンAで行われた取引であっても、チェーンBにそのデータが載せられた場合、マイナーは区別できずにチェーンB上で行われた取引として承認してしまうんですね。

リプレイプロテクション

このようなリプレイアタックを防ぐための対策のことを「リプレイプロテクション(リプレイアタック保護)」と言います。

リプレイプロテクションを実装することで、それぞれのチェーンが完全に独立したモノとなるため、先ほど話したような、チェーンAの取引データを利用してチェーンBの通貨を勝手に動かすなんてことができなくなります。


例えば、SIGHASH_FORK_IDと呼ばれるリプレイプロテクションがあらかじめ実装されていたビットコインキャッシュ(BCH)では、ハードフォークによってBTCチェーンとBCHチェーンに分かれたワケですが、BTCチェーンでの取引データを悪用し、BCHチェーン上に載せたところで取引の承認は行われません。(リプレイアタックは行えません)

BCHチェーンで取引を行うためには、BCHチェーンでのみ有効な電子署名をすることが必要となる仕組みをとっています。





このようなリプレイプロテクションを行っているため、ビットコインキャッシュは安全なものとして現在どこの取引所でも取り扱っているというワケです。


ちなみに2017年10月25日に分裂して誕生したビットコインゴールド(BTG)は当初リプレイプロテクションが実装されていませんでしたが、その後11月1日に、公式より、リプレイプロテクションが実装されたことが報告されました。

ビットコインゴールドもビットコインキャッシュと同じSIGHASH_FORK_IDと呼ばれるリプレイプロテクションが実装されています。

(参考:Bitcoin Gold Daily Update – Replay Protection fully implemented

なんでリプレイプロテクションがないとヤバイの?

まとめになりますが、リプレイプロテクションが実装されていないということは、片方のチェーンで行われた取引データが悪用されることで、もう片方のチェーンでも同数の取引を勝手に行うことができることを意味します。

ビットコインの話であれば、Bitcoin S1Xの送金を行った後、その取引履歴を利用してBitcoin S2Xが不正送金されるリスクがあります。
逆も然りで、Bitcoin S2Xの送金を行った後、その取引(送金)履歴を使って手持ちのBitcoin s1Xが抜かれる危険性があります。


こういう危険な状態にもかかわらず、一切の対策もないままBitcoin S2Xを付与して、取引開始させるなんて取引所は、お客さんのことを全く考えていない取引所としてなかなか信用に値しませんよね。


だから、ビットコインゴールド(BTG)の時もそうでしたが、顧客保護の点から、基本的にどこの取引所でもしっかりリプレイアタックへの対策が取られた後じゃないと、取引は開始させないというワケです。
(厳密に言えば取引所の場合、何度も取引所へ資金を出し入れする方法でのリプレイアタックも懸念されていますが。)


ちなみにBTGの場合は、リプレイプロテクションが後付けで実装されましたが、11月中旬ごろに予定しているSegwit2Xのハードフォークに関しては、BCHやBTGのようなリプレイプロテクションが実装される予定はないので、そういった点でも非常に危惧されているという現状です。

以上、簡単ではありましたが、ビットコインのハードフォークを控えた今、最低限知っておきたいリプレイアタックに関する話でした。