← 返回博客

SHA256 在区块链中的作用

2026-04-13 · 5 分钟阅读

比特币选择 SHA256 的原因

中本聪在设计比特币时选择 SHA256 作为核心哈希函数,原因是:SHA256 当时已被 NIST 广泛采用并充分审计,具有极强的抗碰撞性和单向性;SHA256 的输出均匀分布,非常适合用作工作量证明的目标;SHA256 在硬件实现上效率较高(后来确实有了专用 SHA256 ASIC 矿机);以及 SHA256 的 256 位输出在可预见的未来具有足够的安全边际。

工作量证明(PoW):SHA256 的核心用途

比特币的工作量证明机制是 SHA256 最重要的应用:矿工需要找到一个 nonce(随机数),使得区块头的双重 SHA256 哈希值(SHA256(SHA256(block_header)))小于当前难度目标。难度目标要求哈希值以一定数量的零开头,例如:

/* Block header structure */
version: 4 bytes
previous_block_hash: 32 bytes (SHA256 hash!)
merkle_root: 32 bytes (SHA256 hash of all transactions!)
timestamp: 4 bytes
difficulty_bits: 4 bytes
nonce: 4 bytes (miner changes this!)

/* Mining goal */
SHA256(SHA256(block_header)) must start with N zeros:
0000000000000000000329827...  (many leading zeros)

/* Miner tries billions of nonce values until one works */

SHA256 如何连接区块

区块链之所以"链",正是因为每个区块头包含了前一个区块头的 SHA256 哈希值(Previous Block Hash)。如果有人试图修改历史区块中的任何数据,该区块的哈希值就会改变,导致下一个区块中记录的 Previous Block Hash 不再匹配,进而使整条链的哈希验证失败。这就是为什么区块链难以篡改——修改历史需要重新挖掘从被修改区块开始的所有后续区块。

交易 ID 和 Merkle 树

每笔比特币交易都有一个 TXID(交易 ID),它是对交易数据进行双重 SHA256 哈希的结果。一个区块中的所有 TXID 通过 Merkle 树结构汇总:两两哈希,直到得到单一的 Merkle 根哈希,这个 Merkle 根被包含在区块头中。

/* Merkle tree structure (simplified) */
Transactions: T1, T2, T3, T4

Leaf hashes:
H1 = SHA256(SHA256(T1))
H2 = SHA256(SHA256(T2))
H3 = SHA256(SHA256(T3))
H4 = SHA256(SHA256(T4))

Level 2:
H12 = SHA256(SHA256(H1 + H2))
H34 = SHA256(SHA256(H3 + H4))

Merkle Root:
Root = SHA256(SHA256(H12 + H34))

比特币地址生成与 SHA256

比特币地址的生成过程也大量使用 SHA256:从私钥(随机数)→ 公钥(椭圆曲线点乘)→ SHA256(公钥) → RIPEMD-160(上述结果) = 公钥哈希(160 位)→ 添加版本字节 → SHA256(SHA256(带版本字节)) 取前 4 字节作为校验和 → Base58 编码 = 比特币地址。这个过程使用了 SHA256、RIPEMD-160 和 Base58 的组合,称为 HASH160 和 HASH256。

以太坊使用的是 Keccak-256,而非 SHA256

值得注意的是,以太坊(Ethereum)选择了 Keccak-256 而非 SHA256。Keccak-256 是 SHA-3 标准的原始提案版本(在 NIST 标准化时进行了细微修改,因此以太坊使用的 Keccak-256 与 SHA3-256 并不完全相同)。以太坊的地址生成、交易哈希等都使用 Keccak-256。在 Web3 开发中,这是一个容易混淆的细节——调用 keccak256() 而非 sha256()

SHA256 在其他区块链中的使用

除比特币外,许多其他区块链和相关系统也使用 SHA256:Bitcoin Cash、Bitcoin SV 等比特币分叉;大多数工作量证明的 PoW 算法(包括 Litecoin 的 Scrypt 也用到了 SHA256);IPFS 的内容标识符(CID)使用 SHA256;SSL/TLS 证书链的哈希。SHA256 之所以成为事实上的区块链哈希标准,在于其经过了二十多年的密码学审计而没有发现实际漏洞。

立即免费使用相关工具

免费使用 →