密码学科普小说 · 第 8 章
数据的指纹:哈希函数
穿越机好像出了点故障,这次把他们扔回了温先生的磨坊。温先生正在为一件事发愁:县里的粮仓账本,每个月都有人偷偷改一两行,却怎么也抓不到。
“我总不能把整本账抄一份藏起来,每个月逐字比对吧?”温先生说,“那得比对到猴年马月。”
Bob 想了想:“如果有一种办法,能把整本账压缩成一小串‘指纹’,账本改了一个字,指纹就完全变样——您只要藏好这串指纹,每个月比一比指纹就行了。”
这就是密码学哈希函数。Bob 列了它的几个特点:
第一,输入多长都行,输出长度固定。SHA-256 不管你喂给它一个字还是一整部《红楼梦》,都吐出 256 个比特(写成 64 个十六进制字符)。
第二,雪崩效应。输入改动一个比特,输出大约一半的比特都会变。“八点”改成“九点”,指纹完全认不出来。
第三,单向。给你一串指纹,你没办法倒推出原文是什么。
第四,抗碰撞。你几乎不可能找到两段不同的内容,算出同一个指纹。
温先生听完拍案叫绝:“好比揉面!面粉、水、鸡蛋,揉成一个面团。同样的料,揉出来的面团一模一样;少放一粒盐,面团就不一样了。可你拿着面团,没法把鸡蛋再揉回来。”
Alice 笑了:“温先生,您这个比喻可以去写科普了。”
📌 课堂小结:哈希在比特币里干什么?
1. 防篡改的链条:每个区块都记录上一个区块的哈希。改了历史上任何一个区块,它后面所有区块的“上一块哈希”都对不上了。
2. 工作量证明(挖矿):矿工不停地换一个随机数,直到区块头的哈希值小于某个目标值。没有捷径,只能硬算。
3. 地址:地址是公钥经过 SHA-256 和 RIPEMD-160 等哈希、再编码得到的。
4. 助记词校验:第 10 章你会看到,助记词最后几个比特就是用 SHA-256 算出来的“校验和”。
⚠️ 哈希不是加密:它没有“解密钥匙”。用哈希存密码时要加盐、用慢哈希(如 bcrypt、Argon2),GreyPass 就是这么做的。
当天晚上,温先生用 Bob 教的“手算简化版哈希”给账本算了指纹,刻在一块石头上,埋在了自家院子里。下个月,账本又被改了一行,指纹一比就露了馅。偷改账本的人,正是当初只认红包的那个官差。
📌 思考题
1. 哈希和加密最大的区别是什么?
2. 为什么网站数据库被盗时,“密码明文”比“密码哈希”危险得多?