培根密码
发布 2026 年 10 月 17 日 · · 7 分钟阅读
弗朗西斯·培根 1605 年提出的双字母密码,是有记载以来第一次用二进制编码字母表——比任何人真正需要二进制早了三个世纪。它也是隐写术最早、最清晰的表述:秘密不在编码上(编码是公开出版的),而在于承载它的字体选择。
- 时代
- 文艺复兴
- 类型
- 替换
- 密钥空间
- fixed code, cover free
- 难度
- 野战
I现象
给每个字母分配一个由两种符号组成的五位图案。培根用的是 A 与 B;现代实验台为清晰起见用 0 与 1。以下是经典的 24 字母版本——I 与 J 共用一个图案,U 与 V 共用一个图案,因为五个二元位给出 32 个位置,而伊丽莎白时代的字母表只需要 24 个:
| 字母 | 图案 | 字母 | 图案 |
|---|---|---|---|
| A | AAAAA | N | ABBAA |
| B | AAAAB | O | ABBAB |
| C | AAABA | P | ABBBA |
| D | AAABB | Q | ABBBB |
| E | AABAA | R | BAAAA |
| F | AABAB | S | BAAAB |
| G | AABBA | T | BAABA |
| H | AABBB | U/V | BAABB |
接下来是妙处。这五个记号根本不必是字母本身。它们可以是印刷书里的两种字体:正体与斜体、大号与小号、这一款字与那一款字。培根自己举的例子,就是一段印刷文字里那个区分承载着隐藏消息,而读者永远不会注意到,因为可见的句子完全是普通散文。
本实验台把图案直接写成字面的 A 与 B,便于研读,却也毁掉了全部要点。在真实使用中,记号是看不见的那部分,散文才是看得见的那部分。
II密钥空间
映射是固定、公开的;培根本人就把它发表了。密码学意义上根本不存在密钥。
密钥是掩护文本:你选择用来藏记号的那段散文。这使空间以与本织机前面空密码相同的方式变得无界——而那种无界并无用处。
培根真正的贡献是发现了编码容量。五个二元位承载 32 个值,恰好够放下一个字母表并略有富余,而这份富余正是 I/J、U/V 合并的来源。此后每一种数字字符编码——五位博多码、七位 ASCII、八位字节、十六位 Unicode——都在容量与冗余之间做着同样的交易。
培根密码是本合集中第一个弱点不在算法、而在载体上的密码。
III加密步骤
- 把明文写成大写;若使用经典 24 字母表,把 I 并入 J、U 并入 V。
- 把每个字母转换成由 A 与 B(或 0 与 1)组成的五位图案。
- 选一段掩护文本——一封信、一页散文、一个印刷段落——长度足以给每个明文字母提供五个记号。
- 为两种符号指定一种可见的区分。印刷中:两种字体。手写中:两种字形变体,或用肉眼不可见的两种墨水。
- 按图案序列书写掩护文本,在对应位置施加区分。一路连续做下去,不要在词边界处重新开始图案。
- 寄出掩护文本。接收方读的是那个区分,而不是文字内容。
IV解密步骤
- 以区分得以保存的形式取得掩护文本——原始印本,而不是重排版或照片。
- 从头到尾通读文本,只把每个字符位置上的区分记成 A 或 B。
- 从第一个字符开始,把记号按五个一组切分。
- 在表中查每一组。
- 若消息超出了掩护文本的末尾,缺失的记号就永远丢失了——被截断的培根密码无法恢复,这也是发信方会慷慨地在掩护文本上留富余的原因。
- 注意发信方可能插入一个中性字符来调整对齐。若开头的几组解出来是乱码,就把起始位置依次后移一到四个记号再试。
V弱点
排版是脆弱的载体。 由另一家印刷厂重新排版的同一本书会完全失去那个区分。把斜体复印成正体的复印件,会无声而彻底地毁掉消息。
容量极小。 每字母五个记号且不做压缩,意味着一篇 500 词的掩护文本大约只能载 200 个秘密字符。长消息需要荒谬数量的掩护文本。
繁复性。 培根还设计过一个双侧变体,同时在两套近义密文字母表之间做选择,这使每字符的记号数翻倍、容量再减半。其复杂度使之不实用,培根自己也清楚。
现代检测很容易。 面对一份数字文本,区分两种字体是一段程序就能完成的检查,而任何没有排版理由却混用字体的文档都会立刻引起怀疑。培根的时代没有自动检测——这正是这门技术当时行得通、如今行不通的原因。
VI实战挑战
密文
BAABA AABBB AABAA ABABA ABBAB ABBAB ABABB BAAAB ABBBA AABAA AAAAA ABAAB BAAAB
提示: 使用上文的五位图案表,把 A 读作 0、B 读作 1。
展开答案
明文
THE LOOM SPEAKS
·史料
弗朗西斯·培根在《学术的进展》(1605 年)中提出了双字母密码,并在《科学的推进》(1623 年)中加以扩展。他提议把记号藏在印刷文本的两种字体里,还设计了第二套更繁复的“双侧”版本——同时在两套平行的词表之间选择。培根的动机一半是密码学的,一半是哲学的:他感兴趣的是能否有一套足够通用、可以表达任何东西的记号法,而双字母字母表正是他“任何符号集都可以归约为两种”的示范。五位编码直到 1870 年博多电报码出现才进入实用,而文本的二进制表示则要到二十世纪中叶才成为常规。
·继续读
培根密码是所有把数据藏在载体形式里的系统的祖先:空白隐写、附加在文本后的不可见 Unicode 字符,以及用于在图像与音频中嵌入数据的最低有效位方法。
它也给出了初学者最常问的那个问题最干净的答案——密码与代码有什么区别?密码变换一条消息;代码用预先约定的列表里的符号替换整条消息;隐写方案隐藏“消息存在”这一事实。培根的贡献把密码和隐写方案一起发表了,所以它虽已四百年,读起来却像现代的。
下一台织机:双分密码(Bifid)——1901 年的一支铅笔所做出的手艺密码,强度出人意料。
+相关织线
空密码(隐文)
空密码不伪装字母——它隐藏的是“哪些字母才是消息”。传输文本里的每个字符都是极其普通的字符。只有*位置*是秘密的,而不知道规则的攻击者根本没有密文可攻,只有一封谈天气的信。
猪圈密码(共济会密码)
猪圈密码把字母写成网格的碎片。两个井字框加两个 X 框恰好给出 26 个格子,于是这套密码与字母表严丝合缝、不多不少——这究竟是优雅还是巧合,取决于你怎么看待这类事。它是十八世纪共济会会所的标准私下笔迹,也出现在墓碑石…
波利比奥斯方阵
波利比奥斯发明的不是密码,而是一套*记号法*:把任何字母写成两个 1 到 5 之间的数字。这套记号法后来成了密码学史上被复用最多的想法,本合集中每一个把字母转成数字的密码,都站在它上面。