中文译本 · 原作 Daniel Bourdeau《Unsolved Historical Ciphers》 以 CC BY 4.0 发布,本页由 JIC 翻译,非原作者官方版本,译文如有出入以英文原页为准 · 查看英文原页 ↗
37 34 46 8247 5 01 8734 8760 8904 8739 8413 5 64 8 5
41 21 16 46 11 96 44 69 70 09 26 5 12 5 43 94 70 67 76
42 5 92 70 36 74 46 70 70 5 42 · di Lutzovv di

罗马 → 因斯布鲁克 · 数字名码本:两位数表示字母和音节,四位数为按字母顺序排列的代码 · 1848年6月15日

枢机主教 Soglia 致教廷大使 Viale Prelà,罗马,1848年6月15日

Soglia 枢机
发信人枢机主教 Soglia
Viale Prelà
收信人Viale Prelà

在都灵的邮路上被截获,由马志尼的 L’Italia del Popolo 于 1848年6月30日在米兰刊出,共 955 个数字,并悬赏“为这些数字的最佳解读者颁发一笔不菲的奖金” · 2014 年作为公开挑战发布在 Cipherbrain 上;那里没有人发布解读,其他地方也没有找到

密钥是仅凭密文复原的:5 是分词符,其余数字两两成对,表示字母和音节,8XXX 是按字母顺序排列的代码。除十一个码组外,一切都已解密。这份急件是一道撤销前令的命令,要教廷大使留在皇帝身边,而它写于他离开的次日。

Daniel Bourdeau · 发布于 · 更新于

方法:仅凭密文复原密钥 · 范围:完整

摘要。1848年6月30日,马志尼在米兰办的报纸刊出了庇护九世的国务枢机 Soglia 写给驻皇帝处教廷大使 Michele Viale Prelà 蒙席的一封信和一份加密急件;当时大使已随皇帝逃离维也纳前往因斯布鲁克。这两件文书于 6 月 20 日在都灵投寄,始终未能送达。报纸读不懂密码,于是悬赏;罗马将其翻印成单张;政府保持沉默;Spada 的史书(1868–69)只给出了一段转述,来源是“一位极具权威的人士”。Klaus Schmeh 于 2014 年 12 月把这张单张发布在 Cipherbrain 上,那里没有人发布解读。密钥是在这里仅凭密文复原的。这个系统是一部小型名码本:数字 5 分隔词语,由其余八个数字组成的两位数组表示字母(带同音符)和音节,以 8 开头的四位数组是一部单表代码,其值按字母顺序排列。这份急件是一道撤销前令的命令。此前一封信告诉大使,鉴于奥地利大使 Lützow 已被命令离开罗马,他也应当索要自己的护照,返回国内或前往科隆;per nuove sopraggiunte circostanze(因新近出现的情况),教皇现在要他留在因斯布鲁克的皇帝身边,无论皇帝去哪里都要跟随,关于护照的命令暂停执行。这项指示正经由三条不同的途径发出;还要出示给 Morichini 蒙席看。据 Dizionario Biografico 记载,大使已于 6 月 14 日离开因斯布鲁克前往法兰克福和科隆,那是这份急件写成的前一天。程度:完整。十个代码词根据上下文补出,并按字母顺序加以检验;十一个码组,其中包括前一封信的日期,无法仅凭这一份消息复原。

01 文献

Schmeh 发布的那张图片是 Tony Gaffney 发给他的,它不是米兰报纸本身,而是罗马的一张单张:Dispaccio del Card. Soglia. Tratto dal giornale l’Italia del Popolo 30 Giugno,由 Via Lata 的 Clemente Puccinelli 印制。评论者在一天之内就确认了那份报纸(Helmut Winkler、Hans Jahr:L’Italia del Popolo,马志尼的意大利民族协会的机关报,第一年,第 40 号)。它的前言交代了编者所知道的情况:

