隐私、授权与签名安全
在 EVM 类 DApp 中,连接钱包、消息签名、交易签名和代币授权经常连续出现,但它们不是同一个权限动作。连接主要建立账户与网站之间的交互会话;消息签名用于证明身份或表达意图;交易签名产生可广播的交易;代币授权则是允许指定 Spender 使用一定范围资产的权限。无论操作是否需要 Gas、金额是否为零,都应先理解内容再确认。
一、四种动作的权限边界
动作 | 主要含义 | 是否通常记录到区块链 / 是否通常需要 | 主要风险 |
连接钱包 | 向网站提供所选公开地址、网络及发起后续请求的渠道 | 不记录到区块链 / 不需要 | 暴露地址关联信息,并可能收到后续签名请求 |
消息签名 | 为文本或结构化数据生成密码学签名 | 通常不记录到区块链 / 通常不需要 | 签名内容可能包含登录、订单或 |
交易签名 | 批准一份可提交至网络的交易或合约调用 | 广播并成功执行后,可记录到区块链 / 通常需要 | 成功执行后可能转移资产或改变合约状态 |
代币授权 | 允许指定 | 取决于创建方式 | 权限生效后, |
重要边界:代币授权是一种权限状态,不是与前三项并列的“第四种签名”。链上的 approve 交易可以创建或修改授权。Permit 消息签名本身不会立即创建链上授权;只有该签名被有效提交后,授权才可能记录到区块链。
二、连接钱包与消息签名分别意味着什么?
连接钱包
连接通常通过钱包 Provider 建立会话。标准连接请求本身不会把私钥或助记词交给网站,也不会自动替用户签名或转账;但网站可以获得用户选择公开的地址和网络,并向钱包发起后续请求。公开地址一旦被网站获知,即使断开连接,网站仍可通过区块链查询该地址的公开记录。任何网页若要求输入助记词或私钥,应立即停止操作并核验官方入口。
消息签名
消息签名常用于登录、接受条款、链下订单、投票或 EIP-712 结构化数据。消息签名通常不会把数据记录到区块链,签名者通常也不需要支付 Gas。但是,不需要支付 Gas 并不表示没有资产风险。钱包显示可读内容时,应逐项核对域名、Chain ID、verifyingContract、Spender、金额和截止时间;如果只显示无法理解的原始数据或十六进制内容,不应盲目确认。参见什么是十六进制数据 + 0 金额交易骗局?。
三、交易签名与代币授权分别何时生效?
交易签名不等于链上执行
完成交易签名后,只会得到一份已签名交易;此时区块链状态尚未改变。只有这份交易被广播到网络、写入区块并成功执行后,账户余额、合约状态或授权权限才会改变。交易可能没有被广播,也可能被替换、过期或执行失败。界面显示 0 ETH 时,只表示这笔交易没有直接附带 ETH;用户仍可能支付 Gas,合约调用也仍可能创建授权、转移代币或修改其他区块链状态。
Permit 签名不等于授权已经生效
Permit 操作通常先生成一份可提交的签名消息。生成签名时,区块链中的授权额度尚未改变。只有该签名在 nonce、截止时间等校验条件仍然有效时被成功提交,相关授权才可能记录到区块链。授权生效后,Spender 可以在授权规则、授权额度和账户余额允许的范围内发起后续调用。关于长期授权风险,参见什么是无限授权(Unlimited Approval)?。
四、一次 DApp 交互不一定包含固定四步
一次 Swap 可能只要求连接钱包和签署交易,也可能先请求登录消息、链上的 approve 交易或 Permit 签名。如果账户已有足够的授权额度,通常不会出现新的授权请求。当 Swap 使用网络原生资产,而不是 ERC-20 代币时,通常不需要代币授权。因此,不能根据“这是第几步”判断安全性,每个弹窗都应作为独立请求检查。
断开 DApp 只会结束本地连接会话,不会修改区块链中已经记录的授权。需要了解授权存放位置、有效期和撤销原则时,请阅读为什么断开 DApp 不等于撤销代币授权?。
五、确认前应检查什么?
连接:确认网站域名、账户和网络符合预期。
消息:确认请求用途,并检查可读的协议、合约、
Spender、金额和截止时间。交易:核对网络、交易类型、收款地址或合约、资产、金额及网络费。
Gas概念参见什么是 Gas?Gas Limit、Gas Price 与网络费如何计算?。授权:确认
Spender、代币、额度、适用网络和授权范围,避免不必要的无限授权。设备屏幕:以设备实际能够解析并显示的信息为准。设备不一定能完整解释所有合约字段;如果关键信息缺失、与预期不符或无法理解,应拒绝确认并返回核验。
更完整的检查清单见使用硬件钱包确认交易前,应核对哪些信息?;关于可读交易信息和钓鱼风险,见SignGuard 和 Clear Signing 如何防范 Web3 钓鱼?。
核心原则:硬件钱包可以保护签名密钥,但不能替用户判断网站、消息、交易或授权是否符合真实意图。
