密码学 | Enigma破解分析

Author Avatar
Ricardo Liu 3月 09, 2015
  • 在其它设备中阅读本文章

摘要:详细分析了对雷杰夫斯基和图灵破解Enigma的工作。

Enigma的破译可以分成两个阶段。第一个阶段是由波兰人雷杰夫斯基为首完成的,利用的是临时密钥的重复发送。在德国人去除了这一漏洞之后,第二个阶段是由英国人图灵完成的。下面分别介绍。

雷杰夫斯基的工作

雷杰夫斯基所利用的是德军在使用Enigma机器时重复发送密钥所带来的一个漏洞。德军当时使用Enigma机器的方式为,首先有一个记录了一个月中每天所使用的密钥的密码本,然后在当天的每次加密前,选取三个字母表示转子的初始方向,例如ZRW,作为本次加密的临时密钥,用密码本上当天的密钥加密两遍临时密钥,例如ZRWZRW(为了防止偶然的发送或接受错误),之后在用临时密钥加密正文。所以每天德军所发送的密文的前六个字母都是用当天的密钥所加密的重复两遍的临时密钥。利用这一点,雷杰夫斯基的方法得以奏效。

假设临时密钥为ZRW,ZRWZRW用当日密钥加密后为ASDFGH。考虑前后两个Z,它们分别被加密为了A和F,这是由于快转子在两次加密Z之间转动了三次。这样A和F之间作为同一个字母第一次和第四次被加密的结果,就存在对应关系。通过当天收集大量的密文,我们可以找出密文第一个和第四个字母间存在的所有的对应关系。例如:

第一个字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ
第四个字母:FQHPLWOGBMVRXUYCZITNJEASDK

在这个表中,存在若干字母循环圈,例如A->F->W->A。写出所有的字母循环圈:

A→F→W→A                3个字母的循环圈
B→Q→Z→K→V→E→L→R→I→B    9个字母的循环圈
C→H→G→O→Y→D→P→C        7个字母的循环圈
J→M→X→S→T→N→U→J        7个字母的循环圈

这些循环圈是由当日密钥决定的,但是循环圈的个数、每个循环圈的长度只由转子的情况决定,与连接板的情况无关。下面我们通过论证连接线对对应关系的影响来不严格地证明无关性。

首先我们不妨假设R和W是相连的。现在考虑去除连接线会造成什么影响。把连接线的影响可以分为两部分:输入和输出。从输入的角度来看,如果连接线对输入的影响不存在了(即输入R的时候不会经过连接线到W,但是输出R的时候会经过连接线到W),可以发现对应关系表是不变的(改变的是每列对应的明文字母)。从输出的角度来看,原本输出R时实际输出的是W,原本输出W时实际输出的是R。需要把第一行中R和W在第二行中对应的字母对调,把第二行中R和W在第一行中对应的字母对调。这对循环圈造成的影响是,交换了R和W在循环圈中的位置。循环圈的个数、每个循环圈的长度不变。同样,我们可以证明加上连接线的效果相同。

所以,循环圈的个数、每个循环圈的长度可以作为转子状态的一个特征。同样,第2、5个字母和第3、6个字母之间的对应关系同样可以找出来,再确定循环圈的个数、每个循环圈的长度,也可以作为转子状态的特征。如果能够构造一个完备的对照表,我们可以通过这些特征,确定转子的状态。由于这里的分析与连接板状态无关,而转子的状态一共有3!*26^3=105456种,可以采用穷举的关系建立上述的对照表。对照表中的一条记录可以是这样的:

第一和第四字母对应表中有4个循环圈,长度分别为3,9,7,7;
第二和第五字母对应表中有4个循环圈,长度分别为2,3,9,12;
第三和第六字母对应表中有5个循环圈,长度分别为5,5,5,3,8;

在找出当日密钥中转子的状态之后,还需要确定连接板的情况才能破解密钥。这一部分没有查找相关的资料。在我看来,一种可行的办法是通过增减连接线来交换字母在循环圈中的位置,使得循环圈与实际的循环圈一致。

雷杰夫斯基的方法的缺陷在于,如果德军不再重复发送密钥,或者增加转子的个数,他的方法便不再可行。

图灵的工作

图灵利用的如下几个条件来建立一些明文与密文的对应:

  1. 德军在每天的固定时间会发送固定格式的密文,例如在每天早上六点会发送天气预报。由于固定格式,往往就有确定的单词出现,例如天气预报中会出现天气(德文wetter),这样就可以猜测这样的密文中一定存在特定的明文单词。
  2. 由于Enigma设计中反射器的存在,Enigma加密时一定不会把一个字母映射为字母本身。

根据第一点,可以确定明文单词在密文中的大致位置,然后结合第二点,根据有没有字母映射到本身这一条件差不多可以确定明文的准确位置。下面的工作就是根据一些明文和对应的密文进行破解。

首先需要在已知明文中找到最小的一个字母循环圈。假设wetter对应的密文为ETJWPX,则这里存在W->E->T->W的循环圈。设在加密wetter前Enigma的状态为S,加密n个字母后为S+n。如果我们取三台机器,状态分别为S、S+1、S+3,将他们的输出与后者的输入依次相连,则S的W->S+1的E->S+3的T->S的W,构成了一条回路。

进一步,如果不考虑连接板,我们取三台机器,第一台状态记为S,调节第二台为S+1,调节第三台为S+3,按1-2-3-1的顺序输出与输入相连。如果其中不存在回路,则说明转子的状态与密钥不同。如果其中存在回路,则说明转子的状态很可能为密钥中转子的状态,同时这条回路很可能是字母循环圈。然后只需要用连接线把对应的字母对相连即可。例如,找到的字母循环圈为R->E->L->R,则用连接线连接R和W,L和T。至此密钥破解完成。

以上。


参考资料:《Enigma的兴亡》