书本密码
发布 2026 年 10 月 2 日 · · 7 分钟阅读
书本密码用一本书取代字母表。每个字母写成一个位置——页、行、词、字——由接收方去查。这套方法不需要数学、不需要背方阵、不需要器械,因此每当人们只能依靠手边现成的东西来秘密通信时,它就会重新出现。
- 时代
- 中世纪
- 类型
- 替换
- 密钥空间
- the shared volume
- 难度
- 野战
I现象
两个人约定同一个版本。数字 14.2 表示第 14 个词的第二个字母——在更完整的约定 页.行.词 中,每个字母要用三个数字。
双方必须持有同一版本,而不仅仅是同名书。不同印次的页码不同;袖珍本与对开本对不上。这是该方法在实践中的决定性约束。
| 约定 | 写法 | 每字母位数 |
|---|---|---|
| 页.行.词.字母 | 214.07.11.3 | 8-12 |
| 行.词.字母 | 214.3 | 4-6 |
| 词.字母(固定单页) | 14.2 | 2-4 |
| 单页连续索引 | 61 | 2 |
最后一行正是本条目实验台采用的做法:用一段固定的字母串代替那一页,每个字母写成目标字符在该串中的序号。这不是真实书本密码的写法,但它暴露了这门技术所依赖的东西——双方持有一件完全相同、且带索引的实物。
II密钥空间
密钥空间是“两个人可能都拥有的书”的集合,在任何有用的意义上都不可搜索。但这不等于强。
想一想攻击者需要什么。他们需要那本书。若缴获了书,根本不需要破译——密文直接变成一张查表。若没有缴获书,他们依然可以利用一个事实:这些数字是有结构的,每组中的第一个数字在整页上变化很慢,最后一个变化很快。这种结构就是指纹。
一个以两人共有的公开物为密钥的密码,其安全等级等于通信本身的保密程度,而不是算法的保密程度。
相关的历史困难:约定的那一版用完了。军队在移动,图书馆在燃烧,而一个用不了的密码比一个能被破的密码更糟。
III加密步骤
- 与通信对象约定一个确切的版本,并把印次信息记录下来,以便双方核对。
- 选定位置约定:页、行、词、字母,或某种更简短的形式。在第一条消息之前用书面形式固定下来。
- 写出明文。去掉约定无法表达的内容——标点、数字、重音符号——或约定好拼读替代法。
- 对每个字母,在书中找到该字母的一处出现并记录其位置。
- 把位置编号连成组,用分隔符保持多位数字可读。
- 尽量别在同一条消息里对两个不同字母复用同一处出现;复用会暴露结构。
IV解密步骤
- 拿出约定的那一版,与记录核对印次信息。
- 按约定把密文切成位置组。
- 对每一组,先找页,再找行,再找词,最后找字母。
- 按序写下字母。词边界靠上下文恢复,而不是从密文中恢复。
- 若某个组得出的字母讲不通,按顺序检查两个最常见的原因:位置记错,或版本不对。先查版本,因为代价更低。
- 在野战条件下,每一百个位置大约会出现一个错误;消息长度要按这个比例来规划。
V弱点
版本不符会无声地失效。 不同印次会产生错误的字母,读起来却像说得通的乱码,而接收方无法区分“版本错了”和“传输出错了”。
数字结构会泄露。 一长串缓慢递增的首位数字告诉分析者:这里用的是基于页面的方案,并且大致能推断出页面有多长。
书的缴获是彻底而即时的。 不存在“部分破解”这种说法;整批通信会一次性变成明文。
使用既慢又易错。 在时间压力下在一本实物书里查几百个位置,必然出错。每一次重发都让攻击者拿到的材料翻倍。
不更换实物就无法轮换密钥。 换书意味着必须把新书实体送达每一个通信对象,这与名册密码的问题一样,答案也一样:改用一次一密。
VI实战挑战
密文
1 2 3 29 11 11 19 8 3 3 20 21 6 1 21 11 12 13 7 11 5 13 21 3 29
提示: 一行固定的文本就是那本书。位置是该行中从 1 开始的序号。
展开答案
明文
THE LOOM KEEPS ITS OWN COUNSEL
·史料
书本密码见于美国内战、十九世纪俄国革命者的通信,以及两次世界大战。最著名的失败案例是 1918 年的齐默尔曼电报:德国外交部长阿图尔·齐默尔曼在其中提议墨西哥对美结盟。英国海军情报处第 40 室的密码分析者此前已部分重建了德国外交密码本,一旦从墨西哥电报局取得该电报的副本,他们便能完整读出内容。那本“书”实际上已被缴获,而由此导致的披露推动美国参战。
·继续读
书本密码是本合集中最清楚地说明“密码学是系统工程问题”的一条。这里的算法是平凡的——查表。而所有失效模式都是运行层面的:采购、分发、版本控制,以及查表人员的培训。
只要知道该找什么,现代等价物很容易辨认:固件里硬编码的密钥、wiki 里的共享秘密、被复制进十二个服务里的同一个 API 令牌。算法是强的;运行模型却是一套版本控制更差的书本密码。
下一台织机:alberti-disk——第一台为“在书写过程中改变替换”而设计的器械。
+相关织线
空密码(隐文)
空密码不伪装字母——它隐藏的是“哪些字母才是消息”。传输文本里的每个字符都是极其普通的字符。只有*位置*是秘密的,而不知道规则的攻击者根本没有密文可攻,只有一封谈天气的信。
名册密码(密码本)
名册密码一半是密码,一半是字典。它照常替换字母,但同时为真正要紧的名字——国王、城市、将领、月份——单独分配编码,使攻击者最想找到的那些词恰恰保护得最好。三百年来它是欧洲外交的标准工具,而它的失效方式从来不是数学上的。
卡丹栅格
吉罗拉莫·卡丹的栅格是一张挖了孔的硬纸片。把它压在空白页上,透过孔写下消息,再把页面其余部分填满无关文字。接收方把一张完全相同的栅格压在同一页上,只读露出来的部分。它是一件以实物为密钥的置换密码,至今仍是对“密钥到底在…