急速に成長するcryptoというニッチ業界において、取引のセキュリティはこれまで以上に重要です。ブロックチェーンの利用が増加するにつれ、ハッカーが脆弱性を突く手段も増加しています。リプレイ攻撃は、深刻でありながら十分に理解されていない脅威の一つです。
リプレイ攻撃とは?
リプレイ攻撃とは、攻撃者が正当なトランザクションを再送信してシステムを欺くことです。攻撃者は署名を変更せず、それを他の場所で利用します。これにより、同じトランザクションが繰り返される可能性があり、ユーザーに脅威をもたらします。
署名が同じままであるため、ブロックチェーンが冗長なメッセージを受け入れる可能性があります。ブロックチェーンやアプリが検証されていない場合、攻撃者はリプレイを悪用します。これはフォークやこのようなブロックチェーン間で特に危険です。
リプレイ攻撃はいつ発生しますか?
ブロックチェーンが分割された場合や、二つのチェーンが同じフォーマットである場合、リプレイ攻撃が頻繁に発生します。署名されたトランザクションは、十分な保護がない場合、両方のチェーンで使用できます。これは、資金が一つのチェーン上で送信される同時に、別のチェーン上でも送信されることを意味します。
ブロックチェーン間の明確な境界がシステムに存在しないことは、ハッカーにとって機会をもたらします。また、彼らはメッセージ検証が弱いアプリケーションを標的にします。どちらの場合も、攻撃者は有効に見えるアクティビティを繰り返して利益を得ようとしています。
その一例が、2016年のEthereumとEthereum classicの事例です。攻撃者は両ネットワークでトランザクションを繰り返し実行しました。これは当初の保護機能がなかったためです。その結果、ユーザーは意図せず、同じトランザクションを二重に実行して資金を無駄にしました。
ウォレットがリプレイ攻撃を防ぐ方法
暗号通貨ウォレットには、リプレイ攻撃の前に実装された強力なセキュリティツールがあります。その一つが、各署名メッセージに関連付けられたチェーンIDです。これにより、署名は一つのブロックチェーンでのみ有効になり、他のブロックチェーンでは失敗します。
もう一つの重要なツールはノンスと呼ばれ、すべてのトランザクションでインクリメントされる数値です。ウォレットはノンスが再利用された場合、トランザクションを拒否します。これにより、ハッカーが同じメッセージや支払いを繰り返すことを防ぎます。
一部のウォレットでは、支払いを受け取るために時間制限が使用されます。たとえば、メッセージは最大5分間有効です。その後、署名は無効になり、再送信は不可能になります。
スマートコントラクトとアプリレベルの防御
ウォレットは機能していますが、スマートコントラクトとアプリも自らを保護する必要があります。ほとんどのコントラクトにはノンス/ユーザーが存在し、アクションの重複を防ぐためにノンスカウンターが使用されます。これにより、コントラクトは自分が確認した署名を否認できます。
オフチェーン署名を支援するアプリケーションは、EIP-712標準に従う可能性が高いです。このフォーマットには、チェーンID、アプリケーション名、およびコントラクトが含まれます。この標準を使用することで、アプリは各メッセージをその目的と関連付け、リプレイを回避します。
QuillAuditsというブロックチェーンセキュリティ企業によると、アプリはオフチェーン承認においてドメイン分離を省略してはなりません。適切なコンテキストが欠如すると、攻撃者が相互運用性を悪用できるようになります。これは、Web3システムのセキュリティにおいて監査が重要な理由を示しています。
主要なコンポーネント
レプレイ保護は、正しいコンテキストを保証するために、明確で独立したツールに依存しています。これらのツールには、チェーンID、アカウントノンス、有効期限があります。これらを組み合わせることで、攻撃者がレプレイを試みるのを困難にします。
最も重要な要素は:
- Chain ID – このトランザクションは1つのブロックチェーンでのみ有効であり、他のブロックチェーンでは拒否されます。
- Nonce – 署名されたメッセージが複数回使用されないようにするために使用される数値です。
- タイムスタンプまたは時間制限 – 時間が経過した後、再送信されたメッセージを拒否するための時間枠を追加します。
- ドメインセパレーター – EIP-712標準を介して、Tetherのオフチェーンメッセージを特定のアプリ、コントラクト、チェーンに分離します。
- スマートコントラクトのノンス追跡 – アプリやコントラクトが、コントラクトレベルで使用済みまたは重複したメッセージをブロックできるようにします。
これらのツールの組み合わせにより、大部分のリプレイ攻撃を防ぐことができます。これらの技術は、ウォレット、アプリケーション、プロトコルによってメッセージの重複を防ぐために採用されています。その結果、開発者とユーザーの体験がより安全になります。
レプレイ保護がユーザーにとって重要な理由
ウォレット、ブリッジ、取引所を利用する際、ユーザーが安心できるのはレプレイ保護があるからです。これがなければ、ユーザーは資金を失ったことに気づきません。繰り返しまたは悪用されるトランザクションを拒否することで、システムはより安全で信頼性が高まります。
チェーン名-ID-プロンプトウォレットは、ユーザーがエラーを回避できるようにします。ユーザーが取引の送信先を明確に理解できるようになると、自ら対応できるようになります。これにより、チェーンやアプリ間の移行中の混乱も最小限に抑えられます。
レプレイ保護は、取引所および保管者による安全な入金と出金にも使用されます。これらは、適切なネットワークでのみ取引を許可するカスタムツールを開発することが一般的です。これにより、フォークやアップグレード時に顧客のセキュリティと運用の安定性が確保されます。
結論
リプレイ攻撃は、1つ以上のチェーンやシステムで再利用された署名を悪用することで、ブロックチェーンのセキュリティに脅威をもたらします。しかし、チェーンID、ノンス、および時間制約を活用することで、ウォレットはそれらの防止に大きく貢献します。アプリやスマートコントラクトもこれに協力し、その使用状況と署名を監視すべきです。
システム同士が協力し合い、互いの存在を認識することが、最良の保護手段です。ユーザーは信頼できるウォレット、検証済みのDApp、監査済みのスマートコントラクトを活用することで、リプレイリスクを最小限に抑えます。ブロックチェーンの分野は拡大しており、その安全性を確保するための取り組みを強化する必要があります。

