发送资金前如何验证加密地址
目录
加密货币交易是不可逆的。如果您向格式错误的地址、错误网络的地址或只有一个字符被调换的地址发送资金,没有银行可以求助,没有退款可以申请。币一旦发出就不可挽回。地址验证是您的资金与永久损失之间的最后防线,然而大多数人完全跳过了它。
本指南在技术层面解释地址验证的工作原理——格式检查、校验和验证和跨链混淆检测——并向您展示如何将验证融入工作流程,使每笔出站转账在离开钱包之前都经过检查。
为什么验证能挽救您的加密资产¶
人们丢失加密货币最常见的方式不是通过复杂的黑客攻击,而是简单的人为错误:错误地复制地址、从错误的链粘贴地址,或中了剪贴板劫持恶意软件——它会悄悄地将您剪贴板中的地址替换为攻击者控制的地址。
考虑一下具体情况。Bitcoin 地址如 bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4 长达 42 个字符。Ethereum 地址包括 0x 前缀共 42 个字符。Solana 地址可达 44 个字符。这些不是人类友好的字符串。手动转录它们几乎是在自找错误,即使是复制粘贴也可能因恶意软件而出错。
验证在这些问题变成灾难之前就能捕获它们。正确的验证检查会告诉您:
- 格式是否正确? 字符串是否匹配目标区块链的预期模式?
- 校验和是否通过? 自地址生成以来是否有任何字符被更改?
- 这是正确的网络吗? 您是否正要将 Bitcoin 发送到 Bitcoin Cash 地址,或将 ETH 发送到碰巧看起来相同的 BNB Chain 地址?
每项检查在不同层级运作。它们共同形成纵深防御策略,捕获绝大多数与地址相关的错误。
格式验证:正则表达式¶
验证的第一层是结构性的。每个区块链为其地址定义了特定格式,简单的模式检查可以立即拒绝不符合的字符串。
Bitcoin 地址格式¶
Bitcoin 有三种活跃的地址格式,每种都有不同的前缀:
- 传统(P2PKH): 以
1开头,25-34 个字符。使用 Base58Check 编码。 - 脚本(P2SH): 以
3开头,25-34 个字符。同样是 Base58Check。 - 原生 SegWit(Bech32): 以
bc1q(v0)或bc1p(v1/Taproot)开头,42-62 个字符。使用 Bech32 或 Bech32m 编码。
这能立即捕获明显的非 Bitcoin 字符串,但不验证校验和。一个字符串可能完美匹配模式但仍包含拼写错误。这就是下一层的作用。
Ethereum 和 EVM 地址¶
Ethereum 地址格式更简单:0x 后跟 40 个十六进制字符。相同格式适用于所有 EVM 兼容链——Polygon、Arbitrum、Optimism、Base 和 BNB Chain。
这种简洁性既是优势也是劣势。格式容易验证,但仅从地址本身无法判断它属于哪条 EVM 链。
Solana 地址¶
Solana 地址是 Base58 编码的 ed25519 公钥,通常 32-44 个字符长,没有固定前缀。Base58 字母表排除了视觉上容易混淆的字符(0、O、I、l),减少了转录错误。
XRP 和 TRON 地址¶
XRP 使用自己的 Base58 变体,地址以 r 开头,25-35 个字符。TRON 地址以 T 开头,34 个字符,使用类似 Bitcoin 传统格式的 Base58Check 编码。
格式检查快速且低成本——可以在表单字段的每次按键时运行。但它们是最弱的验证层。格式有效的地址仍可能被损坏。您需要校验和来捕获这一点。
校验和验证:检测拼写错误¶
校验和是嵌入在地址中的一小段冗余数据,允许您验证其完整性。如果任何字符被更改,校验和将不匹配,地址应被拒绝。
Base58Check(Bitcoin 传统、TRON、XRP)¶
Base58Check 编码附加从双重 SHA-256 哈希派生的 4 字节校验和。随机错误通过此检查的概率约为四十三亿分之一(2^32)。
Bech32 和 Bech32m(Bitcoin SegWit)¶
Bech32 使用基于 BCH 码的不同错误检测方案。它可以检测任何单字符错误和大多数常见的多字符错误。Bech32m(用于以 bc1p 开头的 Taproot 地址)是一个轻微修订,修复了原始 Bech32 编码在某些边缘情况突变中的已知弱点。
EIP-55 混合大小写校验和(Ethereum)¶
Ethereum 地址是十六进制的,因此编码中没有传统校验和的空间。EIP-55 巧妙地解决了这个问题:它使用十六进制字母的大写作为校验和。每个字符根据小写地址的 Keccak-256 哈希中对应的半字节来决定大写或小写。
这就是为什么 Ethereum 地址验证器等工具同时检查格式和 EIP-55 大小写。通过两项检查的地址几乎肯定被正确转录。
Solana:无内置校验和¶
Solana 地址是没有嵌入校验和的原始 Base58 编码公钥。这意味着拼写错误可能产生一个看起来有效但不属于任何人的地址——或更糟,属于别人。您仍然可以使用 Solana 地址验证器验证格式。
跨链混淆:常见错误¶
格式和校验和验证保护您免受拼写错误。跨链验证保护您免于向正确的地址但错误的网络发送资金。
EVM 链重叠¶
最危险的跨链混淆发生在 EVM 兼容网络上。Ethereum 地址同时也是有效的 Polygon 地址、Arbitrum 地址、Optimism 地址、Base 地址和 BNB Chain 地址。
仅通过格式无法区分 EVM 地址。唯一的防御是验证钱包软件中的网络选择并在确认前双重检查链 ID。有关 EVM 地址安全的深入了解,请参阅 EVM 地址安全。
Bitcoin vs Bitcoin Cash¶
传统 Bitcoin 地址(以 1 或 3 开头)与 Bitcoin Cash 地址在语法上相同。Bitcoin Cash 引入了 CashAddr 格式(以 bitcoincash:q... 开头)以减少混淆,但许多服务仍然显示传统格式。
TRON vs Bitcoin 传统¶
TRON 地址以 T 开头并使用 Base58Check,表面上类似某些 Bitcoin 地址模式。自动化验证工具通过检查 Base58Check 负载中的版本字节来即时捕获这一点。
Solana vs 其他¶
Solana 的 Base58 地址缺乏独特的前缀,这意味着它们可能表面上类似其他 Base58 编码的地址。最好的保护是在发送前始终使用链特定工具验证地址。
SafeSeed 地址验证器¶
SafeSeed 为多个区块链提供免费的客户端地址验证器。每个验证器完全在您的浏览器中执行格式检查和(如适用)校验和验证——没有数据发送到任何服务器。
- Bitcoin 地址验证器 — 验证传统、P2SH、Bech32 和 Bech32m 格式,完整校验和验证。
- Ethereum 地址验证器 — 验证十六进制格式和 EIP-55 混合大小写校验和。
- Solana 地址验证器 — 验证 Base58 格式和字符集。
由于这些工具使用 Web Crypto API 完全在浏览器中运行,您可以在气隙机器上使用它们以获得最高安全性。有关在离线环境中生成地址的指导,请参阅离线生成 Bitcoin 助记词和离线生成 Ethereum 钱包。
将验证融入您的工作流程¶
知道验证如何工作只是一半。另一半是使其成为习惯。
每次交易前¶
- 从可信来源复制地址。 直接使用钱包应用程序,而非消息、电子邮件或网站。剪贴板恶意软件是真实且普遍的。
- 粘贴到验证器中。 通过链特定验证器运行地址以确认格式和校验和。这只需两秒钟,可以挽救数千美元。
- 目视比较前几个和后几个字符。 即使验证通过后,将粘贴地址的前 6 个和后 6 个字符与原始地址进行比较。这能捕获替换地址中间部分的剪贴板替换攻击。
- 先发送小额测试交易。 对于大额转账,先发送微量金额并确认收到,然后再发送剩余部分。交易手续费就是保险。
对于开发者¶
如果您正在构建钱包、交易所或 DApp,地址验证应在输入层强制执行。不要依赖用户自行验证地址。在按键时实施格式检查,在失焦时运行校验和验证,并在验证失败时显示清晰、明确的错误消息。
对于普通用户¶
收藏验证工具并每次都使用。没有任何交易小到或常规到不值得进行验证检查。花费的几秒钟与即使是单次误路由交易的不可逆损失相比微不足道。
地址验证不引人注目。它不是那种上头条或推动采用的功能。但它是您能做的最实用的事情来保护您的加密货币。每个地址,每次——没有例外。