罗马单页印刷品的页首:Dispaccio del Card. Soglia, tratto dal giornale l'Italia del Popolo 30 Giugno,附编者前言
单张的报头和前言:“枢机主教 Soglia 致驻因斯布鲁克奥地利皇帝处宗座大使 Viale Prelà 蒙席的一封信和一份急件的忠实而极其准确的抄本。这种密码目前我们尚不知晓,故原样交给读者去满足好奇心……信件和急件虽然落款罗马,却是 6 月 20 日在都灵投寄的,收件人为……迦太基总主教 Michele Viale Prelà 蒙席,因斯布鲁克。”图像:单张 Dispaccio del Card. Soglia(罗马,Tip. Puccinelli,1848),图片来自 Tony Gaffney,经 K. Schmeh 发布于 Cipherbrain(2014年12月13日)。

随后是两份文书。第一份是一封完全明写的信,编号 6235:教皇已读过大使 5 月 27 日的两封信,赞同他应奥地利外交大臣之邀追随皇帝的决定;“指示是什么,您将从我同时发出的加密急件中得知”;不可把外交部的说法与教皇本人的意愿混为一谈。第二份是加密急件,以明写开头(“得知您已离开维也纳并迁往皇帝陛下现今驻跸的那座城市,我借此机会把这份急件寄往那里”),然后是十四行数字,中间插入一句明写(“为节省时间,您须立即出示本急件”),最后再有两行数字,署名 G. Card. Soglia,罗马,1848年6月15日。页脚写着:Un premio non tenue è destinato al migliore interprete di queste cifre。

单页上密码急件的开头:第一句明文和前六行数字
急件开头。第一行是 37 34 46 8247 5 01 8734 8760 8904 8739 8413 5,即 Con mio (foglio) del [date] … 竖线是纸张的折痕;数字上下零散的点忽略不计,解密也用不到它们。图像:单张 Dispaccio del Card. Soglia(罗马,Tip. Puccinelli,1848),图片来自 Tony Gaffney,经 K. Schmeh 发布于 Cipherbrain(2014年12月13日)。

所用的转录出自 Joe,是 2014年12月15日 Schmeh 文章下的第四条评论。我们把扫描件切成长条逐行核对,除一处外都正确:第 12 行印出的 …2251242496774740906… 漏了一个 4。改正后,全段为 955 个数字。印刷工自己犯了一个错误,下文再谈。印件中行内出现点的地方(3099.7.39、67367.067),同样忽略不计:没有它们文本照样能解密。

02 密码体系

在猜测任何密钥之前,数字中就能看出三件事。

复原出的表。行是第一位数字,列是第二位;短横表示该格在这份消息中没有出现。

01234679
0–del无kstaala
1chimin–mac–p
2glienelanche––
3quda–bmitcond
4deldiseeoalr
6ilf–persistite
7v (u)tig–ztobp
9cfldgmns

同音符:e 21、44;b 33、77;c 16、90;d 39、93;f 61、91;g 72、94;l 41、92;m 11、96;n 24、97;p 19、79;s 04、99;al 07、47。八个空格(00 13 17 27 29 32 62 73)在这份消息中没有出现。a 只有一格 09,而它是文中最常见的组(38 次)。70 是 u 和 v;双写时就是 92 70 36 74 46 70 70 Lutzovv 中的 w。

代码词和词干。8XXX 组代表整个词,或由字母补全的词干:40 20 8424 67 degli (ordin)i,19 09 04 99 09 8446 67 passa(port)i,41 21 8433 16 67 19 46 le (parte)cipo。有九个由上下文确定,无可置疑,而它们的值随字母顺序递增:

831983408374842284248429843384468620
ImperatoreistruzioneMonsignoropportunoordin-Padreparteport-Roma

这正是 Kent Ramliden 在 2015年1月7日的评论中根据 1814 年维也纳会议期间维也纳教廷大使馆的密码所描述的设计:双位数表示字母和音节,一套四位数系列表示词和人名,5 作分词符。在那里,词系列以 7 开头,双位数避开 5 和 7;而这里以 8 开头,双位数避开 5 和 8。他以 7 为标记的解析在这份文本上行不通;换成 8 就行了。

