跳到正文

研究指南

加密现货研究

重放域:地址相同不等于签名行动绑定同一网络

地址在两个网络相同,签名行动仍可能只属于特定重放域。调查授权时,应检查所签内容与验证方实际规则,不能用地址、钱包标签或代币符号相同,推断两对象授权同一行动。

legacy交易保护与消息签名保护要分开。EIP155解释一种交易编码,不是所有名为v的签名字段都能套的算式。

先分类签名对象

EIP155的Specification部分把链身份加入legacy交易签名载荷,并定义相应v编码;其所述规则也保留较早v为二十七或二十八的方式。研究实际交易格式和网络规则,不能把旧式签名一概判成不可能。

typed交易有自己的信封和字段;Permit是由代币合约核验的消息;任意链下文档又可能用另一套哈希约定。未确认属于相应legacy编码之前,不做这道反解。

保存原始签名载荷、解码字段、网络身份和解析器版本。浏览器显示链名是需要与字节及选定链上下文核对的解释,不能反过来用显示文字替代输入。

假设的legacy反解表

受保护legacy编码为:v等于三十五加二乘链ID,再加零或一的parity。适用该格式时,链ID可由(v减三十五)除二向下取整,余数恢复parity。

v编码链IDparity此编码下解释
三十七一零受保护legacy载荷指定链一
三十八一一同链,不同恢复奇偶位
三十九二零载荷指定链二
四十二一同链,不同恢复奇偶位
二十七或二十八不按此方式编码较早约定不把缺失链字段叫链零

第一行复算三十五加二乘一加零,等于三十七。parity换一后是三十八,不是另一条链。这些是假设解码练习,既未认证真实交易,也不证明某RPC响应来自哪条链。

常见错法是把typed交易零或一的parity也带入公式,得到没有意义的负数。这不是特殊链ID,而是选错对象格式。正确分类必须先于计算。

Permit另有域记录

ERC2612的Specification与Security Considerations描述用DOMAIN_SEPARATOR与Permit字段构造摘要,给出对合约和链唯一的域及常见构造,并提示部署时固定separator在链分裂时的风险。

取得一份Permit后,保留该代币实际使用的域字段和separator。熟悉构造可包括name、version、chainId与verifyingContract,但文档示例不表示所有实现字段和更新行为相同。

设虚构代币T的消息指定链一、验证合约T,其ECDSA签名恢复值仍可能采用二十七或二十八。这不会抹掉消息域内的链身份。相反,外层交易读到三十七,也不证明其中另一个消息具备充分重放域。

分别保留外层交易字节与Permit摘要输入。支付提交费用的交易可以正确绑定链,而消息验证具有另一组重放性质;两者不能合成一个未经说明的“已保护”标签。

不广播也能核对签名范围

按实际实现重建原摘要,固定其他字段,再对照更换链字段或验证合约地址的摘要构造。如果相关字段被正确纳入,域字节和所签摘要会改变。保存每一步使用的字节编码,而不是只记录两串显示哈希。

这是签名范围检查,不是证明替代提交在所有网络都一定成功或失败。实际验证代码、nonce、deadline、账户状态及其他资格仍需核对。研究不需要为补结果而广播行动。

可读钱包提示与解码域冲突时,保存双方。查提示是否略去字段、解析器是否套错schema,或合约是否真验证另一摘要,不能用更让人放心的显示替换实际字节。

若原始类型定义缺失,单有签名与一段文本通常不足重建摘要,应标为对象范围未核;不能通过反复尝试熟悉格式,只挑一个能恢复合理地址的结果当答案。

边界例:两个环境共用标识

链ID是命名空间的一部分,不是整条链身份的密码学证书。两个环境共用数字标识时,需要由核实链上下文和应用设计继续区分;地址与域字段恰好相同,不独自建立独立授权边界。

ERC2612关于缓存separator的提醒说明,链分裂需查具体实现。记录验证方重新构造有关域,还是继续使用存储值,不能仅凭原部署说明推今天行为。

同样要区分重放范围与资产身份。一份对某代币合约绑定正确的签名,不证明另一同符号代币有相同储备或赎回权利。那是资产来源问题,不是v值算术能够解决的事。

用单字段对照定位绑定

比较摘要时用两列工作表,第一列保留原类型内容与实际域,第二列只改一项候选边界,其余字段明确保持不变。若链和合约同时改变,即使摘要不同,也看不出究竟哪一项被绑定。单字段对照能暴露漏域,不能只因恢复出看似合理地址就宣布全部范围正确。

链字段取不到时,应标不可用,不能拿界面当前所选网络补入。用户可以签完再切换界面;决定范围的是实际签名字节和验证方域构造,当前屏幕只是背景线索,不是原始签名内容。

同样,域中的version是签名机制字段,不一定等于当前应用产品版本号。应核实现使用值,而非从页面页脚抄版本。若发现域缓存或版本变化,分别保存签名前后构造,判断旧消息是否仍按旧值验证。

对照实验输出仅说明受检查构造中一项字段如何影响摘要,不给未知自定义消息提供普遍保护认证。没有完整类型与编码规则时,最可靠下一步是取得缺失定义,而非继续换工具挑一个好看的结果。

签名范围核验表

操作保存材料防止的错误
识别格式原始信封、消息类型、解析器所有v都套legacy算式
解交易域所签链字段与恢复约定把parity当另一个网络
重建消息域实际separator及类型字段外层交易自动保护消息
匹配验证方网络、合约、历史代码用今天实现解释旧签名
另查资格nonce、时限、相关状态域匹配等于完成执行
留链上下文独立选定链身份数字ID就是完整认证

解析器更正、实现变化、链分裂或域重建冲突,都应触发复查。发布哪种签名对象在什么重放域得到核验,结论应比“链ID阻止所有重用”更窄,也不把同地址扩张成到处拥有同样权利。

常见问题

Permit的v是二十七,是否证明没有链保护?

不能。链身份可能另在消息域中,要查真实摘要与验证方。

v为三十七能把任何消息都解释成链一吗?

不能。它只适用于这里规定的受保护legacy交易编码,不适用任意消息和其他信封。

相关阅读