连钱包登录不等于转账:ERC-4361 的 SIWE 消息怎么读 图 1
连钱包登录不等于转账:ERC-4361 的 SIWE 消息怎么读 · 图 1

连钱包登录不等于转账:ERC-4361 的 SIWE 消息怎么读

“用钱包登录”在多数 dApp 里指的是签一条消息而不是发一笔交易——地址上链归链上,登录验证靠签名。ERC-4361(Sign-In with Ethereum)给这条登录消息定了格式,状态为 Final(最终标准),创建于 2021 年 10 月 11 日,依赖 ERC-55、ERC-137、ERC-155、ERC-191、ERC-1271 等。本文按标准讲字段与防守,不构成任何操作建议。

一条消息里的九类信息

标准定义了必填与选填字段。必填的有:domain(发起登录的域名,登录防钓鱼的核心字段)、address(你要用来登录的地址,按 ERC-55 大小写校验)、uri(这条登录对应的资源地址)、version(消息格式版本,当前必须是 1)、chain-id(会话绑定的 EIP-155 链号)、nonce(至少 8 位字母数字的随机串,专治重放)、issued-at(RFC 3339 格式的签发时刻)。选填的有 statement(给人看的一句话,禁止换行符)、expiration-timenot-before(有效期窗口)、request-idresources 列表。

连钱包登录不等于转账:ERC-4361 的 SIWE 消息怎么读 图 2
连钱包登录不等于转账:ERC-4361 的 SIWE 消息怎么读 · 图 2

这套字段各自防什么

domain 必须与浏览器地址栏一致——登录钓鱼的常见剧本就是把域名换成仿冒站,签名却照签不误;服务端会拒绝域名对不上的消息,所以看到弹窗里的域名与当前网址不一致,立刻停手。nonce 让同一份签名不能重复提交:服务端只接受一次性随机串。expiration-timenot-before 给会话上时间围栏。整条消息走个人消息签名,不上链、零 Gas——这是它与任何交易签名最直观的区别。

登录签名会不会被拿去干别的

不会直接生效:签名的哈希内容里锁死了域名、nonce 和有效期,验证方又必须核对这些字段,签名本身不携带任何转账指令,也没有授权额度。真正的风险在面板本身:钓鱼站会把转账或授权签名的文字伪装成”登录”话术。识别办法不是看标题文字,而是看签名类型——钱包对 EIP-4361 消息会展示完整可读字段(域名、nonce、有效期),而交易签名会显示目标合约、金额或批准项。两者长得不一样。

日常使用清单

  1. 弹窗里逐字对域名、协议、有效期;缺 expiration-time 的长期会话权限能拒就拒。
  2. 用硬件钱包或能逐字段核对的钱包核对整段文本,别只看”登录”两个字。
  3. 高价值主地址尽量别在陌生站点登录;登录虽不动资产,却会暴露地址画像与历史行为。
  4. 站点声称支持 SIWE 却只弹一段乱码式哈希,说明未实现标准格式,谨慎对待。

服务端与合约地址登录两种形态

标准覆盖了两种验证场景:验证外部账户地址时用 ecrecover 类个人签名恢复;若登录身份是 ERC-1271 合约账户(多签、智能钱包),验证方要调用该合约的 isValidSignature,并按 chain-id 指向的链去解析合约——字段里的链号因此不只是装饰,它规定了合约账户在哪条链上被解析。整场交互都是链下的:签名发给站点服务器,验证通过发回会话凭据,全程没有交易、没有 Gas、没有上链记录。反过来说,这也意味着”登录成功”不产生任何链上凭证,维权与追溯都发生在 web2 侧。

会话结束之后该做什么

签过的 SIWE 消息不产生链上授权,但它把”这个地址访问过这个站点”留在了站点的日志里。清理动作相应分两边:链上无须撤销(本来就没授权),钱包侧也无须专门操作;值得养成的是检查站点会话列表的习惯,以及在钱包的签名历史里认出哪些是登录消息——它们格式规整、字段齐全,与授权类签名肉眼可分。

签名类型与字段核对是链上登录的第一道防线,任何要求你”签一下就行”的场景都值得多看三眼;本文仅为科普与防御指引,不构成投资建议。