恩尼格玛密码机( 二 )


恩尼格玛密码机

文章插图
汉斯-提罗·施密特和他潦倒的处境相反,他的大哥鲁道夫(Rudolph)在战后春风得意 。和汉斯-提罗一样都是一次大战的老兵,可鲁道夫没有被裁减,相反却一路高升 。到了二十年代,他当上了德国通讯部门的头头,就是他正式命令在军队中使用ENIGMA 。和大哥的成功比起来,汉斯-提罗自然觉得脸上无光 。可是破产后汉斯-提罗不得不放下自尊心来去见大哥,求他在政府部门替自己谋个职位 。鲁道夫给他的二弟在密码处(Chiffrierstelle)找了个位置 。这是专门负责德国密码通讯的机构——ENIGMA的指挥中心,拥有大量绝密情报 。汉斯-提罗把一家留在巴伐利亚,因为在那里生活费用相对较低,勉强可以度日 。就这样他一个人孤零零地搬到了柏林,拿着可怜的薪水,对大哥又羡又妒,对抛弃他的社会深恶痛绝 。接下来的事情可想而知 。如果把自己可以轻鬆搞到的绝密情报出卖给外国情治单位,一方面可以赚取不少自己紧缺的钱,一方面可以以此报复这个抛弃了他的国家 。1931年11月8日,施密特化名为艾斯克(Asche)和法国情报人员在比利时接头,在旅馆里他向法国情报人员提供了两份珍贵的有关ENIGMA操作和转子内部线路的资料,得到一万马克 。靠这两份资料,盟国就完全可以複製出一台军用的ENIGMA机 。不过事情并不象想像的那幺简单 。要破译ENIGMA密码,靠这些情报还远远不够 。德军的一份对ENIGMA的评估写道:“即使敌人获取了一台同样的机器,它仍旧能够保证其加密系统的保密性 。”就算有了一台ENIGMA,如果不知道密钥(就是转子自身的初始方向,转子之间的相互位置,以及连线板连线的状况)的话,想破译电文,就要尝试数以亿亿计的组合,这是不现实的 。“加密系统的保密性只应建立在对密钥的保密上,不应该取决于加密算法的保密 。”这是密码学中的金科玉律 。加密算法可以直接是某个抽象的数学算法,比如通用的DEA和RSA算法,也可以是实现某个算法的象ENIGMA这样的加密机械或专门用于加密的电子晶片等加密器件,还可以是经过编译的在计算机上可执行的加密程式,比如在网际网路通信中被广泛使用的PGP(Pretty Good Privacy) 。因为对加密算法的保密是困难的 。对手可以用窃取、购买的方法来取得算法、加密器件或者程式 。如果得到的是加密器件或者程式,可以对它们进行反向工程而最终获得加密算法 。如果只是密钥失密,那幺失密的只是和此密钥有关的情报,日后通讯的保密性可以通过更换密钥来补救;但如果是加密算法失密,而整个系统的保密性又建立在算法的秘密性上,那幺所有由此算法加密的信息就会全部暴露 。更糟糕是,为了使以后的通讯保持秘密,必须完全更换加密算法,这意味着更新加密器械或更换程式 。比起简单地更换密钥,这要耗费大量财富和管理资源(大规模更换加密器械和程式会使对手更有机会乘虚而入!) 。正如前面所言,ENIGMA的设计使得搞到了它的秘密的法国人也一筹莫展 。法国密码分析人员断定这种密码是不可破译的 。他们甚至根本就懒得根据搞到的情报去複製一台ENIGMA 。在法国和波兰签订过一个军事合作协定 。波兰方面一直坚持要取得所有关于ENIGMA的情报 。既然看来自己拿着也没什幺用,法国人就把从施密特那里买来的情报交给了波兰人 。和法国人不同,破译ENIGMA对波兰来说至关重要,就算死马也要当作活马医 。现在他们总算能迈出最初的一步了 。在施密特提供的关于ENIGMA的情报中,不仅有关于ENIGMA构造和转子内部连线的描述,还有德国人使用ENIGMA进行编码的具体规定 。每个月每台ENIGMA机的操作员都会收到一本当月的新密钥,上面有此月每天使用的密钥 。比如说,第一天的密钥可以是这个样子:1.连线板的连线:A/L-P/R-T/D-B/W-K/F-O/Y 。2.转子的顺序:2,3,1;转子的初始方向:Q-C-W 。当操作员要传送某条讯息时,他首先从密钥本中查到以上信息 。然后按照上面的规定,首先用连线把连线板上的A字母和L字母,P字母和R字母……连线起来;然后把2号转子放在ENIGMA的第一个转子位置上,把3号转子放在第二个位置上,把1号转子放在第三个位置上;最后,他调整转子的方向(从照片上可以看到每个转子的边上都刻着一圈字母用来显示转子所处的方向),使得三个转子上的字母Q、C和W分别朝上 。在接收信息的另一方,操作员也进行同样的準备(他也有一本同样的密钥本),就可以进行收信解码的工作了 。调整好ENIGMA,操作员可以开始对明文加密了 。但是我们看到每天只有一个密钥,如果这一天的几百封电报都以这个密钥加密传送的话,暗中截听信号的敌方就会取得大量的以同一密钥加密的信息,这对保密工作来说不是个好兆头 。我们记得在简单替换密码的情况下,如果密码分析专家能得到大量的密文,就可以使用统计方法将其破解 。儘管不知道对ENIGMA是否可以採用类似的统计方法,德国人还是留了个心眼 。他们决定在按当日密钥调整好ENIGMA机后并不直接加密要传送的明文 。相反地,首先传送的是一个新的密钥 。连线板的连线顺序和转子的顺序并不改变,和当日通用的密钥相同;相反地,转子的初始方向将被改变 。操作员首先按照上面所说的方法按当日密钥调整好ENIGMA,然后随机地选择三个字母,比如说PGH 。他把PGH在键盘上连打两遍,加密为比如说KIVBJE(注意到两次PGH被加密为不同的形式,第一次KIV,第二次BJE,这正是ENIGMA的特点,它是一种複式替换密码) 。然后他把KIVBJE记在电文的最前面 。接着他重新调整三个转子的初始方向到PGH,然后才正式对明文加密 。用这种方法每一条电文都有属于自己的三个表示转子初始方向的密钥 。把密钥输入两遍是为了防止偶然的发报或者接收错误,起着纠错的作用 。收报一方在按当日密钥调整好ENIGMA机后,先输入密文的头六个字母KIVBJE,解密得到PGHPGH,于是确认没有错误 。然后把三个转子的初始方向调整到PGH,接着就可以正式解密其余的密文了 。如果不使用对每条电文都不同的密钥,那幺每天很可能总共会有几千条电文也就是几百万个字母的讯息以同一个密钥加密 。而採用每条电文都有自己的密钥这个方法后,当日密钥所加密的就是很少的几万个字母,而且这些字母都是随机选取,和有意义的电文性质不同,不可能用统计方法破译 。乍一看来这种方法无懈可击 。可是波兰人铁了心,必须在这厚厚的护甲上撕出一个口子来 。在此以前,密码分析人员通常是语言天才,精通对语言方面特徵的分析 。但是既然ENIGMA是一种机械加密装置,波兰总参二局密码处就考虑到,是否一个具有科学头脑的人更适合于它的破译工作呢?1929年1月,波兹南大学数学系主任兹德齐斯罗·克里格罗夫斯基(Zdzislaw Krygowski)教授开列了一张系里最优秀的数学家的名单,在这张名单上,有以后被称为密码研究“波兰三杰”的马里安·雷杰夫斯基(Marian Rejewski),杰尔兹·罗佐基(Jerzy Rozycki)和亨里克·佐加尔斯基(Henryk Zygalski) 。波兹南大学并非当时波兰最有名的大学,但是它地处波兰南部,那里直到1918年还是德国领土,所以所有这些数学家都能讲流利的德语 。