01 實物
根據正面的收件章,特勤局於1935年4月24日收到一張紙,頂部用花體寫著“Secret Service”,右上角斜寫著“261”,下面是三行數字、兩行大寫印刷體字母,還有一個骷髏交叉骨,下方是一把刺穿靴子的匕首。William Friedman 在他1959年系列講座的第一講中把它複製為圖2,該講座由 NSA 以The Friedman Legacy(1992)為題刊印,他只配了一句話:這是一個真實的移位密碼例項,寄給羅斯福總統,特勤局請他解讀,令他懊惱的是,內容竟是“Did you ever bite a lemon?”(你咬過檸檬嗎?)。這個解讀取的是 NDOIMDEYLOAUEETVIEBR? 中每隔一個的字母;下面那一行 OR ELSE YOU DIE!!(否則你就死定了!!)是明文。Friedman 對那些數字隻字未提。
Klaus Schmeh 在2015年釋出了這封信,2017年12月又將其作為他 Top 50 榜單的第17號再次釋出。在評論中,Marc Gutgesell 指出沒有任何一個用小勾連起來的兩位數重複,而零散的數字是1到9;Thomas Ernst 列出了43個兩位數,發現它們恰好是10到52,並得出結論說這個數字塊是“隨手塗寫,如果不是偽造的話”,也許是為了讓 Friedman 咬一口檸檬而做的。此後再無人提出解讀。
02 轉錄
現存兩個副本:Schmeh 的614畫素掃描件,以及 NSA 書中的插圖。Internet Archive 存有該書的300 ppi 掃描件,其中的插圖(此處已裁切)是在沒有原件的情況下能得到的最清晰的數字塊副本。
標準轉錄中的“撇號”,其實是寫在兩個數字之間上方的短小勾,小勾下面的兩個數字是一個數。沒有小勾的數字單獨成數。按這種方式轉錄,數字塊如下:
1 7 2 10 15 17 19 21 26 8 32 33 20 37 000000 16 27 12 34 38
28 22 39 40 41 42 48 44 000000 9 3 13 000 18 4 23 24 000
46 29 35 51 5 43 47 000 6 11 36 50 52 30 49 45 25 31 14 —
43個兩位數是10到52,每個恰好一次。九個零散數字是1到9,每個恰好一次,順序為 1 7 2 8 9 3 4 5 6。十八個零按6、6、3、3分組。這就是數字塊的全部內容:1到52的一個排列,外加四個分隔符。兩位評論者注意到數字下方有 Friedman 或特勤局用鉛筆試寫的字母,但兩份掃描件都無法辨認。
03 手寫的洗牌
52個數的排列可以拿來與公平洗牌作檢驗。這個排列同時在四個方面不合格。
| 統計量 | 觀測值 | 52個數的公平洗牌 | p(200 000次洗牌) |
|---|---|---|---|
| 數值與位置的秩相關 | +0.39 | 0 | 0.002 |
| 相差恰好 +1 的相鄰數 | 5 | 約1 | 0.003 |
| 上升鏈(位置遞增的數值序列) | 16 | 約26.5 | 低於二十萬分之一 |
| 和為53的相鄰數 | 4 | 約1 | 0.018 |
上升鏈是最強的訊號。從每個值追到下一個值:1 2 3 4 5 6 在數字塊中按這個順序出現,7 8 9、21到25、26到31、32到36、37到43也是如此。寫的人分幾輪交錯地在尚未用過的數里往上寫,再回頭補上跳過的,等新數不夠用時,就一口氣寫下 39 40 41 42。表中的每一項異常都屬於這一類。和為53的四對相鄰數中有三對橫跨一個零組(37|16、44|9、47|6),Gerd 在2017年注意到了這一點;這是輕微的超出,並非其他結論所依賴的結構。
唯一以52為單位的東西是一副撲克牌,所以也把數字塊當作一副經過鴿尾式洗牌的牌來檢驗。十六條上升鏈正是洗四次所產生的,但洗過四次的一副牌不會同時出現0.39的向上漂移和四張連續的牌:在 Gilbert-Shannon-Reeds 模型下,洗四次時這一聯合事件的機率為0.003,洗三次時為0.023。手寫列表比一副牌更能解釋這個數字塊。兩者都不包含文字。
04 可以檢驗的密碼解釋
一個每個數都只出現一次的數字塊,只有兩種可能是密碼:一種是有52個同音符、每個只用一次的同音替換;另一種是對一個52字母的短語按字母排序匯出的移位金鑰。如果金鑰是無序的,這兩種讀法都能產生任意一段52字母的文字,因此都無法檢驗或駁倒;有一位評論者就擬合了一個任意句子來證明這一點。如果金鑰是有序的——同音符按字母表順序分配,或者從逆排列恢復出的短語中字母沿排序單調不減——明文就由51個邊界選擇決定,約66位元,而52個英文字母約有70位元的冗餘。這勉強可以檢驗。
檢驗採用模擬退火,搜尋從1到52到字母表的單調不減對映,用字元5-gram 英語模型打分,分六種讀法(序列順序與逆排列、字母表正序與倒序、零組當作詞間隔或忽略),每種重啟60次、每次60 000步。對照是狄更斯和梅爾維爾的52字母段落,用有序同音金鑰加密後以同樣方式攻擊。
| 讀解 | 最佳得分,每字母 nats | 最佳候選 |
|---|---|---|
| 序列,字母表 a 到 z | −3.02 | abadefillbookofmdoomloorstsbadfallsnowassadovyouslod |
| 序列,a 到 z,零當作詞間隔 | −2.70 | abadefillbooko endoonloorsus dad falltoowast adovyouslod |
| 序列,字母表 z 到 a | −3.18 | uttooooonsnnolonominoffeedertootooenlatedtoldandenno |
| 逆排列,a 到 z | −2.63 | derssteeretiryehereheissuehistwehisthinnootrustoutst |
| 逆排列,z 到 a | −3.03 | ttheeetsiteseatstetstreeatssedassseesspooneibeendeed |
| 對照,8段 | −1.48 到 −1.97 | 8段中7段讀出88%到100%的字母;1段為46% |
數字塊的任何結果與已恢復的對照相比,差距都不小於每字母0.6 nats,也沒有哪個候選含有比偶然單詞更長的連續英文。數字塊自身的結構也與有序金鑰相牴觸:在正序字母表下,九個單個數字都只能變成 a、b 或 c,所以每個候選都以“aba”開頭。有序金鑰的解釋在對照所允許的強度上被排除;無序金鑰的解釋無法檢驗,而一個只與無法檢驗的金鑰相容的數字塊,與隨手塗寫無從區分。
05 這意味著什麼
Ernst 的計數是正確的,這個排列帶有這樣一隻手的統計特徵:以自編的順序把1到52各寫一次,再加上幾串零。下面的字母行是一個簡單到 Friedman 一眼就能解讀的移位密碼;上面的數字行是在模仿密碼,什麼也沒有編碼。無論寄信人是像 Ernst 所說的那樣存心戲弄特勤局,還是隻是照著自己以為的密碼樣子抄寫了一番,這個數字塊之所以沒有解讀,是因為它什麼也沒有編碼。無序的一次性金鑰在原則上仍然可能,但與隨手塗寫無從區分。
如果能看到收藏在 NSA 的 William F. Friedman 藏品中的原件(其背面有一段打字文字,正面有鉛筆試寫的字母),或者同一人筆下的第二封信,這個問題才會重新開啟。
06 來源
- William F. Friedman,The Friedman Legacy: A Tribute to William and Elizebeth Friedman,NSA 密碼史中心,Sources in Cryptologic History 3,1992,第一講,第8頁及圖2。FDLP PDF;Internet Archive 掃描件(第18葉),即上圖的來源。
- Klaus Schmeh,“Wer knackt die verschlüsselte Nachricht an Präsident Roosevelt?”,Cipherbrain,2015年10月26日,附 Marc Gutgesell 的評論。
- Klaus Schmeh,“The Top 50 unsolved encrypted messages: 17. The Roosevelt cryptogram”,2017年12月8日,附 Thomas Ernst、Thomas、Gerd 和 Norbert 的評論。
- 復現方法:
targets/roosevelt/structure.py和targets/roosevelt/solve_ordered.py在資料庫中;轉錄見targets/roosevelt/cipher.txt.
