Permit 署名:トランザクションではない承認

·5 分で読める·SSP Editorial Team 著
SSP アカデミー表紙:Permit 署名、トランザクションではない承認

Permit 署名:トランザクションではない承認

オンチェーンのトークン承認はトランザクションです。ガス代を支払い、コントラクトがあなたのトークンを動かす権利を得ます。トークン承認では、その権限が忘れた後もずっと有効なまま残る理由を解説しています。

Permit 署名は、同じ種類の権限をトランザクションなしで与えます。ガス代もかからず、履歴にも残らず、あるのは「署名」ボタンだけ。だからこそ、資産を抜き取る詐欺ツールが最も好んで使う手口のひとつになっています。

Permit とは

Permit は、EIP-712 規格の型付きデータ形式で書かれたオフチェーンのメッセージで、「このアドレスが、このトークンをこの量まで、この時点まで使うことを許可する」という内容です。あなたは署名するだけで、送信はしません。署名を持っている人なら誰でも、後から自分でガス代を払ってチェーンに提出でき、その時点で許可が有効になります。

よくある形式は二つです。

  • EIP-2612 Permit。 トークンのコントラクト自体に組み込まれています(多くのステーブルコインや新しいトークンが対応)。トークンが署名を検証し、通常の使用許可を記録します。approve トランザクションを送ったのとまったく同じ結果です。
  • Uniswap Permit2。 多くのアプリが任意の ERC-20 に使う独立したコントラクトです。まず Permit2 をオンチェーンで一度承認し、多くの場合その上限は無制限です。その後、アプリは署名済みの Permit2 メッセージを通じてアクセスを得ます。これらの許可はトークンではなく Permit2 の中に保存されます。

どちらもトランザクションを一回省き、アプリが「承認とスワップ」を一つの手順にまとめられるようにするものです。問題は署名の感じ方にあります。トランザクションの要求はお金が動くように見え、署名の要求はログインのように見えるのです。

なぜ詐欺師に好まれるのか

偽のエアドロップ、ミント、「報酬受け取り」ページがウォレットの接続を求め、続いて署名リクエストを表示します。署名しても何も起きないように見え、タブを閉じます。数分後、攻撃者があなたの Permit を提出して自分のアドレスを使用者に設定し、transferFrom を呼び出してトークンを持ち去ります。あなたは一度もトランザクションを送っておらず、ガス代の警告も、取り消せるものもなかったのに、残高は消えています。

確認すべき項目

型付きデータの署名リクエストが表示されたら、message 部分で次の項目を探してください。

  • spender:使用する権利を受け取る相手。よく知られたアプリのコントラクトではなく、見覚えのないアドレスなら中止してください。
  • value(または amount):数量。115792089237316195423570985008687907853269984665640564039457584007913129639935 のような巨大な数字は無制限を意味します。
  • deadline(または expiration / sigDeadline):署名をいつまで使えるか。何年も先の期限は危険信号です。
  • nonce:各署名が一度だけ使えるようにするためのカウンター。これで Permit が安全になるわけではありません。

domain.name と verifyingContract は、どのトークン(または Permit2)に対する許可かを示し、primaryType がすべてを物語ります。Permit、PermitSingle、PermitBatch、PermitTransferFrom はいずれも使用許可です。

型付きデータを求める「ログイン」ページ

本物のログインリクエストは通常、サイト名、あなたのアドレス、ランダムな値を記したプレーンテキストのメッセージです。それが何を証明するかはメッセージへの署名で解説しています。ログインに、トークンのコントラクト、使用者、数量、期限が含まれる理由はありません。

ですから、ページが「続行するにはログイン」や「ウォレットを確認」と表示しているのに、リクエストが Permit のような primaryType を持つ構造化された型付きデータなら、ログインを装った承認リクエストとして扱い、拒否してください。

Permit の取り消し

署名がすでに使われたかどうかで変わります。

  • 使用済みの EIP-2612 Permit:今ではトークン上の通常のオンチェーン許可です。他の承認と同じように、ゼロに設定して取り消します。SSP からトークン承認を取り消すで確認と削除の方法を説明しています。
  • Permit2 の許可:Permit2 コントラクトの中にあります。トークンから Permit2 への承認を取り消せば、それに依存するすべてのアプリが遮断されます。Permit2 に対応した取り消しツールなら、個別の使用者を削除することもできます。
  • 署名済みだが未使用:署名は期限まで、またはその番号が消費されるまで有効です。先にその番号をオンチェーンで消費すれば無効にできます(EIP-2612 なら自分で無害な Permit を提出する、Permit2 には番号を無効化する関数がある)が、すでに署名を持っている相手との競争になります。トークンを安全なアドレスに移す方が速いことも多いでしょう。確実な防御は、そもそも署名しないことです。

SSP は型付きデータをどう扱うか

SSP の EVM アカウントは、二台のデバイスで承認する ERC-4337 スマートアカウントであり、これが状況を変えます。

表示される内容。 SSP Wallet では、型付きデータの署名リクエスト(WalletConnect 経由)に、要求元のサイト、あなたのアドレスとネットワーク、そして整形された JSON としての EIP-712 データ全体が表示されます。Permit 専用の解読はなく、「これで某アドレスが USDC を無制限に使えるようになります」といった要約も出ないため、上記の項目は自分で読む必要があります。続いて SSP Key が、ドメイン名と primaryType を含む一行の要約(たとえば USD Coin と Permit)を表示し、生データはトグルの奥にあります。何かが署名される前に、両方のデバイスでの承認が必要です。

Permit は適用されるのか。 ほとんどの EIP-2612 Permit は ecrecover で検証されますが、これは単一の秘密鍵を持つ普通のアドレスでしか機能しないため、SSP の EVM ボールトのようなスマートアカウントはこの検証を満たせません。スマートアカウントからの Permit 型署名への対応はアプリによって異なるので、型付きデータのリクエストはすべて有効に機能するものとして扱ってください。

正直なまとめ

Permit は署名の形で渡される承認です。無料で、目立たず、誰かが提出した瞬間に残高を空にする力を十分に持っています。署名する前に使用者、数量、期限を読み、それらを含む「ログイン」はすべて疑い、もう必要のない許可は、トークン上でも Permit2 でも取り消しましょう。

SSP の二台のデバイスによる承認は確認の機会をもう一度与え、SSP Key はドメインと種類を表示しますが、どちらも Permit を代わりに解読してはくれません。読むのはあなた自身です。

この記事をシェアする

関連記事