密码学科普小说 · 第 10 章
二百五十六扇门:比特币的宇宙与星空
备注:知乎原文链接 zhuanlan.zhihu.com/p/1022605981 在我们的抓取环境返回 403,我们参考的是公开转载版本。
中本聪的出租屋里,咖啡已经凉透了。Alice 坐在那张旧沙发上,盯着天花板发呆。
“Bob,我还是想不明白。”她说,“私钥到底是个什么东西?它‘藏’在哪?币又‘放’在哪?”
Bob 拉过一把椅子坐下,清了清嗓子:“我给你讲个故事。假设你下班路上捡了一个饭盒——”
“为什么是饭盒?”
“因为里面装满了金币。”
“……好的,你继续。”
一、藏哪儿都不放心
“你捡到一饭盒金币,第一反应是什么?”
“藏起来,别声张。”
“藏哪?”
Alice 掰着手指:“床底下、衣柜里、保险箱、微波炉、院子里挖个坑……”
“这些地方有一个共同点:都有可能被别人找到,只是概率大小不一样。你每天晚上都睡不踏实。中本聪要解决的第一个问题就是:能不能造一个空间,让每个人都能在里面放心地藏金币?”
“用钢筋水泥造?那得多贵啊。”
“所以他用了一种完全没有重量、也不要钱的材料——数字。”
二、二百五十六扇门
“闭上眼睛,”Bob 说,“你抱着饭盒,面前有两扇门。左边那扇写着 0,右边那扇写着 1。随便挑一扇走进去,没有奖励也没有惩罚。”
“我选 1。”
“好。穿过 1 号门,面前又是两扇门,还是 0 和 1。再选。”
“0。”
“再选。然后再选。一直选到第 256 次。”
“然后呢?”
“然后,你面前出现了一颗星球。不大,大概就是《小王子》里那种,坐在椅子上挪一挪,一天能看好多次日落。你把饭盒往地上一放——不用埋,就大大方方摆在那——然后原路返回。”
Alice 睁开眼:“就这?没锁?”
“没锁。这颗星球本身就是锁。别人要来拿你的金币,就得走出和你一模一样的路线:256 次选择,一次都不能错。错一次,他到达的就是另一颗长得差不多、但地上空空如也的星球。”
“所以……我的‘钥匙’,就是我开门的顺序?”
“对。那串 256 个 0 和 1 组成的开门顺序,就是你的私钥。”
Alice 突然紧张起来:“那我要是忘了顺序呢?”
“那你的饭盒就永远留在那颗星球上了。别人拿不走,你也拿不走。”Bob 耸耸肩,“所以稳妥起见,最好把顺序写在纸上。而纸上写的那串东西,就成了这世界上最不能被别人看见的东西。”
三、去撞中本聪的星球?
Alice 眼睛一转:“等等。中本聪的一百万个币,不也是这样大大方方摆在某些星球上吗?那我随便乱走,万一走到他的星球上……”
“理论上可以。”Bob 说,“我们来算算概率。每道门 2 种选择,连选 256 次,一共有 2256 种不同的路线,也就是 2256 颗不同的星球。”
Bob 在纸上写下了那个长得吓人的数字。“大约是 1 后面跟 77 个零。你可以这么想:中本聪用数学变了个魔术,把宇宙里差不多每一个原子,都变成了一颗可以藏金币的星球。”
“那我用全世界最快的电脑,一颗一颗去试呢?”
“目前全世界所有比特币矿机加在一起,每秒大约能算几百 EH,也就是 1020 量级次哈希。就算它们全部改行帮你撞私钥,跑上一亿年,能试的次数也就 1035 左右。和 1077 比,相当于在整个太平洋里捞一个特定的水分子,而你只舀了一小勺。”
“所以概率是零?”
“不是零。”Bob 认真地说,“理论上,你第一次瞎走就撞中中本聪星球的可能性,确实存在。只是它比你连续中一千次彩票头奖还要小得多。工程上,我们把这叫做‘可以放心睡觉’。”
📌 课堂小结:熵——“瞎蒙”的难度
信息论里用“熵”来衡量一个东西有多难被猜中。256 次完全随机的二选一,就是 256 比特的熵。
关键词是“完全随机”。如果你的开门顺序是“全选 1”,或者是你生日的二进制,或者是某句名言的哈希,那它的熵就远远不到 256 比特,攻击者会优先去试这些“热门路线”。历史上真的有人用一句简单的话当“脑钱包”,币几分钟内就被别人扫走了。
四、撒面、揉面、出锅:怎么把顺序抄到纸上
“我们来真的做一次。”Bob 从兜里掏出一颗骰子(穿越的时候从教室带的)。
第一步,撒面。扔骰子:1、2、3 点记 0,4、5、6 点记 1。扔 256 次。Alice 扔到第 40 次就手酸了,抱怨这比抄课文还累。Bob 说:“这就是仪式感。你的星球坐标,是你亲手从混沌里抓出来的,没有任何人、任何程序能预测。”(当然,正规的钱包会用经过严格检验的硬件随机数发生器来做这一步。)
第二步,揉面。把这 256 个 0 和 1 喂给 SHA-256——还记得温先生那个“揉面团”的比喻吗?同样的面粉,揉出来的面团永远一样。取揉出来的结果的前 8 位,当作“校验和”,接在原来的 256 位后面,凑成 264 位。
第三步,出锅。把 264 位每 11 位切一段,正好切成 24 段。每段 11 位能表示 0 到 2047,对应一张有 2048 个英文单词的标准词表(BIP-39),查表换成单词。
“这就是你在钱包里见过的助记词。”Bob 说,“24 个单词,比 256 个 0 和 1 好抄多了。最后那个单词里藏着校验和——你要是抄错了一个词,钱包软件一算就知道不对。”
Alice 盯着那 24 个单词,心里忽然有点发毛:“所以,谁看到这 24 个词,谁就能走到我的星球上?”
“对。门没有上锁,也不需要钥匙,开门的顺序本身就是钥匙。”
五、星球的“门牌号”:公钥与地址
“可是,”Alice 又问,“别人要给我转账,总得知道往哪颗星球送吧?那岂不是要把我的开门顺序告诉别人?”
“好问题。”Bob 竖起大拇指,“每颗星球外面都挂着一块门牌。门牌是从开门顺序算出来的:私钥 × 曲线上的生成点 G,得到公钥;公钥再经过哈希和编码,得到地址。门牌可以印在名片上、贴在网上,谁都能看,谁都能往里转币。”
“那从门牌倒推出开门顺序呢?”
“做不到。这是一条单行道:从私钥算公钥,手机一瞬间就算完;从公钥倒推私钥,就是第 6 章说过的离散对数难题的椭圆曲线版本。所以——”
“所以,我要是把门牌弄丢了,只要还记得开门顺序,就能重新算出门牌!”Alice 抢答。
“完全正确。这就是 getPassKeyS 网站上‘用私钥找回公钥’那个工具在做的事。”
📌 课堂小结:一张表看懂“宇宙与星空”
| 比喻 | 真实世界 |
|---|---|
| 二百五十六扇门 | 256 比特的随机数空间 |
| 开门的顺序 | 私钥(或由助记词推出的种子) |
| 星球 | 这把私钥控制的那份“账户” |
| 星球门牌 | 公钥 / 地址 |
| 写在纸上的顺序 | 助记词(BIP-39) |
| 撒面、揉面、出锅 | 随机熵、SHA-256 校验和、切分查词表 |
注意:真实钱包通常是“助记词 → 种子 → 按 BIP-32 派生出很多把私钥”,相当于一串开门顺序能通往一整个星系,而不止一颗星球。
窗外,2008 年的夜空没有星星,只有路灯。Alice 却觉得头顶上悬着一整个宇宙,里面有 1077 颗小星球,绝大多数空空荡荡,极少数摆着别人的饭盒,静静地等着唯一记得路的那个人。
“Bob,”她说,“我奶奶记不住 24 个英文单词的。”
Bob 没有说话。他知道,下一站,就是这个问题。
📌 思考题
1. 为什么“用自己的生日或喜欢的诗句当私钥”很危险?用“熵”解释。
2. 助记词抄错一个词,钱包为什么能发现?如果恰好抄错成另一个能通过校验的组合,会发生什么?
3. 用自己的话向家里人讲一遍“二百五十六扇门”的故事。