印刷错误:第一个 passaporti 印成了 19 09 05 99 09 8446 67。其中的 5 会把这个词切成两半。文中稍后的第二个 passaporti 是 19 09 04 99 09 8446 67,可见印刷工把 4 排成了 5。第 1 行 si 之后那个孤立的 8 无法解释。

03 密钥是如何复原的

  1. 简单替换失败了,而这次失败很能说明问题。以 5 为分词符,一个简单替换求解器(模拟退火,每个数对一个字母)配合意大利语、法语和拉丁语的 5-gram 模型都一无所获,在每种语言上大约都是每字符 −3.4 奈特。同一求解器又在一份合成对照上运行:一段同样长度的意大利语文本,用 68 个两位数符号作同音替换加密,分词方式相同(synth.py)。它把对照完全解了出来。所以求解器没有问题,问题在于这些数对不可能全是单个字母。
  2. 名码本求解器。下一个求解器允许每个数对代表一个字母或一个常见音节,每个数对一个值,8XXX 组则作为未知词搁置。在它的输出中,像 circostanze、intendendosi 和 indirizzata 这样的片段都是文书处行文中的完整意大利语词,任何偶然得到的密钥都不会产生这些词。
  3. 先固定词语,再手工解密。把这三个词固定下来后重新运行求解器;此后便手工逐词解密,一次一个数对,每个值都与该数对的所有其他出现位置核对。Lutzovv 和 Inspruck 从字母中自然浮现。Morichini 在最后一行拼写了出来。
  4. 代码。字母一旦确定,8XXX 组就可以被解析出来并排序:Imperatore 8319 在 istruzione 8340 之前,后者又在 Monsignor 8374 之前,如此一直到 Roma 8620。按字母顺序排列的单表代码允许根据一个未知码组落在哪两个已知码组之间来估计它的值(§05)。

04 解读

密码急件的结尾:明文句子前的最后一行密文、那句明文,以及最后两行数字
急件结尾。句号 4 结束了密码部分,随后是明写的 A risparmio di tempo dovrà con ogni sollecitudine rendere ostensibile il presente dispaccio;接着密码以 5 09 8374 5,即 a (Monsignor) 重新开始,并拼出 Morichini。图像:单张 Dispaccio del Card. Soglia(罗马,Tip. Puccinelli,1848),图片来自 Tony Gaffney,经 K. Schmeh 发布于 Cipherbrain(2014年12月13日)。

拼写已规范化(密码中把 u 写作 v,并写作 commeteva);(…) 为根据上下文补出的代码词;[8xxx] 为未复原的码组;斜体句子在印件上为明写

Con mio (foglio) del [8734][8760][8904][8739][8413] si le commetteva che in seguito degli (ordin)i dati a Sua Eccellenza il (Signor), [8227] di Lützow, di abbandonare (Roma), Ella si facesse del pari a richiedere i passa(port)i per restituirsi alla Dominante, o per condursi in (Colonia), che (è) (lontan)a della (guerra), (com)e [8704]e lo avesse creduto (opportuno). (Tuttavia) per nuove sopraggiunte circostanze Le (parte)cipo [8093][8102] del (Padre) che Ella rimanga in Inspruck presso l’(Imperatore) e ovunque egli fosse per recarsi; intendendosi sospesa la indicata delibera [8136] relativa alla domanda de’ passa(port)i: interessa [8131] a (Padre) (cotest)a nuova (istruzione), che Le viene indirizzata per tre diverse vie, (col fine di) assicurarne l’arrivo. A risparmio di tempo dovrà con ogni sollecitudine rendere ostensibile il presente dispaccio a (Monsignor) Morichini per di lui norma alle pratiche affidategli.

中文释义

我在[……]的(信)中曾指示您:鉴于已命令 Lützow 阁下(先生)[……]离开(罗马),您也应同样索要护照,以便返回首都,或者前往远离(战争)的(科隆),(如)[……]您认为(合适)的话。(然而)由于新近出现的情况,我通知您圣(父)[……],您须留在因斯布鲁克的(皇帝)身边,无论他前往何处都要跟随;上述关于索要护照的决定[……]应视为暂停执行。圣(父)[……]关心(这)项新(指示),它正经由三条不同的途径发给您,(以便)确保其送达……为节省时间,您须立即出示本急件给 Morichini (蒙席),以作为他处理所受托交涉事务的依据。

