Transaction Replacement Attackとは何か?
Transaction Replacement Attackとは、誰かが暗号資産で支払いを行った後、確認が入る前に送金内容を変更した別の取引を素早く再送信する行為です。狙いは、最初の保留中の支払いを受け取った相手をだますことです。レジで現金を出すと約束してから、店員の目が離れた隙に走って戻り、札をすり替えるようなイメージです。
取引が保留中になっていれば支払い済みと扱って安全だ、とは限りません。マイナーがブロックに含めるまでは差し替えが起き得て、Transaction Replacement Attackによって結果が覆る可能性があります。
Transaction Replacement Attackの仕組み
レジでのやり取りを想定した、簡潔な手順です。
- ステップ 1:攻撃者が低い手数料であなたに支払いを送ります。あなたは保留中の表示を見て安心します。
- ステップ 2:確認が入る前に、攻撃者は同じ資金を使う別の取引を作成して再送信します。多くの場合、Replace by Fee(RBF)を使うか、アカウント型チェーンで同じノンスで再提出します。
- ステップ 3:差し替え取引はより高い手数料を提示し、マイナーの選好を得て採掘され、最初のバージョンは破棄されます。
- ステップ 4:マイナーが高い手数料を優先するため、ネットワーク混雑時に起きやすくなります。
- ステップ 5:あなたが保留中の支払いを根拠に商品やサービスを提供すると、チェーンが差し替えを確定したときに未払いとなる恐れがあります。
これが手口です。単純で少しずるいですが、防ぐことは可能です。
なぜTransaction Replacement Attackを気にするべきか
チェックアウトを運用する場合でも、友人にコインを送る場合でも、注意すべき理由は次の通りです。
- 利点:差し替えの仕組みは、正当な利用者が手数料を上げて詰まった支払いを速く通すのに役立ちます。
- 視点:自分を助けるための同じツールが、保留中の支払いを信用した相手を狙うために使われることもあります。
- 関連性:ポイントオブセール、NFTミント、店頭取引など、保留中の取引を受け入れる場面でよく見られます。
暗号通貨ウォレットは、差し替え可能な取引を明確に表示し、確認数を見せるものを選んでください。支払いでは、重要なものを渡す前に数回の確認を求めるようにしましょう。
Transaction Replacement Attackの主な特徴
分かりやすく言うと、次の点が特徴です:
- タイミング:確認前、取引がメンプールに残っている間に起きます。
- 動機:より高い手数料や有利な条件が、マイナーやバリデータを差し替え取引へ誘います。
- 兆候:取引の中には差し替え可能とマークされるものがあり、アカウント型チェーンでは同じノンスで置き換えが可能です。
- 対象:保留中の支払いを受け入れる店舗や相手が狙われやすいです。
バリエーション
同じテーマで、チェーンによって仕組みが少し変わります。
- RBF:送信者が支払いを差し替え可能とマークし、後で出力先や受取人を変更した高い手数料のバージョンをブロードキャストします。
- ノンス差し替え:アカウント型チェーンでは、同じノンスでより高いガスを付けて取引を再送することで、以前の意図をキャンセルまたは変更します。
- 返金トリック:送信者がまず商人に支払いを行い、その後保留中の支払いを自分の管理するアドレスへ送るように差し替えます。
ノードが取引を確定済みと示すまでは、支払いを最終扱いにしないでください。十分な確認があれば、Transaction Replacement Attackは効果を失います。
例
カフェでラテの支払いが保留中で受け付けられ、購入者がすぐにより高い手数料の差し替えをブロードキャストして資金を別の場所へ送ってしまい、後でバリスタがその購入者が差し替え可能性を悪用していたと気付く、という例です。
豆知識
手数料の上げ方は、本来は正当な利用者が詰まった取引を救うために導入されました。トリックのネタにされるようになるずっと前からあります。多くの技術と同じで、誰が扱うかによって見え方が変わります。
まとめ
短く言うと:未確定の支払いで商品を渡さないでください。1〜2ブロックほど待ってから対応すると安全です。
