中文译本 · 原作 Daniel Bourdeau《Unsolved Historical Ciphers》 以 CC BY 4.0 发布,本页由 JIC 翻译,非原作者官方版本,译文如有出入以英文原页为准 · 查看英文原页 ↗
3 11 26 21 17 14 6 15 26 1 8 17
19 21 9 14 19 15 25 3 14 15 3
11 13 15 12 26 1 8 17 21 18

维也纳 · 数码替换密码,每个元音对应两个数码 · 1644年

Fra Giovanni di Lucca 致斐迪南三世

斐迪南三世
收信人斐迪南三世

1644年5月30日 · Österreichisches Staatsarchiv, HHStA, Staatskanzlei Interiora, Chiffrenschlüssel Kt. 20 Fasc. 27 ff. 18–19 · DECODE R2159

二百三十一个以点分隔的数码,内容为意大利语,DECODE 上没有解读;Tomokiyo 曾发表开头几个词 · 以这几个词为猜词复原了密钥,全部231个数码均已解密 · 已对照手稿核验,其明文部分指明说话人是 Koniecpolski

Daniel Bourdeau · 发布于 · 更新于

方法:外部明文复原密钥 · 范围:完整

摘要。S. Tomokiyo 的未解密码页面收录了这一条目,并附言说它“可以解读出 Al principe di trenti…”,“通晓意大利语的人应能完成解密”。他的转录似乎与这段猜词相矛盾:principe 写作 26 21 17 17 6 15 26 1,这样数码17就会在同一个词里既是 i 又是 n,而任何替换都不允许这种情况。因此第一轮工作把17(i 或 n)和19(t 或 s)当作多音替换。后来手稿图像显示,书写者带横画的4在十个码组中被转录成了17:每一个“17 = n”在原页上都是14,而17只是 i。所以二十三个数码各代表一个字母(a、e、o、u、i 各有两个数码)。剩下的数码19六次是 s,而 s 没有别的数码;有三次它出现在应为 t 的位置。原页上 Transiuania 中的两处都是19,所以证据更倾向于书写者加密时的笔误,而非转录错误。这种密码没有多音数码。密钥的复原方法是:固定猜词给出的、彼此不矛盾的八个字母,其余十六个用意大利语5-gram 模型做模拟退火:每个随机种子都得到同一个解密结果,而同样的程序作用于五个打乱的密文则一无所获。这段话向斐迪南三世转达了一项提议,时值拉科齐入侵匈牙利的那个春天:阻止土耳其人援助特兰西瓦尼亚亲王,煽动摩尔达维亚亲王起而反对他,提供两千名哥萨克,并敦促皇帝在他被挫败或被击败之前不要议和。密文周围的明文点出了说话人:大盖特曼 Stanisław Koniecpolski,在 Brody。状态:完整,已对照手稿核验(2026年9月22日)。三处笔误(19 代 t)和两处缩略拼写保留书写者原样。

01 文献

Tomokiyo 在他关于奥地利档案中变长数码代码的文章里转录了这段密文(DECODE R2159、R1408、R2179 以及一封1758年的 Starhemberg 信)。他对这一件的说明是:Fra Giovanni di Lucca 致皇帝,1644年5月30日,意大利语;“数字组可能由一位或两位数字构成,但识别单个数字组并无困难,因为各组之间以点分隔。”DECODE 的公开记录写着 Non-decrypted(档案中无解读),密码类型 Unknown,符号集为数字,两页,部分加密,日期范围是占位用的1686–1877。图像需要登录 DECODE 才能查看。第一轮的解密只依据 Tomokiyo 的转录;2026年9月22日,对照 f. 18r 的图像逐组核对了密文,把十个码组从17订正为14(§03)。下文是订正后的文本。

