什么是签名验证器?
签名验证器接收一条消息、一个数字签名和一个公开身份(地址或公钥),然后告诉你该身份是否确实对这条消息(且仅对这条消息)生成了这个签名。在以太坊上,这一检查通过恢复完成:secp256k1 允许你根据签名和消息哈希计算出签名者的公钥,再将其哈希为地址并进行比对。Solana(ed25519)以及比特币的 SegWit 与传统消息格式采用同样的思路,只是哈希规则不同。本页在浏览器中、仅凭公开数据实现了当今钱包使用的这四种约定。
支持的签名类型
| 类型 | 标准 | 被签名的摘要 | 曲线 | 输出 |
|---|---|---|---|---|
| 以太坊 personal_sign | EIP-191(版本 0x45) | keccak256("\x19Ethereum Signed Message:\n" + length + message) | secp256k1 | 恢复出的地址、匹配标记、消息哈希 |
| 以太坊类型化数据 | EIP-712(eth_signTypedData_v4) | keccak256(0x1901 ‖ domainSeparator ‖ hashStruct(message)) | secp256k1 | 域分隔符、结构体哈希、摘要、恢复出的签名者 |
| Solana signMessage | RFC 8032 Ed25519 | EdDSA 方程内部的 SHA-512,无前缀 | ed25519 | 有效 / 无效 |
| 比特币签名消息 | BIP-137(Bitcoin Core signmessage) | SHA-256d("\x18Bitcoin Signed Message:\n" + varint(len) + message) | secp256k1 | 恢复出的公钥、派生地址、是否匹配 |
以太坊签名恢复的原理
ECDSA 签名是一对数值 (r, s)。给定 32 字节摘要和恢复 id v,候选公钥至多有两个,v 决定选哪一个。工具按所选标准计算摘要,恢复出 64 字节公钥,取其 Keccak-256 哈希的最后 20 字节得到地址,若你提供了预期地址则再与之比对。由于地址是推导出来的而非查询得到的,匹配即证明签名时持有该私钥,无需任何链上数据。
实例演示:EIP-712 Mail
点击上方的“EIP-712 Mail”。该类型化数据来自 EIP-712 规范中的示例:域 Ether Mail、版本 1、链 ID 1,验证合约为 0xcccc…cccc,以及一个由 Cow 发给 Bob、内容为 “Hello, Bob!” 的 Mail 结构体。工具会显示域分隔符 0xf2cee375…、结构体哈希 0xc52c0ee5… 和最终摘要 0xbe609aee…,与规范参考实现打印的值完全一致,然后恢复出所附签名的签名者。把 “Hello, Bob!” 改动一个字符,恢复出的地址就会完全不同——这正是对结构化数据签名的意义所在。
解读比特币消息签名
base64 签名的第一个字节同时编码了恢复 id 和签名者预期的地址类型:27–30 表示使用未压缩公钥的 P2PKH,31–34 表示使用压缩公钥的 P2PKH,35–38 表示 P2SH 封装的 SegWit,39–42 表示原生 SegWit(bc1q)。工具恢复公钥后会派生出全部四种地址形式,并报告哪一种与你提供的地址匹配。Electrum 及其他一些钱包对 bc1q 地址签名时使用 31–34 的头字节;这种情况会被接受并附注说明,而不是拒绝。测试网地址(m…、n…、2…、tb1q…)通过前缀识别。
常见用途
- Sign-In with Ethereum / 钱包登录:在后端接受客户端发来的签名之前,确认它确实属于其声称的地址。
- Permit 与 Permit2 授权:粘贴 dApp 要求你签名的类型化数据,查看签名实际绑定的域、spender 和 deadline。
- 地址所有权证明:交易所和 OTC 柜台会要求你用充值或提现地址签署一条消息;在信任之前先在这里验证。
- 调试:将本页显示的哈希与你的库计算出的结果比对,找出前缀、编码或 chainId 方面的错误。
接受的输入格式
- 以太坊签名:v = 0、1、27 或 28 的 65 字节十六进制,或 64 字节 EIP-2098 紧凑签名;可带或不带 0x。
- 消息:UTF-8 文本,或签名者对原始字节哈希时使用的十六进制字节;Solana 还接受 base64。
- Solana 签名:base58(Phantom 和 Solflare 的返回格式)、base64 或十六进制;公钥为 base58 地址或 32 字节十六进制。
- 比特币签名:signmessage 生成的 base64,或同样 65 字节的十六进制形式。
相关工具:用哈希工具自行计算消息的 Keccak-256,用 EIP-55 转换器修正地址校验和,或用以太坊交易解码器解码使用了该签名的交易。