EIP-712签名和普通转账:哪种权限更难看懂

 / 
9

签名钓鱼和普通转账签名的权限难度根本不在一个量级。普通转账你还能看到"转出 1 ETH 到 0x...",而 EIP-712 类型化签名展示的是一堆包含ownerspendervaluenoncedeadline等字段的结构化数据,看起来像"登录验证"或"免费领取",实际可能授权了无限额度的代币转移权限。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

步骤 1:理解两种签名在"权限含义"上的本质差异

【做什么】 区分普通转账签名和 EIP-712 签名的授权范围。

【怎么做】 从签名内容看本质:

  • 普通转账签名(eth_sendTransaction:签的是一笔一次性、确定金额的转账操作。签名内容包括收款地址和金额,链上执行完这笔交易后权限就结束了。权限边界清晰且即时终止。

  • EIP-712 类型化数据签名(eth_signTypedData_v4:签的是一个可被他人提交的授权凭证。签名内容包含代币合约地址、被授权方(spender)、授权金额(value)、有效期(deadline)等字段。签名本身不产生链上交易,但任何人拿到签名后都可以在有效期内提交到链上执行转账。

【完成标准】 你能区分这两种行为:"转一笔钱给别人"和"给别人一张'随时可以从你账户扣钱'的凭证"。

常见失败原因:很多人看到钱包弹出签名请求,没显示"转出金额"就以为是安全的登录操作。实际上,EIP-712 签名可能授权的是无限额度(type(uint256).max),攻击者拿到签名后可以分多次转移你钱包里的全部代币,直到授权过期或被撤销。

高危风险:EIP-712 签名钓鱼是 2023-2025 年间最主要的 Web3 钓鱼模式,已取代传统的助记词钓鱼。攻击者只需要你签一个看起来像"登录验证"的消息,就能在不接触你私钥的情况下清空钱包。钱包本身无法阻止你签署恶意签名,只能在显示层面帮你解码 EIP-712 的原始内容让你自己判断。

步骤 2:在钱包弹窗中核验 EIP-712 签名的关键字段

【做什么】 不盲目点击"签名",而是在钱包弹窗中逐项核验结构化数据。

【怎么做】 当钱包弹出 EIP-712 签名请求时,查看详情页,重点核验以下字段(以 Permit2 钓鱼签名为例):

  • spender(被授权方):确认这个地址是不是你正在交互的 DApp 的官方合约地址。如果是一个你不认识的地址,停止签名。

  • value(授权金额):如果显示 type(uint256).max 或一个非常大的数字,说明是无限额度授权——签署意味着对方可以多次转走该代币的全部余额。

  • deadline(有效期):如果这个时间戳很远,签名在很长的窗口期内都有效,风险窗口更大。

  • token / contract(代币合约):确认正在授权的代币是你愿意授权的那个,而不是冒名代币。

【完成标准】 你确认了签名请求中的 spender 是可信地址、value 是合理金额而非无限授权、且 deadline 在合理范围内。

高危风险:如果签名请求中的 deadline 字段缺失或被设为 0,签名理论上是永不过期的。攻击者可以在捕获签名后的任意时间提交并执行转账。部署钓鱼合约时,攻击者常故意忽略或错误实现过期检查,将签名设置为永久有效,从而在任何时间点发动攻击。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

步骤 3:执行"签名安全"的防御性操作

【做什么】 在无法判断签名意图时,不签署,并通过授权管理工具关闭风险敞口。

【怎么做】

  • 不签署来源不明的 EIP-712 签名:特别是"免费领取"、"验证钱包"、"修复漏洞"等场景的签名请求。

  • 使用授权扫描工具检查当前授权状态:打开 Revoke.cash 连接钱包,检查是否存在对陌生 spender 的高额授权或无限授权。

  • 撤销可疑授权:对存在风险的授权条目执行撤销操作(Revoke),阻断攻击路径。撤销操作本身需要一笔链上交易并支付 Gas 费,但这是必要的防御成本。

操作完成的校验方式:在 Revoke.cash 上确认所有可疑授权已被撤销,列表中没有不认识的 spender 地址。如果在钱包中确认了一笔可疑的 EIP-712 签名(即已经签署),即使当前没有发生损失,也建议立即在 Revoke.cash 上撤销对应的授权作为补救措施。