3 11 26 21 17 14 6 15 26 1 8 17 19 21 9 14 19
15 25 3 14 15 3 11 13 15 12 26 1 8 17 21 18 6 13 14 18 2 14 12 13 8 18 6 10 1 15 11 22 25
21 6 18 14 13 14 11 17 8 15 9 3 15 23 22 13 1 5 9 21 18 21 15 25 13 11 19 3 32 7 6 18
14 22 21 9 8 17 11 25 15 19 7 19 3 21 9 4 15 19 13 2 14 18 17 11 26 21 17 14 6 15
26 1 8 15 4 18 2 13 8 3 14 17 9 7 22 11 17 8 3 21 13 8 23 12 17 11 15 3 6 18 19
9 6 10 15 7 22 12 3 14 8 1 21 13 9 25 18 17 6 13 14 23 14 3 19 25 9 11 7 22
1 21 3 9 11 15 12 26 7 21 3 22 13 21 7 6 10 7 14 18 14 5 3 6 15 9 26 3 6 7
5 17 14 6 10 7 14 18 14 11 10 3 4 17 10 25 12 17 11 15 9 19 13 18 23 15 14
22 18
一封意大利语信件,一行明文之后是八行以点分隔的一位和两位数字
f. 18r,密文段落:它接在明文 della Religione e ragion di stato 之后,八行带点的数码,然后回到明文 tal cosa fin’ ora non è hauto effetto。这些数码解密为 Al principe di Transilvania lo impedirò con ogni modo che il Turco non li dia aiuto … principe 和 con una 中带横画的数字是书写者的4,所以这个码组是14而不是17。图片:Österreichisches Staatsarchiv, HHStA, Staatskanzlei Interiora, Chiffrenschlüssel Kt. 20 Fasc. 27 f. 18r,来自 DECODE R2159。

231个码组,24个不同的数码(1–15、17–19、21–23、25、26、32),重合指数0.050。按最初的转录,恰好有一个重复对 17 17,在同一个词里出现两次,正是它引出了下文第一轮工作的多音替换假说。在原页上,这一对是 17 14:订正后的文本根本没有重复码组,书写者只是避免写双字母(Cosachi、dumilia、habi)。

02 复原密钥

  1. 无约束的模拟退火失败了。用意大利语5-gram 模型(Villari 的 Machiavelli e i suoi tempi、I promessi sposi、La Mandragola;410万个字母,v 写作 u)的同音替换模拟退火器,从十六个随机种子出发运行。十六次全都收敛到同一个最优点, estreesitenetrentiuenieseist…,不是意大利语。求解器在一个与之匹配的231字母意大利语对照上,三个种子中有一个能复原,所以这只是说明搜索地形平坦,并不构成证明。
  2. 按原转录,这段猜词与替换密码不相容。Al principe di = 3 11 | 26 21 17 17 6 15 26 1 | 8 17。由 di,以及文中稍后的 il = 17 11 可知,17是 i;而在 principe 中,第二个17必须是 n。有八个字母不产生矛盾:3 a、11 l、8 d、17 i、26 p、21 r、1 e、19 t。
  3. 固定猜词的模拟退火。固定这八个、其余十六个数码自由,六个种子收敛到同一个解密结果,每个5-gram 为 −2.50 nats: alpriicipeditrantiuanialoimpediroconoinmodocheilturcononlidiaaiutoefaroriuoltase…:lo impedirò … che il Turco non li dia aiuto e farò rivoltare… 一个词接一个词都是意大利语,直到最后一个码组。
  4. 在未订正的转录上,有两个数码似乎各代表两个字母(见密钥后的说明)。其余保持不变时,17在 principe(两次)、manderò、con una、non、vinto 中解为 n,在 di、il、impedirò、li、lui、dumilia、finché 中解为 i;19在 Transilvania、rivoltare、sua、humiliato、vinto 中解为 t,在 Transilvania、se sarà bisogno、Cosachi 中解为 s。两者都不需要第三个值。用同一模型对这两组备选做 Viterbi 解码,可以机械地完成每一处选择,结果与人工解密一致,只有下文注明的两处例外。
  5. 对照。在同一密文的五个打乱版本上(数码相同、计数相同、固定同样的八个字母)执行固定猜词的程序,每个5-gram 只达到 −3.40 至 −3.68,而这封信为 −2.50,在227个5-gram 上相差约200 nats。第1步中无约束的伪最优点与真解密得分相同,所以模型本身挑不出答案。挑出答案的是八个猜词字母,而打乱对照表明,在这段文本上固定八个字母本身并不能凭空制造出意大利语。

03 密钥

123456789101112131415171819212223252632
egabfcedahlmoniiosrtuupr
731633131010126136132018141491484771

第三行:出现次数。数码16、20、24和27–31没有出现;文中没有 q、z 和辅音 v。排列没有字母顺序。b、g 和第二个 r 各只依据一到三次出现,所在的词放不进别的字母(bisogno、Bogdania、habbi;ogni、bisogno、Bogdania;rivoltare)。

