比特币的双SHA-256是把安全性翻倍吗?

 / 
6

不是。比特币的双 SHA-256(SHA-256d)并不是把安全性"翻倍"的设计。它主要解决的是一个特定攻击面——长度扩展攻击,而不是把抗碰撞或抗预映像的难度从 2²⁵⁶ 提升到 2⁵¹² 这个量级。对于最核心的抗碰撞性,双哈希没有带来实质增益:如果单次 SHA-256 能被攻破,两次 SHA-256 同样会被攻破,难度不会因为多算一遍而翻倍。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

"翻倍"这个直觉错在哪里

安全性的"翻倍"通常指攻击者需要付出的计算量翻倍。但双哈希的构造是 SHA256(SHA256(x))。假设有人找到了两个不同的输入 x 和 y,使得第一次 SHA256(x) = SHA256(y),那么把这个相同的中间结果再送入第二次 SHA-256,输出必然也相同。也就是说,单次 SHA-256 的碰撞会直接传递为双 SHA-256 的碰撞,攻击者不需要额外做任何事。

比特币 Stack Exchange 上有一个很直接的讨论:比特币 Wiki 曾声称双哈希是为了防范生日攻击,但多位参与者指出这个说法站不住脚。如果生日攻击能对单次哈希奏效,它就能对第二次调用奏效,因为第二次调用的输入已经相同了。多算一遍并不会让碰撞搜索的难度翻倍。

双哈希真正防的是什么

比特币采用双 SHA-256 最常见的解释是防范长度扩展攻击(length-extension attack)。SHA-256 属于 Merkle–Damgård 结构,这类哈希有一个特性:如果攻击者知道 H(x) 和 x 的长度,即使不知道 x 的内容,也可能算出 H(x || y) 的哈希值。这在把哈希当作消息认证码(MAC)使用的场景下会出问题。

SHA256(SHA256(x)) 这种嵌套结构可以阻断长度扩展:攻击者拿到外层哈希后,无法利用它继续拼接数据并算出有效的哈希,因为外层哈希的输入是固定长度的 256 位摘要,不再是可变长度的原始消息。Ferguson 和 Schneier 在《Practical Cryptography》中推荐过这个构造,目的正是消除长度扩展的隐患。

不过,比特币的绝大多数使用场景——交易 ID、区块哈希、Merkle 树、工作量证明——都是对公开数据做哈希,并不涉及"用哈希保护秘密"的 MAC 场景。因此有开发者认为,双哈希在比特币里的实际收益有限,中本聪选择它更像是一种防御性习惯,而非针对某个已识别的活跃威胁。这个判断是否完全准确可以讨论,但"防长度扩展"是双哈希在密码学上有明确依据的理由,"安全翻倍"不是。

工作量证明里的双哈希意味着什么

在挖矿场景下,矿工计算的是 SHA256(SHA256(区块头)),然后看结果是否小于目标值。多算一遍确实让每次尝试的计算开销增加了,矿机需要多消耗一点算力和电力。但这不改变安全模型的性质:攻击者要伪造一条链,仍然需要找到一个满足条件的双哈希输出,其难度由目标值决定,而不是由"哈希了几次"决定。双哈希让单次尝试变贵了,但没有让"找到合格哈希"的搜索空间翻倍。

能带走的一个判断

看到"双 SHA-256"时,合理的理解是:它针对长度扩展攻击做了一层加固,而不是把比特币的密码学安全边界整体推高一个数量级。抗碰撞、抗预映像这些核心性质,仍然取决于 SHA-256 本身的强度。如果未来 SHA-256 被实质性攻破,双哈希不会成为救命稻草;比特币需要的是迁移到新哈希算法,而不是靠"多算一遍"来续命。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

参考资料

  1. Omega_Infinity_Breaks_Bitcoin_Cryptographic_Implications_of_SHA_256_Compromise_for_Cryptocurrency_Security https://zenodo.org/records/18293965/files/Omega_Infinity_Breaks_Bitcoin_Cryptographic_Implications_of_SHA_256_Compromise_for_Cryptocurrency_Security.pdf?download=1#1#2#1
  2. 腾讯云开发者社区相关讨论 https://cloud.tencent.cn/developer/ask/sof/116611439
  3. Bitcoin Stack Exchange 相关讨论 https://bitcoin.stackexchange.com/feeds/question/6037
  4. Bitcoin Stack Exchange 修订记录 https://bitcoin.stackexchange.com/revisions/41c064d9-a4e3-480e-a63d-ad36f3696fe0/view-source
  5. EPFL 图搜索相关概念 https://graphsearch.epfl.ch/en/concept/36667216#1
  6. 腾讯云开发者社区相关讨论 https://cloud.tencent.cn/developer/ask/sof/116519450?from=16139
  7. Bitcoin Stack Exchange 双哈希相关问题讨论 https://bitcoin.stackexchange.com/questions/110065/checksum-sha256sha256prefixdata-why-double-hashing/110070#comment124916_110070