密码学科普小说 · 第 10 章

二百五十六扇门:比特币的宇宙与星空

致谢与出处:本章的核心比喻——“二百五十六扇门”“门后的小星球”“开门顺序就是钥匙”“撒面、揉面、出锅”——借鉴自科技作者史中的科普长文《比特币的宇宙与星空》(首发知乎专栏,后被浅黑科技、腾讯新闻等转载)。本章是我们为课堂教学写的原创改编,情节、人物和讲解均用我们自己的话重写。强烈推荐老师和同学去读原文。
备注:知乎原文链接 zhuanlan.zhihu.com/p/1022605981 在我们的抓取环境返回 403,我们参考的是公开转载版本。

中本聪的出租屋里,咖啡已经凉透了。Alice 坐在那张旧沙发上,盯着天花板发呆。

“Bob,我还是想不明白。”她说,“私钥到底是个什么东西?它‘藏’在哪?币又‘放’在哪?”

Bob 拉过一把椅子坐下,清了清嗓子:“我给你讲个故事。假设你下班路上捡了一个饭盒——”

“为什么是饭盒?”

“因为里面装满了金币。”

“……好的,你继续。”

一、藏哪儿都不放心

“你捡到一饭盒金币,第一反应是什么?”

“藏起来,别声张。”

“藏哪?”

Alice 掰着手指:“床底下、衣柜里、保险箱、微波炉、院子里挖个坑……”

“这些地方有一个共同点:都有可能被别人找到,只是概率大小不一样。你每天晚上都睡不踏实。中本聪要解决的第一个问题就是:能不能造一个空间,让每个人都能在里面放心地藏金币?”

“用钢筋水泥造?那得多贵啊。”

“所以他用了一种完全没有重量、也不要钱的材料——数字。”

二、二百五十六扇门

二百五十六扇门:每一扇都只有“0”和“1”两个选择01第1道01第2道01第3道01第…道01第256道 你的小星球 你的路线:1 → 0 → 1 → 1 → 0 → … (共 256 次) 这条路线,就是你的私钥。
每到一道门前,只有“0”和“1”两个选择。连续选 256 次,你会站在一颗独一无二的小星球面前。

“闭上眼睛,”Bob 说,“你抱着饭盒,面前有两扇门。左边那扇写着 0,右边那扇写着 1。随便挑一扇走进去,没有奖励也没有惩罚。”

“我选 1。”

“好。穿过 1 号门,面前又是两扇门,还是 0 和 1。再选。”

“0。”

“再选。然后再选。一直选到第 256 次。”

“然后呢?”

“然后,你面前出现了一颗星球。不大,大概就是《小王子》里那种,坐在椅子上挪一挪,一天能看好多次日落。你把饭盒往地上一放——不用埋,就大大方方摆在那——然后原路返回。”

Alice 睁开眼:“就这?没锁?”

“没锁。这颗星球本身就是锁。别人要来拿你的金币,就得走出和你一模一样的路线:256 次选择,一次都不能错。错一次,他到达的就是另一颗长得差不多、但地上空空如也的星球。”

“所以……我的‘钥匙’,就是我开门的顺序?”

“对。那串 256 个 0 和 1 组成的开门顺序,就是你的私钥。”

Alice 突然紧张起来:“那我要是忘了顺序呢?”

“那你的饭盒就永远留在那颗星球上了。别人拿不走,你也拿不走。”Bob 耸耸肩,“所以稳妥起见,最好把顺序写在纸上。而纸上写的那串东西,就成了这世界上最不能被别人看见的东西。”

三、去撞中本聪的星球?

Alice 眼睛一转:“等等。中本聪的一百万个币,不也是这样大大方方摆在某些星球上吗?那我随便乱走,万一走到他的星球上……”

“理论上可以。”Bob 说,“我们来算算概率。每道门 2 种选择,连选 256 次,一共有 2256 种不同的路线,也就是 2256 颗不同的星球。”

2²⁵⁶ 有多大? 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936 ≈ 1.16 × 10⁷⁷   (可观测宇宙原子数估计约 10⁷⁸~10⁸²) 红线:全世界所有比特币矿机加起来,跑上一亿年能试的次数(约 10³⁴ 量级)——在这条尺子上细到看不见 结论:撞中别人星球的概率不为零,但比你连中一千次彩票头奖还小得多。
2²⁵⁶ ≈ 1.16 × 10⁷⁷,和可观测宇宙里原子数量的估计值差不多是一个量级。

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),查表换成单词。

把 256 次开门顺序抄到纸上:助记词1. abandon2. river3. zebra4. cloud5. coffee6. march7. ocean8. tiger9. wheel10. lemon11. pilot12. snow13. angle14. brick15. drama16. fossil17. grape18. heavy19. index20. jungle21. kite22. mango23. nurse24. ???256 位随机数 + 8 位 SHA-256 校验和 = 264 位 = 24 段 × 11 位,每 11 位查表对应一个英文单词 (示例单词纯属演示,切勿使用。最后一个词里藏着校验和。)
24 个单词,就是你那 256 次开门顺序的“人类可读版”。

“这就是你在钱包里见过的助记词。”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. 用自己的话向家里人讲一遍“二百五十六扇门”的故事。