方括号以外的每一组都是用字母拼写的,解密时别无选择。La Dominante 指首都罗马。以 interessa 开头的那句话语法上不完整,其动词在未解的码组 [8131] 中或在其后;但意思很清楚。

05 按排位检验的代码词

有十个码组是根据上下文补出的:foglio、Signor、Colonia、è、lontan-、guerra、com-、Tuttavia、cotest-、col fine di。按字母顺序排列的代码允许进行一项不依赖上下文的检验。我们对九个确定的锚点拟合了一条直线:代码值对应于该词在一份 19 世纪意大利语语料中 1,500 个最常见词的排序表里的排位(斜率约为每个词 0.47 个代码值; rankfit2.py)。锚点本身在这条线周围散布10到60个值,所以容差就取这个范围。于是每个由上下文得出的读法都按自己的排位得到一个预测值:

代码读法预测值偏差
8110col(fine di)8114−4
8116Colonia8117−1
8120com(e)8122−2
8122cotest(a)8145−23
8211è8199+12
8247foglio8245+2
8310guerra8289+21
8346lontan(a)8339+7
8632Signor8596+36
8737Tuttavia8665+72

可靠锚点相对同一条线的偏差:Imperatore +24,istruzione +21,Monsignor −14,opportuno −10,ordin- −11,Padre −10,parte −18,port- −41,Roma +60。

有四个读法落在预测值上下五个值以内,另有五个落在锚点自身的散布范围内,只有一个,Tuttavia,超出了这个范围。两个最大的残差,Signor和Tuttavia,都位于最后一个可靠锚点Roma之后,而且都是正值,Roma自己的残差也是正的:在这部代码里,字母表靠后的部分比词表里更密,而这条线在越过它之后是外推出来的。这些读法彼此之间的顺序也是对的(col < Colonia < come < cotesta < è < foglio < guerra < lontano),在锚点之间的位置也是对的,而这一点单靠上下文是保证不了的。

顺序还能排除一些读法。con mio [8247] del最自然的读法是dispaccio,但一个d开头的词不可能排在8211的è之后;预测值为8245的foglio则可以。[8227]若读作Conte(后接di Lützow),就必须落在come(8120)和cotesta(8122)之间,仅凭可靠锚点也会把它放在8133附近;而8227位于e–f区间。这两处排除都依赖离它们最近的上下文读法,所以可靠程度与那些读法相当。

06 历史:晚了一天

1848年5月17日,皇帝斐迪南离开维也纳前往因斯布鲁克。教廷大使应奥地利外交大臣之邀随驾前往,并于5月27日致信罗马;与密文一同刊印的明文信,就是教皇对此的认可。当时罗马与维也纳已濒临决裂:教廷志愿军正在威尼托与奥地利人作战,奥地利大使 Lützow 伯爵在5月初就收到了护照(罗马的Gazzetta在5月9日宣布了此事),据 Agostino Chigi 亲王的日记,他于5月16日晚离开罗马。密文所提到的那份较早的指示(其日期就在未定码组里)正是教廷的答复:教廷大使也应索回护照回国,或者去科隆,远离战事。

这份密文撤销了那道指示。所谓nuove sopraggiunte circostanze是什么,密文没有说。Nisibis 大主教 Carlo Luigi Morichini 直到4月还是教皇国的财政大臣,他于5月27日以特命宗座代表的身份离开罗马,前往皇帝和查理·阿尔贝特处,6月10日夜抵达因斯布鲁克(据 Chigi);教皇希望自己的教廷大使在 Morichini 谈判期间留在皇帝身边,也希望 Morichini 看到这道命令。

