承認フィッシングとは何でしょうか。秘密鍵を盗まずに資産を移す盗難手法です。攻撃者は公式そっくりのサイト(しばしば「期間限定エアドロップ」を謳う)を立て、ウォレットを接続させ取引に署名させます。「エアドロップを受け取る」つもりが、実際に署名するのは「この契約にトークンを無制限に使わせる」または「全NFTを移す」承認です。承認が有効になると、相手はあなたの知らないうちに資産を抜き取れます。その間、秘密鍵と助記詞は一度も漏れていません。
鍵が安全でもなぜやられるのでしょうか。盗難が「鍵」の層ではなく「署名」の層で起きるからです。オンチェーンのあらゆる操作は秘密鍵の署名による承認が必要ですが、ウォレットは通常、鍵自体を渡さず、ローカルで命令に署名して送ります。問題はその命令の中身です。無害な転送かもしれないし、危険な無制限承認かもしれません。攻撃者は鍵を必要とせず、危険な命令への「署名に同意」させるだけで十分です。だから鍵を守るのは基本にすぎず、すべての署名を理解することが本当の防衛線なのです。
署名が安全かどうかどう見分けるのでしょうか。3つを確認します。第一に種類:単なる「転送」か「承認」(approve / setApprovalForAll)か。承認は特に注意が必要です。第二に金額:承認される数量は具体的で妥当な数字か、それとも「無制限」か。無制限承認は最大の危険信号です。第三に対象:承認する契約アドレスに見覚えがあるか。実際に使っている正規のプロトコルか。このどれか一つでも不明瞭または違和感があれば、キャンセルしましょう。よく見るための10秒は、後で取り戻せない損失に勝ります。
多くの人は、秘密鍵と助記詞さえ漏らさなければ資産は安全だと思っています。しかしオンチェーンで最も一般的な盗難は、あなたの鍵を全く必要としません。あなたの「署名」を騙すのです。このガイドは、ウォレット署名を読み、承認フィッシングを見抜き、承認を取り消す習慣を身につける方法を教えます。
DeFiアプリに接続して取引をするとき、ウォレットは「署名」や「承認」ウィンドウを表示します。確認を押すと秘密鍵で命令に署名しますが、署名しているのが「お金を転送する」のか「契約にトークンを無制限に使わせる」のか、多くの人は読みません。攻撃者はまさにこれを悪用します。鍵を盗むのではなく、資産を移転したり承認を与えたりする取引に自ら署名させるのです。
第一はトークン承認(approve):契約がウォレット内の特定のトークンを使えるよう承認します。正規のDAppは取引のためにこれが必要ですが、悪意ある契約は「無制限」の許容額を要求し、その後いつでもそのトークンを抜き取れます。第二はsetApprovalForAllで、NFTでよく見られ、署名すると相手はコレクション全体を移せます。単なる署名に見える「署名メッセージ」も、あなたの代わりに操作を許可する許可証であり得ます。
典型的な筋書き:「期間限定エアドロップ、接続して受取」というサイトが公式そっくりの見た目で現れます。接続し「受取」を押し、表示された署名をよく読まず確認しますが、それはsetApprovalForAllや無制限approveです。数秒後、ウォレット内の該当資産が自動的に抜き取られます。その間、秘密鍵は一度も漏れていませんが、あなたは「自発的に」承認に署名したのです。
署名前に必ず立ち止まってウィンドウを読みましょう。「転送」か「承認」か。許容額は具体的な数字か「無制限」か。対象の契約アドレスに見覚えがあるか。理解できない操作や無制限承認を求める操作は、急いで署名するよりキャンセルすべきです。覚えておくこと:通常のエアドロップは承認署名を必要とせず、助記詞を求めることも決してありません。
過去に与えた承認は、自分で取り消すまで残り続けます。承認管理ツールで不要または疑わしい承認を定期的に確認し取り消すことで、「古い承認の悪用」という一連の盗難を防げます。
大口資産にはハードウェアウォレットを使い、その「クリア署名」を活用しましょう。本当に署名している内容をデバイス画面に表示し、物理的に確認する前にはっきり見えるようにし、インターフェースに騙されるのを防ぎます。日常的に対話するホットウォレットには少額だけを置き、この習慣を反射的にすれば、オンチェーンの盗難手口の9割を防げます。