理论上可能,现实中几乎不会发生。比特币私钥有大约 1.16×10⁷⁷ 种可能,地址也有约 1.46×10⁴⁸ 种,只要私钥是真正随机生成的,两个人撞上同一个地址的概率可以忽略不计。真正会导致地址“撞车”的,是随机数不够随机。
为什么离线生成的地址也不会重复?
比特币地址不需要注册,也没有中心机构检查是否重复,安全完全建立在数量级上。传统和隔离见证地址基于 160 位的公钥哈希,共有约 1.46×10⁴⁸ 个可能值。按生日悖论计算,要让全网出现任意两个地址重复的概率达到一半,大约需要生成 1.2×10²⁴ 个地址。
即使全世界 80 亿人每人每秒生成一万个地址,也要连续生成近 500 年才会接近这个数量,而且撞上的也只是两个随机地址。要撞上某个指定的地址,比如一个存有大量资金的地址,难度还要高出不知多少个数量级。
什么情况下地址真的会“撞车”?
上面的计算有一个前提:私钥是从全部可能值里均匀随机选出的。一旦这个前提不成立,可选范围就会急剧缩小,攻击者可以提前算好这些地址,一有资金进来就立刻转走。
典型的例子有三类。一是“脑钱包”,用一句话或一个密码直接算出私钥,而人想出来的句子远不够随机。二是用 1、2、3 这类有规律的数做私钥。三是钱包软件的随机数生成器有缺陷,只能产生很少的种子,椭圆曲线签名的安全风险里提到的 Profanity 就属于这一类。这些情况下“撞车”的其实是攻击者,而不是另一个普通用户。
企业怎样确保地址安全可靠?
第一是私钥或种子必须由经过审计的密码学随机数生成器产生,不自己写生成逻辑,也不使用来历不明的靓号工具。第二是密钥生成本身不应该依赖任何单一设备,MPC 的分布式密钥生成让多方各自贡献随机性,只要有一方是诚实的,结果就是随机的。
第三是每个收款地址都应能由钱包系统用公钥重新推导核对,确认它确实属于企业自己控制的密钥,而不是从外部复制而来。
结语
只要私钥真正随机,比特币地址重复的概率小到可以忽略;现实中的“撞车”几乎都来自弱随机数。企业要把重点放在密钥生成的过程上。Safeheron 的 MPC 钱包即服务为企业提供 MPC 密钥管理和策略引擎。
想让企业的密钥从生成第一天起就没有单点?