トークン承認とは、分散型アプリ(dappとも呼ばれる)がウォレットから特定の種類のトークンにアクセスし、移動することを許可するスマートコントラクトの権限です。承認がなければ、ウォレットがアプリのインターフェースに接続されていても、セルフカストディアルウォレット内のトークンにアプリがアクセスすることはできません。承認とは、ウォレットを接続することと、プロトコルが実際にその中の資産を使用できるようにすることの間のギャップを埋めるものです。
トークン承認は、分散型取引所でのトークンスワップ、レンディングプロトコルへの預け入れ、プールへの流動性追加、マーケットプレイスへのNFT出品など、ほぼすべてのDeFiインタラクションに必要です。また、暗号資産セキュリティにおいて最も悪用されるメカニズムの一つでもあります。MetaMaskの月次暗号資産セキュリティレポートでは、これらの脅威を詳しく追跡しています。例えば、2026年2月の暗号資産セキュリティレポートでは、「シグネチャーフィッシング」(承認フィッシングとも呼ばれる)の悪用が207%増加したことが取り上げられています。トークン承認の機能、その持続性、そして攻撃者がどのように悪用できるかを理解することは、セルフカストディアルウォレットを使用するすべての人にとって不可欠です。
免責事項:このコンテンツは教育目的のみを目的としています。財務アドバイス、勧誘、または英国のオーディエンスを対象としたものではありません。暗号資産ウォレットおよびデジタル資産にはリスクが伴い、すべてのユーザーに適しているわけではありません。
トークン承認の仕組み
トークン承認のよくある例として、分散型取引所でUSDCをETHにスワップする場合を挙げます。アプリのスマートコントラクトは、ウォレットからUSDCを受け取り、取引を実行するための許可が必要です。その許可がトークン承認です。
コントラクトレベルでは、ユーザーはUSDCトークンコントラクト上のapprove()という関数を呼び出します。この関数は2つの入力を受け取ります:スペンダー(承認されているスマートコントラクトアドレス)と金額(スペンダーが移動できるトークンの数量)です。承認トランザクションがブロックチェーン上で確認されると、スペンダーコントラクトはtransferFrom()を呼び出して、ユーザーのウォレットから承認された金額までのトークンを、ユーザーからの追加確認なしに移動できます。
特に初心者が知っておくべきトークン承認に関する重要な点が2つあります。まず、承認は1つのトークンと1つのスペンダーに固有のものです。分散型取引所(DEX)にUSDCの使用を承認しても、ETH、BTC、その他のトークンへのアクセスは付与されません。次に、承認はネットワーク手数料がかかるブロックチェーントランザクションです。これは実際のスワップとは別のステップであり、DeFiインタラクションでは承認用と実行用の2回の確認が必要になることが多い理由です。
限定承認と無制限承認
承認の金額フィールドは、スペンダーがアクセスできるトークンの数量を決定します。
限定承認は、特定のスワップに必要な500 USDCのように、スペンダーが特定の数量のトークンのみを移動することを承認します。その500 USDCが転送されると、許容量は使い切られます。次のスワップには新しい承認が必要となり、別のブロックチェーントランザクションと追加のネットワーク手数料が発生します。
無制限承認は、スペンダーがそのトークンの最大可能量(技術的には2^256 − 1で、どのトークンの総供給量よりもはるかに大きい数)を移動することを承認します。これは、コントラクトが現在および将来にわたって、追加の承認なしにそのトークンのユーザーの残高全体にアクセスできることを意味します。ほとんどのアプリはデフォルトで無制限承認を要求します。これにより、ユーザーの手間が省けるためです。一度承認すれば、そのトークンを使った将来のすべてのトランザクションが事前承認されます。
利便性は確かにありますが、リスクも同様です。無制限承認は期限切れになりません。承認が付与されたコントラクトが後に悪用されたり、悪意を持ってアップグレードされたり、ユーザーが正規のアプリを模倣したフィッシングサイトで承認に署名した場合、攻撃者はユーザーからの追加インタラクションなしに、承認がカバーするすべてのトークンを引き出すことができます。被害者は、トークンがなくなるまで承認の存在に気づかないこともあります。
考慮事項 | 限定トークン承認 | 無制限トークン承認 |
承認金額 | 特定(例:500 USDC) | 最大可能量(残高全体、無期限) |
持続性 | 指定された金額が転送された後に消費される | 手動で取り消されるまで有効 |
ユーザーの手間 | トランザクションごとに新しい承認が必要(追加ネットワーク手数料) | 一度の承認で将来のすべてのトランザクションをカバー |
コントラクトが悪用された場合のリスク | 損失は承認された金額に制限される | トークン残高全体がリスクにさらされる |
一般的な使用 | セキュリティ意識の高いユーザー、高額トランザクション | ほとんどのアプリのデフォルト |
Permit2トークン承認の仕組み
2022年11月、Uniswap Labsは従来のトークン承認の手間とリスクに対処するため、Permit2というコントラクトをデプロイしました。2025年までに、310万以上のEthereumメインネットアドレスがPermit2コントラクトを承認し、Uniswap、1inch、CowSwap、その他多くのプロトコルで使用される、DeFiで最も広く統合された承認システムとなりました。
核心的なアイデアは次の通りです:すべてのアプリのスマートコントラクトに個別のブロックチェーン承認を付与する代わりに、ユーザーはPermit2コントラクトに単一の承認を付与します。そこから、各アプリのインタラクションはオフチェーンシグネチャーを通じて承認されます。これは、どのトークン、どの数量、どのスペンダー、そして許可が期限切れになる期限を指定する、ウォレットで署名されたメッセージです。
従来の承認に対する改善は意味のあるものです。Permit2シグネチャーには期限が含まれているため、古い許可は永続するのではなく自動的に期限切れになります。ノンスにより、同じシグネチャーが2回使用されることを防ぎます。また、ユーザーはアプリごとではなくトークンごとに1つの承認に署名するため、ブロックチェーン承認トランザクションの総数とそれに関連するネットワーク手数料が削減されます。
トレードオフは攻撃対象の変化です。従来の承認は、数ヶ月または数年前に承認され、後に侵害されたコントラクトという休眠状態のブロックチェーン許可を通じて悪用されていました。Permit2シグネチャーは、署名の瞬間のフィッシングを通じて悪用されます。Permit2承認はEIP-712型付きデータシグネチャーを使用するため、ウォレットにはトランザクション確認ではなく署名プロンプトとして表示されます。悪意のあるサイトは、実際にはユーザーのトークン残高全体の転送を承認するPermit2シグネチャーである「このメッセージに署名する」という通常のリクエストのように見えるものを提示できます。ブロックチェーントランザクションなし。ユーザー側からのネットワーク手数料なし。シグネチャーだけで、攻撃者がtransferFrom()を呼び出します。
ドレイナーがトークン承認を悪用する方法
ウォレットドレイナーは、被害者からトークン承認(従来型とPermit2の両方)を引き出すために設計された自動フィッシングツールキットです。**ドレイナー・アズ・ア・サービス(DaaS)**として機能します:開発者が悪意のあるスマートコントラクト、フィッシングインフラ、資金洗浄パイプラインを維持し、アフィリエイトが盗まれた資金の一部(通常、引き出した金額の75〜95%を保持)と引き換えにサービスをレンタルします。
ウォレットドレイナーの攻撃パターンは、一貫したシーケンスに従うことが多いです:
ステップ1:誘惑。 被害者は、スポンサー付き検索結果、偽のエアドロップリンク、侵害されたDiscordサーバー、またはクローンされたアプリインターフェースを通じてフィッシングサイトに到達します。サイトは正規のプロトコルのように見えます:同じブランディング、同じレイアウト、多くの場合ほぼ同一のURL。
ステップ2:署名リクエスト。 サイトはウォレットにトランザクションまたはPermit2シグネチャーへの署名を促します。プロンプトは標準的なアプリ接続、トークンスワップ、またはエアドロップ請求のように見える場合があります。実際には、シグネチャーはドレイナーのコントラクトが被害者のトークンを移動することを承認します。
ステップ3:引き出し。 攻撃者は別のウォレットからtransferFrom()を呼び出し、承認されたトークンを引き出します。高度なドレイナーキットは、ERC-20、NFT、Permit2承認など複数のトークン転送を単一のマルチコールにまとめ、数秒でウォレットを空にします。資金は分散型取引所とクロスチェーンブリッジを通じてルーティングされ、追跡を困難にします。
重要な点:ブロックチェーンの観点からは、すべてのステップが有効で承認されたトランザクションです。被害者が承認に署名しました。コントラクトは承認されたことを実行しました。それを元に戻すプロトコルレベルのメカニズムはありません。
一部のウォレットは、ユーザーが確認する前にトランザクションとシグネチャーをシミュレートし、既知のドレイナーコントラクトや不審な承認金額にフラグを立てるようになっています。MetaMaskはBlockaidとの統合を通じてこれを行っています。これはリスクを排除するものではありません。新しいドレイナーコントラクトはまだ検出データベースに登録されていない可能性がありますが、フィッシングプロンプトとユーザーの確認の間に一層の保護を追加します。
トークン承認を確認・取り消す方法
トークン承認を取り消すとは、特定のスペンダーの許容量をゼロに戻すことを意味します。これはブロックチェーントランザクションであり、ネットワーク手数料がかかり、ウォレットで確認する必要がありますが、そのコントラクトが指定されたトークンを移動する能力を永続的に削除します。
3つの概念が重要です:
取り消すタイミング。 アプリの使用を終了し、戻る予定がない場合。不要になった無制限承認を付与した後。不審に感じたインタラクションの後(すぐに何も失われなかった場合でも)。定期的な実践として:アクティブな承認の定期的なレビューにより、目的を果たした許可を発見できます。
取り消しのコスト。 各取り消しは、独自のネットワーク手数料を持つ別のブロックチェーントランザクションです。Ethereumメインネットでは、通常数ドルかかります。レイヤー2ネットワークでは、数セントの端数になることもあります。コストは侵害された承認による潜在的な損失に比べて小さいですが、数ヶ月のDeFiアクティビティで数十の承認が蓄積された場合は積み重なります。
取り消しで解決できないこと。 承認を取り消すと、その許可の下での将来の転送が防止されます。すでに発生した転送を元に戻すことはできません。ドレイナーがすでにtransferFrom()を呼び出した場合、トークンは失われています。取り消しは予防的なものであり、修正的なものではありません。
セルフカストディアルウォレットで承認を確認・取り消すための手順については、MetaMaskのスマートコントラクトの許容量の取り消し方法を参照してください。
トークン承認リスクを軽減する方法
いくつかの実践により、DeFiインタラクションの利便性を損なうことなくリスクへの露出を減らすことができます。
オプションがある場合は限定承認を設定する。 例えば、MetaMask拡張機能は要求された承認金額を表示し、確認前にユーザーが支出上限をカスタマイズできるようにします。上限をトランザクションに実際に必要な金額に設定することで、コントラクトが後に侵害された場合の損失を制限できます。
署名プロンプトを読む。 Permit2シグネチャーには、トークン名、金額、スペンダーアドレス、期限が表示されます。「メッセージに署名する」プロンプトにトークンの詳細が表示されている場合、それはログインではなく承認です。金額が予想されるトランザクションサイズではなくユーザーの残高全体と一致する場合、それは危険信号です。
接続前にサイトを確認する。 ドレイナーサイトは正規のアプリインターフェースを複製します。信頼できるURLをブックマークし、検索結果、ソーシャルメディアのリンク、DMからではなくブックマークからナビゲートすることで、最も一般的な誘惑メカニズムを排除できます。
定期的に承認を確認する。 アクティブな承認はDeFiの使用を通じて数ヶ月で蓄積されます。ブロックエクスプローラーの承認チェッカーまたは支出上限ダッシュボードを使用した四半期ごとのレビューにより、目的を果たさなくなった許可を発見できます。
トークン承認に関するよくある質問
いいえ。ウォレットを接続すると、公開アドレスが共有され、アプリがトークン残高を読み取れるようになります。ただし、アプリがトークンを移動する権限は付与されません。トークンの承認には、別途ブロックチェーントランザクション(従来の承認の場合)または署名済みのPermit2メッセージが必要であり、いずれもウォレット上に明示的なプロンプトとして表示され、ユーザーが確認する必要があります。
いいえ。ERC-20のapprove()関数とPermit2はトークンにのみ適用され、ブロックチェーンのネイティブ通貨には適用されません。ETH(およびMATICやBNBなどの他のネイティブ通貨)は、直接送金トランザクションに署名することによってのみ移動できます。ただし、ネイティブ通貨のラップ版(WETH、WMATIC)はERC-20トークンであり、承認を通じて引き出される可能性があります。
Permit2は、従来の承認における最大の弱点—永久に残り続ける休眠状態の無制限許可—に対し、期限とnonceを追加することで対処しています。しかし、別のリスクをもたらします。無害に見えるオフチェーン署名が、大規模な送金を承認してしまう可能性があるのです。どちらのシステムが絶対的に安全とは言えません。Permit2は古い承認の悪用に対してより安全ですが、従来の承認は署名フィッシングに対してより安全です。なぜなら、従来の承認はウォレットがより目立つ形で表示するブロックチェーントランザクションを必要とするからです。
無制限のトークン承認とは、特定のトークンをウォレットから任意の金額移動する権限をスマートコントラクトに付与するもので、有効期限はありません。ほとんどのアプリは、必要なトランザクション数を減らすために、デフォルトで無制限の承認をリクエストします。リスクとして、承認済みのコントラクトが侵害された場合、攻撃者はそれ以上の確認なしにウォレット内の該当トークンの残高をすべて引き出すことができます。無制限の承認は、ユーザーが手動で取り消すまで有効のままです。