波兰先是想方设法搞到了一台商用的ENIGMA密码机,弄清楚了它的原理。后又从法国手中搞来了德国密码通讯机构中的内贼出卖的有关ENIGMA密码机的工作原理、转子内部线路和操作守则资料,从而复制出了军用的密码机。
重复乃密码大敌,ENIGMA密码机最明显的重复就是每条密文开头由三个字母的信息密钥连续重复两次加密而成的六个字母,波兰密码专家正是以此为突破口。
宋鸿飞道:“这开头的6个密文字母,第1个和第4个字母都是由同一个明文字母加密而来。同样的,第2个和第5个、第3个和第6个也是如此。这个‘多打一遍’看似要求严谨的操作,却形成了重复的明文和密文对照组合。”
俞大维静静地听着,陷入沉思。
他虽然对德国恩尼格玛密码机有所了解,也曾惊叹它的先进和巧妙设计,但却从未曾像宋鸿飞这样深入地分析过。
“发送者设置好‘每日密钥’后,我们假设他任意键入的‘信息密钥’为XYZ这3个字母。”宋鸿飞一边思索着,一边用粉笔在俞大维办公室里一块黑板上写写划划,“连续键入两次XYZXYZ,假设得到GANDER这6个密文。”
“第一个密文字母G和第四个字母D是同一个明文X经过转子3次转动后得到不同的加密结果。它的本质是字母替换,把这个替代关系用函数fn表示,即转动加密一次之后的替代关系用f1表示,转动两次就是f2,依此类推。”
“XYZ两次加密,可记作:
X(f1)=G,
Y(f2)=A,
Z(f3)=N,
X(f4)=D,
Y(f5)=E,
Z(f6)=R,
恩格玛机有一个非常重要的特性——它是自反的,如果输入明文字母X得到密文字母G,同样的配置下,输入字母G就会得到字母X,这也正是它的解密原理,即X(f1)=G,G(f1)=X。”
“用方才第一个函数(f1)来表示,即X(f1)(f1)=X,也就是说一个字母被同一个函数(fn)连续两次替换会得到它自身。”
“再代入第4次加密的函数X(f4)=D,即X(f1)(f1)(f4)=D,这样就得到G(f1)(f4)=D,X这个密钥字母就被抵消掉了!也就是说密文G和D之间这种联系其实与信息密钥是无关的,只与密码机在这一天的每日密钥相关。”
“G(f1)(f4)=D的含义就是将一个字母通过密码机的初始设置进行一次替换后,又将转子转动三位再进行一次替换所得的对应关系,它的本质还是一种替代。记为一组G-D,同样的,又可得其他两组A-E、N-R。”
“如果对手每天截获德军大量的电报,对每封电报的前6个字母进行类似的操作,就得到更多的两两配对的字母组合,直到26个字母都配对完全。”
“太妙了!”俞大维简直要惊呆了,此刻他的思维也如烈马狂奔般在发散在思考着。
俞大维眼前一亮:“真是一个绝妙的突破口!根据这26对字母组合,对于一定配置状态下的密码机,把这个状态当做一个整体,就可以测试每一个字母经过第一次替换和旋转3个位置再一次替换是否得到这样的配对组合,来进行暴力破解!嗯,三个转子的排列和初始设置一共大约10万种可能性,在国家层面来说投入大量的人力、物力、财力,复制出大量的密码机同时进行破解,是完全可行的!”
宋鸿飞也不得心中不佩服,俞大维真不愧是本科毕业3年就拿到哈佛博士的奇才,这智商真不是盖的。
俞大维继续思考着:“但是还有个问题,在转子扰码器的进出两端都要通过插线板,输入端暂且不提,输出端确是直接影响所得组合的,插线板26个字母共有6对连接线,所有可能的结果增加了1000亿倍,怎么消除插线板的影响呢?”