中文譯本 · 原作 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 可得到填入上下文程式碼詞後的讀法。