跳到正文
Cipherloom密码织机

CIPHER/SUBSTITUTION/BACONIAN CIPHER

培根密码

发布 2026 年 10 月 17 日 · · 7 分钟阅读

弗朗西斯·培根 1605 年提出的双字母密码,是有记载以来第一次用二进制编码字母表——比任何人真正需要二进制早了三个世纪。它也是隐写术最早、最清晰的表述:秘密不在编码上(编码是公开出版的),而在于承载它的字体选择。

时代
文艺复兴
类型
替换
密钥空间
fixed code, cover free
难度
野战
密文栅格图版:培根密码
图版 baconian-cipher · 替换

I现象

给每个字母分配一个由两种符号组成的五位图案。培根用的是 A 与 B;现代实验台为清晰起见用 0 与 1。以下是经典的 24 字母版本——I 与 J 共用一个图案,U 与 V 共用一个图案,因为五个二元位给出 32 个位置,而伊丽莎白时代的字母表只需要 24 个:

字母图案字母图案
AAAAAANABBAA
BAAAABOABBAB
CAAABAPABBBA
DAAABBQABBBB
EAABAARBAAAA
FAABABSBAAAB
GAABBATBAABA
HAABBBU/VBAABB

接下来是妙处。这五个记号根本不必是字母本身。它们可以是印刷书里的两种字体:正体与斜体、大号与小号、这一款字与那一款字。培根自己举的例子,就是一段印刷文字里那个区分承载着隐藏消息,而读者永远不会注意到,因为可见的句子完全是普通散文。

本实验台把图案直接写成字面的 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 年的一支铅笔所做出的手艺密码,强度出人意料。

+相关织线