哈希(Hash)
一句话定义: 密码学函数的输出:把任意输入压缩为固定长度的摘要。
哈希是哈希函数的输出:一种把任意大小的输入变成固定长度、貌似随机的输出的算法。比特币使用 SHA-256——不管你喂进 1 个字节还是 1 TB,输出永远是 256 位(64 个十六进制字符)。
三个性质让哈希对比特币不可或缺:
- 确定性。 同样的输入永远得到同样的哈希。
- 单向。 给定输出,没有高效办法找到产生它的输入——只能一个个试输入碰运气,期望次数约 2^256,无法想象。
- 雪崩。 输入改动一位,输出约一半的位随机改变。相似的输入产生截然不同的哈希。
比特币到处在用哈希:
- 区块头 被双重 SHA-256 哈希,结果必须低于难度目标才算有效——这正是矿工竞赛的对象。
- 每个区块引用上一个区块的哈希,串成防篡改的区块链。
- 交易被组织成默克尔树,一个根哈希概括区块内的每一笔交易。
- 地址是公钥的哈希——让你花费之前,底下的公钥一直保持私密。
- TXID 是序列化交易的哈希。
比特币下的注是:SHA-256 在可预见的未来保持单向。它若被攻破,比特币就被攻破。十六年来,作为地球上被攻击最多的密码学系统之一,SHA-256 守住了。
最可能的「削弱」(而非攻破)来自量子计算机上的 Grover 算法:它把 SHA-256 的有效安全从 256 位减半到 128 位。128 位对称安全仍是密码学其他领域的标准底线——对比特币是麻烦,不是灾难。全局视角见后量子比特币。
单向性如何变成安全,见挖矿;2^256 为什么大过直觉,见密钥空间。
相关词条: SHA-256 与挖矿算法 · 默克尔根 · Grover 算法 · Shor 算法 · 区块头