Voynich Studies拜内克 MS 408

锚点与寻找密钥

锚点阈值:破解手稿的密码需要多少已知文本

我们在一个密钥已知的模型上算了这个数。完整的密钥能读出 96.9 % 的文本。要复原它,需要大约六百个拉丁词的对齐样本。所有已知的提示,末页上的几行字、月份名称、一圈题记,都小两到三个数量级。

状态 已确立 18.10.2026

锚点阈值:破解手稿的密码需要多少已知文本
第 f1r 页。耶鲁大学拜内克图书馆(public domain)

每一个坐下来研究伏尼契手稿的人,迟早都会去找锚点:一个知道写了什么的地方。末页 f116v 和它那几行 近乎拉丁文的字。由后来的手写进黄道带的月份名称。植物旁边的题记。三十个标签组成的圆环。似乎只要抓住 一个,其余的就会被牵出来。

2026 年九月,我们算了算实际上需要多少。答案改变了项目的策略。

密钥已知的实验

我们有一个机制模型,在它上面可以做手稿上做不了的实验:用已知密钥加密 拉丁语,然后“忘掉”密钥,尝试凭给定大小的锚点把它复原。五个种子,对照通过。

弄清楚的第一件事:同音替代,即一个字母有若干种写法,不是障碍。完整的密钥能读出 96.9 % 的词次;解析 的平均歧义只有 1.5。如果密钥在手,文本几乎能整篇读出来。

障碍是锚点的体量。要复原一半的密钥,需要手稿 2 500 个完美对齐的词。要复原 80 %,需要两万个。一百个 词给出密钥的 20 %,而且是在理想条件下,没有一处对齐错误。

换算成拉丁词,考虑到密码把词膨胀 1.24-1.53 倍,2 500 个词次的阈值就是源文本的 530-660 个词。按同一 估算,手稿的全部明文是 8-10 千个拉丁词。一篇被辨认出来、放在自己位置上的五百来词的段落,能读出这 本书的 60 %。

101001 00010 000锚点大小:完全对齐的手稿词数(对数刻度)20%50%80%100%已恢复的密钥一半密钥:2500 词 ≈ 530-660 拉丁词f116v 约 8月份 约 10一圈 约 25现有的全部
锚点阈值。在模型上进行的已知密钥实验:给定大小的对齐片段能恢复多少密钥(100 词 20%,2500 词 50%,20000 词 80%)。所有已知的锚点候选——f116v 的几行字、月份名称、一圈标签——都比阈值低两到三个数量级。测试 #152。
图中数据
10020%
250050%
2000080%

手头有什么

锚点候选大小占阈值的比例
f116v 的几行字约 8 个词0.3 %
黄道带上的月份名称约 10 个词0.4 %
一圈题记约 30 个标签,各 2 个字母1 %
f1r 上的字母列(十七世纪)几十个符号不到 1 %

所有已知的候选都比阈值小两到三个数量级。追猎现实尺寸的明文线索(crib)是徒劳的,而这还是上限估计, 是在理想对齐之下。

首页 f1r:右侧可见几列字母,十七世纪一次阅读尝试的痕迹
首页 f1r:右侧可见几列字母,十七世纪一次阅读尝试的痕迹

从内部破解

如果没有锚点,剩下的是无锚点的破解:挑选密钥,使文本变得像一种语言。简单密码就是这样被破开的。 第一次尝试,还在夏天,结果是否定的:明文的字母序列在词的组成部分这一层活不下来,真正的手稿给出的 似然比打乱过的还差(每个字母 -2.95 比特,对比 -1.81)。

秋天我们造了一个更聪明的求解器,它受密钥构造的约束:六张表、三个位置、候选语言的语言模型。在同一 构造的合成文本上,它从零开始复原密钥,准确率 0.95,三次中三次。这很重要:工具是管用的。在手稿上: 似然增益 0.04-0.07,阈值 0.5。一片寂静。

我们给罕见形式的尾部加上掩码(让 30 % 的损坏词不来碍事)又做了一遍:寂静。又换了十种语言:拉丁语、 亚美尼亚语、科普特语的两种方言、古法语、加泰罗尼亚语、意大利语、古奥克语、西班牙语、中古高地德语。 在测试台检验力为两次中两次的情况下,手稿给出的是从 -0.07 到 +0.13,阈值 +0.15。对十种语言全部,这 都是对“标准模型的机制分毫不差,再加一种语言”的否定。

什么让求解器失明

这里重要的是不要高估结论。“求解器沉默”意味着两件事之一:要么语言不在名单上,要么密钥的构造与模型 不完全一样。我们检验了求解器对偏差有多宽容,答案令人清醒。

每一部分里抄写者在表中出一个错,准确率就跌到 0.20。九张表而不是六张,0.09。30 % 的字母有同音替代, 0.08。不写元音的书写、语言混用、缩写,求解器就失明。哪怕是对明文轻微的故意损坏,20 % 的情况下混淆 相似的元音、10 % 的空符,也把它压到 0.11-0.20。它唯一撑得住的是半页处更换表(0.51)。

因此,“否定”的结论对一位用六张表的细心抄写者成立。对一位粗心的,而中世纪的加密者正是这样的人,需要 一个宽容的求解器。我们正在造它:在带空符的合成文本上,宽容版本已经有了检验力(准确率 0.561),在表中 有错的情况下,三个种子中两个。下一步是按文类的词而不是按字母工作的求解器;它现在正在计算中。

这改变了什么

锚点阈值关闭了一整个方向,即寻找短小的提示,又打开了另外三个。

密钥作为实物。 六张表就是一两页羊皮纸,414 行对应关系。这样的文件是能留存下来的:从 1401 年的 曼托瓦到米兰文书处 287 把密钥的那本书。手稿的线索穿过写给 Kircher 的信件,那里记载了两件遗失的物品。 关于这一点,见《寻找密钥》。

段落。 不是一个词,不是一行,而是整篇来源文本,按条目长度的顺序辨认,这是一个能在密码下存活的量。 工具已就绪,并在 182 篇文本上检验过;关于这一点,见《第二扇门》。

正确的模型。 不是算力的极限,而是模型的极限:冗长密码的短文本容许许多同样可信的密钥,只有当密钥 模型在细节上正确时,才能选出正确的那把。寻找这些细节,就是模型的开放缺陷和宽容的求解器。

说明:以上全部关乎手稿按十项统计量所属的那一类密码。若要算成功,需要三者之一:带表的文件、被辨认 出来的段落,或者一个让求解器在手稿上给出它在合成文本上所给结果的模型。

常见问题

密码分析里的锚点是什么?

一段既知道密文写法、也知道原文写法的文本。经典的例子是签名或日期。有了锚点,就能复原密钥的一部分,再把阅读往外扩展。

为什么末页 f116v 上的几行字帮不上忙?

它们大约八个词。六张表的密钥哪怕只复原一半,所需的阈值也是手稿约 2 500 个对齐的词。即使在理想条件下,一百个词也只给出密钥的 20 %。

不能干脆用计算机穷举密钥吗?

我们做了。限定为六张表的求解器能从零开始破解同一构造的合成文本,准确率 0.95。在手稿上,它在十种语言之下保持沉默。这是信息和模型的极限,不是算力的极限。

那么什么能改变局面?

三样东西。带表的文件本身,即实物密钥。一篇被辨认出来、放在自己位置上的五百来词的来源文本。或者一个正确的密钥模型,在它之下求解器会重新起作用,我们正在做这件事。

← 全部发现