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.
