在一次大战期间,英国的情报机关非常严密地监控了德国方面的通讯,丘吉尔的书和英国海军部的报告中透露的消息只不过是一鳞半爪。事实上,将美国引入一次大战的齐末曼(1916年起任德国外交部长)电报就是由著名的英国40局破译的。在此电报中德国密谋墨西哥对美国发动攻击,这使得美国最终决定对德宣战。但是英国人的障眼法用得如此之好,使得德国人一直以为是墨西哥方面泄漏了秘密。
战后英国仍旧保持着对德国通讯的监听,并保持着很高的破译率。但是从1926年开始,他们开始收到一些不知所云的信息——ENIGMA开始投入使用。德国方面使用的ENIGMA越多,40局破解不了的电文就越多。美国人和法国人碰到的情况也一样,他们对ENIGMA一筹莫展。德国从此拥有了世界上最为可靠的通讯保密系统。
一次大战的战胜国很快就放弃了破译这种新型密码的努力。也许是出于自信,在他们看来,在凡尔赛条约约束下的德国已经造成不了什么危害。由于看不到破译德国密码的必要性,盟国的密码分析专家懒散下来,干这一行的头脑似乎也变得越来越平庸。在科学的其他领域,我们说失败乃成功之母;而在密码分析领域,我们则应该说恐惧乃成功之母。普法战争造就了法国一代优秀的密码分析专家,而一次大战中英国能够破译德国的通讯密码,对失败的极大恐惧产生的动力无疑起了巨大的作用。
历史又一次重演。因为在欧洲有一个国家对德国抱有这种极大的恐惧——这就是在一战灰烬中浴火重生的新独立的波兰。在他的西面,是对失去旧日领土耿耿于怀的德国,而在东面,则是要输出革命的苏维埃联盟。对于波兰来说,关于这两个强邻的情报是有关生死存亡的大事,波兰的密码分析专家不可能像他们的英美法同事那样爱干不干——他们必须知道这两个大国都在想什么。在此情况下波兰设立了自己的破译机构,波军总参二局密码处。密码处的高效率在1919~1920年波苏战争中明显地体现出来,军事上屡尝败绩的波兰在密码分析方面却一枝独秀。在苏军兵临华沙城下的情况下,1920年一年他们破译了大约400条苏军信息。在对西面德国的通讯的监控方面,波兰人也保持了同样的高效率——直到1926年ENIGMA登场。
波兰人想方设法搞到了一台商用的ENIGMA机器,大致弄清楚了它的工作原理。但是军用型的转子内部布线和商用型的完全不同,没有这个情报,想要破译德军的电报可谓难如登天。波兰人使出了浑身的解数,甚至病急乱投医,请了个据说有天眼通功能的“大师”来遥感德国人机器里转子的线路图——当然和所有的“大师”一样,一遇上这种硬碰硬的事情,神乎其神的天眼通也不灵了。
这时事情有了转机。
汉斯-提罗·施密特于1888年出生在柏林的一个中产阶级家庭里,一次大战时当过兵打过仗。根据凡尔赛条约,战败后的德国进行了裁军,施密特就在被裁之列。退了伍后他开了个小肥皂厂,心想下海从商赚点钱。结果战后的经济萧条和通货膨胀让他破了产。此时他不名一文,却还有一个家要养。
和他潦倒的处境相反,他的大哥鲁道夫在战后春风得意。和汉斯-提罗一样都是一次大战的老兵,可鲁道夫没有被裁减,相反却一路高升。到了20世纪20年代,他当上了德国通讯部门的头头,就是他正式命令在军队中使用ENIGMA。和大哥的成功比起来,汉斯-提罗自然觉得脸上无光。
可是破产后汉斯-提罗不得不放下自尊心来去见大哥,求他在政府部门替自己谋个职位。鲁道夫给他的二弟在密码处找了个位置。这是专门负责德国密码通讯的机构——ENIGMA的指挥中心,拥有大量绝密情报。汉斯-提罗把一家留在巴伐利亚,因为在那里生活费用相对较低,勉强可以度日。就这样他一个人孤零零地搬到了柏林,拿着可怜的薪水,对大哥又羡又妒,对抛弃他的社会深恶痛绝。
接下来的事情可想而知。如果把自己可以轻松搞到的绝密情报出卖给外国情报机构,一方面可以赚取不少自己紧缺的钱,一方面可以以此报复这个抛弃了他的国家。1931年11月8日,施密特化名为艾斯克和法国情报人员在比利时接头,在旅馆里他向法国情报人员提供了两份珍贵的有关ENIGMA操作和转子内部线路的资料,得到1000马克。靠这两份资料,盟国就完全可以复制出一台军用的ENIGMA机。
不过事情并不像想像的那么简单。要破译ENIGMA密码,靠这些情报还远远不够。德军的一份对ENIGMA的评估写道:“即使敌人获取了一台同样的机器,它仍旧能够保证其加密系统的保密性。”就算有了一台ENIGMA,如果不知道密钥(在前文里我们知道所谓的密钥,就是转子自身的初始方向,转子之间的相互位置,以及连接板连线的状况)的话,想破译电文,就要尝试数以亿亿计的组合,这是不现实的。
“加密系统的保密性只应建立在对密钥的保密上,不应该取决于加密算法的保密。”这是密码学中的金科玉律。加密算法可以直接是某个抽象的数学算法,比如现在通用的DEA和RSA算法,也可以是实现某个算法的象ENIGMA这样的加密机械或专门用于加密的电子芯片等加密器件,还可以是经过编译的在计算机上可执行的加密程序,比如现在在互联网通信中被广泛使用的PGP。因为对加密算法的保密是困难的。对手可以用窃取、购买的方法来取得算法、加密器件或者程序。如果得到的是加密器件或者程序,可以对它们进行反向工程而最终获得加密算法。如果只是密钥失密,那么失密的只是和此密钥有关的情报,日后通讯的保密性可以通过更换密钥来补救;但如果是加密算法失密,而整个系统的保密性又建立在算法的秘密性上,那么所有由此算法加密的信息就会全部暴露。更糟糕是,为了使以后的通讯保持秘密,必须完全更换加密算法,这意味着更新加密器械或更换程序。比起简单地更换密钥,这要耗费大量财富和管理资源(大规模更换加密器械和程序会使对手更有机会乘虚而入)。
如此明显的道理,却时常有人不愿遵守,把加密系统的保密性建立在对加密算法的保密上,为此吃够了苦头。最著名的例子莫过于DVD的加密算法。信息和密码专家通过对DVD驱动器解密芯片和解密软件的分析得到了它的加密和解密算法。以此为基础有人编写了一个破解DVD加密算法的程序DeCSS。虽然在2000年1月,美国法官刘易斯·卡普兰裁定在互联网上传播DeCSS为非法,但是这种行政的强制手段似乎毫不奏效。反对裁决的一方以保护言论自由的美国宪法第一修正案的来反驳,卡普兰不得不附加了“计算机源程序不属言论”的附加裁定。
但这个附加裁定似乎也没有什么太大的用处——虽然不能直接传播DeCSS的源程序,如果愿意的话,人们还是可以用“源程序的第一个字母是A,第二个字母是=”这类卡普兰法官绝不能归到“非言论”一类去的方法来描述。在DeCSS长廊网站你可以找到十几种怪里怪气地“不违法”地传播DeCSS的方法,其中包括一首诗,一件印着源程序的T恤衫,一段朗诵源程序的录音和三张显示着源程序的GIF图片——法官大人下令禁止的是源程序,不是它的图片,不是吗?
更有甚者,有人在网上公布了一个素数,如果把这个素数写成16进制并记录成一个文件,我们就可以拿解能够解gzip格式的压缩软件(比如说WinZip)来将它解成DeCSS。如果卡普兰法官下令禁止这个素数的话,它很有可能成为有史以来第一个“非法”的素数。你可以在相关网站上看到这个素数。
在上面这个例子里我们甚至可以看到,在此时更换加密算法已经变得实际上不可能,因为DVD作为标准已经被固定下来,于是它的加密算法也就从此形同虚设。
正如前面所言,ENIGMA的设计使得搞到了它的秘密的法国人也一筹莫展。法国密码分析人员断定这种密码是不可破译的。他们甚至根本就懒得根据搞到的情报去复制一台ENIGMA。
在10年前法国和波兰签订过一个军事合作协议。波兰方面一直坚持要取得所有关于ENIGMA的情报。既然看来自己拿着也没什么用,法国人就把从施密特那里买来的情报交给了波兰人。和法国人不同,破译ENIGMA对波兰来说至关重要,就算死马也要当作活马医。现在他们总算能迈出最初的一步了。
在施密特提供的关于ENIGMA的情报中,不仅有关于ENIGMA构造和转子内部连线的描述,还有德国人使用ENIGMA进行编码的具体规定。每个月每台ENIGMA机的操作员都会收到一本当月的新密钥,上面有此月每天使用的密钥。比如说,第一天的密钥可以是这个样子:(1)连接板的连接:A/L-P/R-T/D-B/W-K/F-O/Y;(2)。转子的顺序:2,3,1;(3)转子的初始方向: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月,波兹南大学数学系主任兹德齐斯罗·克里格罗夫斯基教授开列了一张系里最优秀的数学家的名单,在这张名单上,有以后被称为密码研究“波兰三杰”的马里安·雷杰夫斯基,杰尔兹·罗佐基和亨里克·佐加尔斯基。波兹南大学并非当时波兰最有名的大学,但是它地处波兰南部,那里直到1918年还是德国领土,所以所有这些数学家都能讲流利的德语。
在三位被密码局招聘的数学家中,雷杰夫斯基的表现最为出色。当年他是个架着一副近视眼镜,脸上略带羞色23岁小伙子。他的在大学里学的专业是统计学,打算以后去干保险业行当,也许在此之前他从未想到会在密码分析方面大展身手。在经过短期的密码分析训练后,他把所有的精力都投入到破解ENIGMA的工作中去。
雷杰夫斯基深知“重复乃密码大敌”。在ENIGMA密码中,最明显的重复莫过于每条电文最开始的那六个字母——它由三个字母的密钥重复两次加密而成。德国人没有想到这里会是看似固若金汤的ENIGMA防线的弱点。
德方每封密文最开始的六个字母,是此信密钥的三个字母重复两遍,由当日密钥加密而成。比如说这封信的密钥是ULJ(这是开始加密明文时由操作员临时随机选取的),那么操作员首先用当日通用的密钥加密ULJULJ,得到六个字母的加密后序列,比如说PEFNWZ,然后再用ULJ来作为密钥加密正文,最后把PEFNWZ放在加密后的正文前,一起用电报发给收信方。