这两件事都来不及了。据Dizionario Biografico degli Italiani,教廷大使于6月14日离开因斯布鲁克,以教廷代表身份前往法兰克福和科隆,9月才回到维也纳的任所。而这份急件的日期是15日。一份副本于20日在都灵寄出,始终没有到他手里;Chigi 听说它在都灵或米兰被截获了。它于30日在米兰刊出,7月5日或6日被张贴在罗马街头。7月8日,Chigi 记下:人们担心的内阁危机不会因此而起,据说教皇毫不为难地把密文部分给内阁看了。

与解读对照,前人公开的猜测有中有不中。Spada 的消息来源说,密文里是教皇对教廷大使与宫廷保持良好关系、避免被逐出之丑闻的嘉许。嘉许其实在明文信里;密文是一道命令,它要阻止的决裂恰恰是罗马自己下令的。2016年 Cipherbrain 上转述的7月7日Il Labaro猜测其内容涉及离开宫廷以及 Nisibis 主教的某种角色,这更接近真相,只是方向正好反了。

07 十一个未定码组

有十一个码组各只出现一次,上下文也无法确定它们。字母顺序给了每个码组一个窗口:它在已知值之间的位置,换算成排序词表中的一段(windows2.py,在所有锚点之间分段计算;大约±15个词)。

代码窗口上下文
8734 8760 8904 8739 8413tr–tu / venti–vo(lgente) / v之后 / tu–u / n–o较早那封信的日期:con mio foglio del …,可能是6月初的某个日期,如tre volgente,并附有一处引注
8227ess–età–ex–fail Signor, […] di Lützow;Chigi 称他为ex-ambasciatore
8704te–ticome […]e lo avesse creduto opportuno
8093 8102ch–ci / ci–coLe partecipo […] […] del Padre
8131 8136cr–da / da–darinteressa […] al Padre;delibera […] relativa

用字符模型给这些窗口里的每个候选词打分,挑出来的只有虚词(ciò、da、esse),读不出意思。8904比词表里所有的词都靠后,在这类代码里可能是z开头的词,或是数字、人名的附录。要填上这些空,需要1848年的教廷代码本,或用同一代码写成的其他信件:梵蒂冈的国务院档案和维也纳教廷大使馆档案,或者 Haus-, Hof- und Staatsarchiv 里奥地利截获的信件,Ramliden 在2015年就指出过后者。

2026年9月30日又试了一次,因为 Lasry 希望引用的段落少一些空缺。这部代码显然从8000开始:在排序词表里过Colonia(8116)和Imperatore(8319)画一条线,第一个a开头的词落在7996–8005。从8000出发,经Colonia和各可靠锚点插值,预测col在8113–8114、come在8120–8122,都正好是上下文读法所在的位置,同时也把第一对码组的范围缩小了:8093落在ce-(cenno的预测值为8093–8097),8102落在ch–ci。按文意,Le partecipo之后、del Padre之前该出现的词全都被位置排除了:volontà、mente、desiderio、ordine(8424是ordin-)、comando和commissione都排在Colonia之后,beneplacito则远在前面。Cenno(“per cenno del Santo Padre”,奉圣父之命)符合8093,但这样一来就没有哪个ch–ci开头的词能和它组成短语,所以这一对仍然空着。[8136]若读作presa(“delibera presa”),它是p开头的词,不可能位于8136;窗口在d的前段(da–dar),而且没有它,这个分句读起来也是完整的。[8131]同样在d的前段;像d’assai这样的副词(“interessa d’assai al Padre cotesta nuova istruzione”,这一新指示对圣父十分要紧)能让句子合乎语法,但那是按文意的推测(I),不是读法。用一份1,000词的意大利语词表做同样的插值,也会预测cotesta在8145–8159附近,比它在8122的位置高出23到37:这个上下文读法是c组里依据最弱的。

08 尚不确定之处

09 来源

校正后的密文(ct2.txt),带字表和代码的解码器(decode.py, key.json, codes.json),人工合成的对照(synth.py),排位拟合与窗口(rankfit2.py, windows2.py),与转录核对过的逐行图条(strips/)以及笔记都在代码库中(targets/soglia1848/)。运行 python decode.py --guess 可得到填入上下文代码词后的读法。