17不是多音数码:已对照手稿核验。第一轮工作提出,每个“17 = n”可能是被转录成17的14,因为在17世纪的笔迹中4和7很接近。f. 18r 的图像解决了这个问题。书写者的4是带横画的一笔,看起来像带杠的7;他的7则是平常写法。Tomokiyo 的转录在大多数地方把带横画的4读作14,但有十处读成了17:principe 两次(26 21 17 14 6 15 26 1)、manderò(12 3 14 8)、con una(6 13 14 23 14 3)、non 两次(14 18 14)和 vinto(23 15 14 22 18)。原页上每个平常写法的17都是 i。Tomokiyo 的猜词 Al principe di 从一开始就是对的。19是 s:它六次代表 s,而 s 没有别的数码。有三次它出现在应为 t 的位置(Transiuania、rivoltare、humiliato);既然原页在 Transiuania 的两处写的是同一个数码,这些更可能是书写者本应写22时的加密笔误,而不是转录错误。19的两种用法在字形上是否有差别,尚未核查。这种密码没有多音数码。上面的密钥是订正后的:19是 s;应为 t 的三处是书写者的笔误。

04 解读

Al principe di Transil[u]ania lo impedirò con ogn[i] modo che il Turco non li dia aiuto, e farò rivoltare contra di lui, se sarà bisogno, il principe di Bog[o]dania, et li darò dumilia Cosachi, et manderò a voi con una sua lettera all’Imperatore che non faccia pace fin che non l’habbi humiliato o vinto.
至于特兰西瓦尼亚亲王:我将千方百计阻止土耳其人援助他;如有必要,我将使摩尔达维亚亲王起而反对他,并给他两千名哥萨克;我还将[他]连同他致皇帝的一封信派到您那里,请皇帝在我挫败或击败他之前不要议和。

05 背景

1644年2月,特兰西瓦尼亚亲王拉科齐·捷尔吉一世与瑞典和法国结盟,并得到高门的允许,入侵哈布斯堡治下的匈牙利。整个春天,斐迪南三世的外交都在设法让奥斯曼撤回支持,并在拉科齐的东翼寻找施压的力量。这段话是由这位修士传达的第一人称提议,提议者声称能够在高门那边做工作,能让摩尔达维亚亲王(Vasile Lupu)与拉科齐为敌,并能调遣两千名哥萨克。密文里没有说是谁在说话,但周围的明文说了。这位修士由国王从维尔纽斯派出,来到 il suo Generalissimo il Sig.re Stanislao Conespolschi,即大盖特曼 Stanisław Koniecpolski 那里。修士对他说,现在正是援助皇帝的时机,Koniecpolski“回答得如天使一般”,说他愿意,出于对奥地利王室的感情,也出于对宗教和国家理由的热忱。接下来就是密文。密文之后,修士报告说这一提议尚未生效,因为拉科齐已送了一大笔钱到君士坦丁堡,要让摩尔达维亚亲王被废黜(fatto mazul)。信的日期地点是 Brody,Koniecpolski 的驻地。Koniecpolski 与摩尔达维亚和鞑靼人有自己的往来,并在当年1月于 Ochmatów 击败了鞑靼人。(这里对明文框架作了概述,没有逐字转录。)

Fra Giovanni di Lucca(Giovanni Giuliani da Lucca),多明我会士,人们从他的 Relatione 和 Itinerario 中知道他是1620和1630年代派往鞑靼人、切尔克斯人、阿布哈兹人、明格列尔人和格鲁吉亚人中间的传教士,后来又在摩尔达维亚工作(Cristian Luca,2004,此处未查阅)。一位往来于摩尔达维亚、哥萨克地区和维也纳之间的多明我会士,正是传递这类提议会用的那种信使。

06 方法与文件

  1. 密文取自 Tomokiyo 的文章;计数、重复对和重合指数已核对(targets/lucca/ct.txt)。2026年9月22日对照 DECODE 图像订正:十个码组 17 → 14。
  2. 意大利语5-gram 模型,采用绝对折扣和插值,去除了罗马数字页码引用(targets/lucca/lm.py).
  3. 同音替换模拟退火器,先无约束运行(targets/lucca/solve.py),再固定八个一致的猜词字母运行(targets/lucca/crib_anneal.py).
  4. 按最初转录,对17在 {i, n}、19在 {t, s} 中做语言模型解码(Viterbi)(targets/lucca/decode.py).
  5. 固定猜词程序的打乱密文对照(targets/lucca/control.py).

已核查:转录计数、猜词一致性、各种子间的收敛、五个打乱对照、词层面的意大利语,以及(2026年9月22日)对照手稿图像核对每个密文码组。仅作概述:点出 Koniecpolski 的明文框架。

07 来源

分析脚本和密文都在仓库中(targets/lucca/).