我听到有人说比特币很危险,因为输入地址时很容易打错,把钱汇给错误的人,而且没有追索权。比特币确实存在一些风险,比如丢失私钥,但地址打错并不是什么大问题。
校验和
比特币地址有多种类型。每个地址至少有 20 个字节(160 位)长,且至少有 4 个字节(32 位)的校验和。输入错误导致校验和有效的概率约为 2^ 32 分之一。
已使用地址
让我们忽略此部分的校验和。
由于地址是由加密哈希函数生成的,我们可以假设这些值在可能的地址空间中本质上是随机分布的。地址是确定性的,但出于建模的目的,随机性与随机性是一样的。
这意味着,一个实际地址的拼写错误,与一个随机输入的地址,被误认为另一个真实地址的可能性是一样的。这与英语单词不同:一个拼写错误的英语单词被误认为另一个英语单词的可能性,比随机击键被误认为另一个英语单词的可能性更大。
目前已使用的比特币地址数量约为十亿个,可能性有 2^ 160种。(实际上更多,因为有些地址长度超过 160 位。)一个随机的 160 位序列对应比特币区块链上某个地址的概率约为 1/10^ 39 。
编辑距离接近的地址
有人在 X 上用“Veni Vidi Vici”这个名字询问
那么,在这 1B 个地址中,两个地址彼此之间只需交换一个字符的概率有多大呢?
这个问题很有意思。我们假设这些地址是长度为 26 的Base58 编码字符串。地址可能更长,但假设最小长度会增加地址接近的概率。
有多少个地址的字符交换距离在一到两个字符以内?几周前我在这里回答过类似的问题。如果所有字符都是唯一的,那么在k 个字符交换距离以内的字符串数量将是
| S 1 ( 26 , 26 − k ) |
其中S 1表示第一类斯特林数。当k = 1 时,该数为 325;当k = 2 时,该数为 50,050。这里假设所有字符都是唯一的;我还没有考虑过字符重复的情况。
假设有十亿个地址,每个地址都有一百万个在某种意义上接近该地址的其他地址,这些地址可能是该地址的拼写错误。那么就有 10 ^12 个地址和拼写错误,分布在 ≈10^ 45 个(即 58^ 26 个)可能的地址空间中。
这里隐含着一个生日问题。即使允许拼写错误,任何特定的地址都不太可能与其他地址冲突,但某些地址发生冲突的可能性又如何呢?
假设我们将 10 ^45 个地址空间划分为N = 10 ^29 个地址,每个地址可能存在一百万个拼写错误。那么根据经验法则,大约需要√N 次随机抽取,才会有 50% 的概率发生冲突。由于 10 ^9远小于 10^ 14.5 ,因此即使考虑到每个地址都存在一百万个相关的拼写错误,任何两个地址发生冲突的可能性也不大。
输入错误比特币地址的概率一文最先出现在John D. Cook上。
原文: https://www.johndcook.com/blog/2025/08/28/wrong-address/