署名する前に内容を確かめる
- 執筆
- CRYPTO PORT 編集部
- 公開日
- 更新日
- 読了目安
- 6 分
結論
署名は「実行」です。何が起きるのか説明できない署名は拒否してください。多くのウォレットは署名前に資産の増減を試算して表示します。その表示と、自分が意図した操作が一致しているかだけを確認すれば十分です。
要点
- 署名前のシミュレーションは「この操作で何が出ていくか」を試算して見せる機能
- 意図していない資産が『出ていく』側に並んでいたら、その時点で中止する
- 無制限の承認、NFTの一括譲渡権限(setApprovalForAll)は特に確認する
- シミュレーションは万能ではない。結果を読めない署名は行わない
定義
取引を実行する前に、その取引がウォレットの残高や権限に与える影響を試算し、署名画面で提示する仕組み。
ブロックチェーンの取引は、署名して送信した時点で確定します。銀行のように「組戻し」を頼める相手はいません。したがって、防御の最後の一線は署名画面です。ここを読まずに承認する習慣がある限り、他の対策は迂回されます。逆に、署名画面を毎回読むだけで、資産を抜く型の攻撃の多くは止まります。
近年の主要なウォレットは、署名前に取引をシミュレートし、「このアドレスから何が出て、何が入るか」を一覧で表示します。見るべきは一点だけです。自分が意図した操作の内容と、表示されている増減が一致しているか。たとえばNFTを1点買うつもりなのに、複数のトークンが出ていく側に並んでいたら、その時点で中止してください。「無料でもらえる」はずの操作で何かが出ていくなら、それは無料ではありません。
権限の付与は特に注意が必要です。トークンの承認(approve)は残高を動かしませんが、以後あなたのトークンを動かせる権限を相手に渡します。NFTの `setApprovalForAll` は、そのコレクション全体を対象にした譲渡権限です。署名画面に「権限」「許可」「approve」「setApprovalForAll」といった語が出ていたら、相手のアドレスと対象、そして上限を確認してください。上限を指定できるウォレットなら、必要な分だけに絞ります。
シミュレーションは便利ですが、万能ではありません。実行時の状態に依存する処理や、意図的に結果を隠す設計のコントラクトでは、表示と実際が食い違う余地があります。また、単なるメッセージ署名(オフチェーン署名)は資産の増減として現れないのに、注文の委任や権限の付与になっている場合があります。最終的な判断基準は変わりません。何が起きるか説明できないなら、署名しないことです。
注意点
- · シミュレーションが「問題なし」と表示しても、それは安全の保証ではありません
- · ハードウェアウォレットを使う場合は、必ず本体の画面に表示された宛先と金額を確認してください
- · 内容を読まずに承認する習慣が、最大の脆弱性です
よくある質問
ガス代のかからない「メッセージ署名」なら安全ですか?
いいえ。ガス代がかからないのはオフチェーンで完結するためで、内容によっては注文の委任や権限の付与として機能します。表示される文面が読めない、または意味がわからない場合は署名しないでください。