哈希函数是什么?加密货币的安全基石 图 1
哈希函数是什么?加密货币的安全基石 · 图 1

一句话理解

哈希函数把任意长度的输入映射为固定长度的输出,这个过程不可逆。在加密货币中,它承担了三件大事:把私钥变成公钥、把交易信息变成签名、把区块内容变成指纹。没有哈希,就没有密码学安全,也就没有去中心化信任。

什么是哈希函数

哈希函数(Hash Function)是一种单向数学运算:输入可以是任意长度的数据——一个字符、一张图片、一整本书——输出永远是一段固定长度的字符串。以比特币使用的 SHA-256 为例,无论输入是一个字母还是一段 10 GB 的视频,输出都是 256 位(64 个十六进制字符)的哈希值。

它有三个核心性质:

  • 确定性:同一输入永远产生同一输出,任何节点都能独立验证。
  • 抗原像性(单向):从输出几乎不可能反推出输入。即使知道哈希值,暴力破解 256 位空间在算力上不可行。
  • 抗碰撞性:找到两个不同输入产生相同输出(碰撞)的代价极高,SHA-256 需要约 2^128 次运算才有 50% 碰撞概率,远超任何现有算力。

加密货币里哪些地方在用

1. 私钥 → 公钥 → 地址

比特币中,私钥是一个 256 位随机数。通过椭圆曲线运算得到公钥,再对公钥做 SHA-256 + RIPEMD-160(或 Taproot 下的 SHA-256)得到地址。整个过程不可逆:从地址推不出公钥,更推不出私钥。这就是为什么丢失助记词等于丢失资产。

2. 交易签名与 Merkle 树

每笔交易用 ECDSA 或 Schnorr 签名,签名验证依赖哈希。区块头中的 merkleRoot 是整棵树所有交易哈希的逐层两两哈希结果,任何一笔交易被篡改都会改变根哈希,从而被全网拒绝。了解 UTXO 模型时,理解 Merkle 证明如何证明”某笔交易确实包含在这个区块里”是关键一环,可延伸阅读 UTXO 模型与账户模型的区别

3. 工作量证明(PoW)

矿工不断调整 nonce,直到区块头的 SHA-256 双哈希结果小于当前难度目标。这就是”挖矿”的数学本质:找一个让哈希前缀足够多零的 nonce。比特币约 10 分钟出块,本质是全网每秒约 700 EH/s 算力在暴力搜索。想理解算力与手续费的关系,可以对照阅读 Gas Limit 和 Gas Price 怎么区分

4. 以太坊的 Keccak-256

以太坊没有用 NIST 标准的 SHA-256,而是使用 Keccak-256(SHA-3 竞赛中未入选的原始版本)。两者输出长度相同但内部压缩函数不同,因此同一个输入在两个哈希下结果完全不同。以太坊用它计算交易哈希、账户存储哈希(Keccak-256 作用于 storage key)和合约地址(CREATE 指令)。理解 Gas 费用计算时,存储操作的成本与哈希树写入直接相关,详见 以太坊 Gas 费怎么算

常见误区

  • “哈希越安全,币越贵”:哈希是安全工具,不是价格驱动因素。BTC 和 ETH 的价格由供需、流动性、叙事等多因素决定,与哈希算法无直接因果。
  • “SHA-256 被量子计算机破解后比特币就完了”:量子计算机(Shor 算法)威胁的是椭圆曲线离散对数问题,而非哈希碰撞(Grover 算法最多把 256 位降到 128 位有效强度)。比特币社区已在讨论量子安全升级,但目前无紧迫时间表。
  • “哈希值一样就是同一笔交易”:在 256 位空间下碰撞概率可忽略不计,实际场景中若出现”哈希相同”大概率是输入相同或实现 bug,而非碰撞攻击成功。

与隔离见证(SegWit)的关系

2017 年 BIP-141 隔离见证把签名数据从区块主体移到 witness 字段,哈希计算时把签名置空。这解决了伪可扩展性攻击(signature malleability),也让比特币地址前缀从 1 变为 3 或 bc1。理解哈希如何参与 witness 的构造,是读懂 Taproot(BIP-341/342)路径验证的基础,可参考 BIP-141 隔离见证改变了什么

风险提示

本文仅为信息与教育内容,不构成任何投资建议。哈希函数是密码学基础工具,但加密货币市场整体仍存在价格剧烈波动、技术升级不确定性、监管变化等风险。请勿将本文内容作为买卖依据,操作前请独立研究并评估自身风险承受能力。