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 号)。它的前言交代了编者所知道的情况:
随后是两份文书。第一份是一封完全明写的信,编号 6235:教皇已读过大使 5 月 27 日的两封信,赞同他应奥地利外交大臣之邀追随皇帝的决定;“指示是什么,您将从我同时发出的加密急件中得知”;不可把外交部的说法与教皇本人的意愿混为一谈。第二份是加密急件,以明写开头(“得知您已离开维也纳并迁往皇帝陛下现今驻跸的那座城市,我借此机会把这份急件寄往那里”),然后是十四行数字,中间插入一句明写(“为节省时间,您须立即出示本急件”),最后再有两行数字,署名 G. Card. Soglia,罗马,1848年6月15日。页脚写着:Un premio non tenue è destinato al migliore interprete di queste cifre。
所用的转录出自 Joe,是 2014年12月15日 Schmeh 文章下的第四条评论。我们把扫描件切成长条逐行核对,除一处外都正确:第 12 行印出的 …2251242496774740906… 漏了一个 4。改正后,全段为 955 个数字。印刷工自己犯了一个错误,下文再谈。印件中行内出现点的地方(3099.7.39、67367.067),同样忽略不计:没有它们文本照样能解密。
02 密码体系
在猜测任何密钥之前,数字中就能看出三件事。
- 5 分隔词语。在每个 5 处切开,全段分成 102 个非空片段,其中 92 个是偶数位。十个奇数位的片段中,有七个是单独的数字 1 到 4,一个以这样的数字结尾,一个是印刷错误,还有一个是多出来的 8。单独的 1、2、3 或 4 是标点:逗号、分号、冒号、句号。句号 4 紧挨在印出的那句明写句子之前。并非每个词的分界处都写了 5;短词常常连写(conmio、oper、perdilui)。
- 8 标记码组。数字 8 从不作为数对的第二位出现。凡是它出现的地方,都是一个四位数组的开头:8247、8319、8620。数对取自 0 1 2 3 4 6 7 9 这八个数字,构成一张 64 格的表。
- 数对是字母和音节。共 355 个数对,56 种不同的:符号数比一套字母表所需的多,又远少于一部代码。
复原出的表。行是第一位数字,列是第二位;短横表示该格在这份消息中没有出现。
| 0 | 1 | 2 | 3 | 4 | 6 | 7 | 9 | |
|---|---|---|---|---|---|---|---|---|
| 0 | – | del | 无 | k | s | ta | al | a |
| 1 | chi | m | in | – | ma | c | – | p |
| 2 | gli | e | ne | la | n | che | – | – |
| 3 | qu | da | – | b | mi | t | con | d |
| 4 | de | l | di | se | e | o | al | r |
| 6 | il | f | – | per | si | st | i | te |
| 7 | v (u) | ti | g | – | z | to | b | p |
| 9 | c | f | l | d | g | m | n | s |
同音符: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。有九个由上下文确定,无可置疑,而它们的值随字母顺序递增:
| 8319 | 8340 | 8374 | 8422 | 8424 | 8429 | 8433 | 8446 | 8620 |
|---|---|---|---|---|---|---|---|---|
| Imperatore | istruzione | Monsignor | opportuno | ordin- | Padre | parte | port- | 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 密钥是如何复原的
- 简单替换失败了,而这次失败很能说明问题。以 5 为分词符,一个简单替换求解器(模拟退火,每个数对一个字母)配合意大利语、法语和拉丁语的 5-gram 模型都一无所获,在每种语言上大约都是每字符 −3.4 奈特。同一求解器又在一份合成对照上运行:一段同样长度的意大利语文本,用 68 个两位数符号作同音替换加密,分词方式相同(
synth.py)。它把对照完全解了出来。所以求解器没有问题,问题在于这些数对不可能全是单个字母。 - 名码本求解器。下一个求解器允许每个数对代表一个字母或一个常见音节,每个数对一个值,8XXX 组则作为未知词搁置。在它的输出中,像 circostanze、intendendosi 和 indirizzata 这样的片段都是文书处行文中的完整意大利语词,任何偶然得到的密钥都不会产生这些词。
- 先固定词语,再手工解密。把这三个词固定下来后重新运行求解器;此后便手工逐词解密,一次一个数对,每个值都与该数对的所有其他出现位置核对。Lutzovv 和 Inspruck 从字母中自然浮现。Morichini 在最后一行拼写了出来。
- 代码。字母一旦确定,8XXX 组就可以被解析出来并排序:Imperatore 8319 在 istruzione 8340 之前,后者又在 Monsignor 8374 之前,如此一直到 Roma 8620。按字母顺序排列的单表代码允许根据一个未知码组落在哪两个已知码组之间来估计它的值(§05)。
04 解读
拼写已规范化(密码中把 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个值,所以容差就取这个范围。于是每个由上下文得出的读法都按自己的排位得到一个预测值:
| 代码 | 读法 | 预测值 | 偏差 |
|---|---|---|---|
| 8110 | col(fine di) | 8114 | −4 |
| 8116 | Colonia | 8117 | −1 |
| 8120 | com(e) | 8122 | −2 |
| 8122 | cotest(a) | 8145 | −23 |
| 8211 | è | 8199 | +12 |
| 8247 | foglio | 8245 | +2 |
| 8310 | guerra | 8289 | +21 |
| 8346 | lontan(a) | 8339 | +7 |
| 8632 | Signor | 8596 | +36 |
| 8737 | Tuttavia | 8665 | +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 8413 | tr–tu / venti–vo(lgente) / v之后 / tu–u / n–o | 较早那封信的日期:con mio foglio del …,可能是6月初的某个日期,如tre volgente,并附有一处引注 |
| 8227 | ess–età–ex–fa | il Signor, […] di Lützow;Chigi 称他为ex-ambasciatore |
| 8704 | te–ti | come […]e lo avesse creduto opportuno |
| 8093 8102 | ch–ci / ci–co | Le partecipo […] […] del Padre |
| 8131 8136 | cr–da / da–dar | interessa […] 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 尚不确定之处
- 上面那十一个码组,因而还有较早那封信的日期,以及三个分句的确切措辞。
- 十个上下文读法是靠顺序检验过的,并未得到证明。最弱的是guerra(8310,只比8319的Imperatore低九个值,于是几乎所有h和i开头的词都得挤在它们之间)和lontan-(8346,比istruzione高六个值,只给从istr-到lon-之间的所有词留下五个值)。两者都符合句意和顺序,但代码在这一段如此稀疏,是不寻常的。Tuttavia离预测值最远,原因见§05。
- 该是dalla guerra的地方印作della guerra,以及第1行si后面多出的8,都是照印本原样;究竟是译码员还是米兰排字工的错,从一份翻印本上无法判断。
- 这张单页是米兰报纸的罗马翻印本。米兰原刊(见 repubblicaromana-1849.it)没有逐个数字核对过。
09 来源
- Dispaccio del Card. Soglia. Tratto dal giornale l’Italia del Popolo 30 Giugno,单页印刷品,罗马,Tip. Clemente Puccinelli,1848年;图像出自 K. Schmeh,“Wer knackt die verschlüsselte Nachricht von Kardinal Soglia?”,Cipherbrain,2014年12月13日(scienceblogs.de),由 Tony Gaffney 提供。十四条评论:Joe 的转录(第4条),Kent Ramliden 谈1814年维也纳教廷大使馆密码和 Spada(第7、8、10条),Thomas 和 Armin 谈Il Labaro(第12–14条)。那里没有人贴出过解读;据2026年9月的搜索,其他地方也没有。
- L’Italia del Popolo,米兰,第一年第40期,1848年6月30日(repubblicaromana-1849.it)。
- G. Spada,Storia della rivoluzione di Roma,第二卷(佛罗伦萨,1868–69),第十四章,第387–390页:明文信及对密文内容的转述(Wikisource)。
- Diario del principe Agostino Chigi Albani,1848年:5月6日和9日、5月17日、5月27日、6月20日、7月6日和8日(Wikisource)。
- L. Sandoni,“Viale Prelà, Michele”,Dizionario Biografico degli Italiani 99(2020)(Treccani)。
校正后的密文(ct2.txt),带字表和代码的解码器(decode.py, key.json, codes.json),人工合成的对照(synth.py),排位拟合与窗口(rankfit2.py, windows2.py),与转录核对过的逐行图条(strips/)以及笔记都在代码库中(targets/soglia1848/)。运行 python decode.py --guess 可得到填入上下文代码词后的读法。

