让密码编码研究者很恼火的数学家,就这样一个个击破了传统的加密方法。如上文所说,甚至连一个聪明的普鲁士退役少校,一个业余数学爱好者,都能找出多表替代的致命缺陷。而这样的事实,也给了大家两个启示: 第一,没有哪种“绝对安全”的密码是不会被攻破的,这只是个时间问题。 第二,破译密码这活儿,看来只要够聪明、懂数学,单枪匹马也能扳倒权威——那些加密方式,也无非是一个个单枪匹马的人具体研究出来的嘛。 在古典密码时代,以上两个启示真是启发了许多人,以至于大家普遍认为,哪怕再聪明的人,他设计出的密码也会被另外的人攻破——诸如此类的观点,其实还是挺有道理的。 只是当时的人们完全没有想到,随着密码编码手段的强力进化,这个所谓“能攻破的人”不再是单数,而是复数;不仅单个的人不再可能自行攻破,甚至,就是倾全国之人力物力,也未必能很快奏效。他们没想到,因为他们没见过非人工编码的加密方式,而这个“非人工”,说的当然就是机器。 图6工业革命的象征——人类第一艘投入实用的蒸汽船“克莱蒙特”号从第一艘蒸汽船“真的”开始在纽约的哈得逊河里航行开始,人们就渐渐发现,以人的力气,根本无法与机器对抗。随着机器的不断改良和进化,人们又渐渐发现,不要说人的力气,就连人的灵巧准确,也根本无法与机器对抗。再后来,当那些被抢了饭碗的工人们忍无可忍,终于开始集体行动、大规模捣毁机器的时候,人们唯一还能自豪的就是:我们有智慧,而机器没有。 而密码编码和解码,那自然更是人类智慧的结晶,机器又怎么可能做得到?事实说明了一切。 ——机器不仅能做到,而且一出手就改变了整个密码学的面貌! 第一位应该接受花环的亚瑟·谢尔比乌斯(Arthur Scherbius),就这样当仁不让地站在了大时代的最前端。一、小老板谢尔比乌斯 1878年,历史长河中一个普通得不能再普通的年份——普法战争刚刚结束7年,俄土战争刚结束半年,离一战还有36年。往远了说,在这一年里,中国和日本前后脚诞生了两个娃娃,日后都成了陆军上将,还都跟孙中山有点关系。其中一个叫陈炯明,一个叫松井石根:一个帮过孙中山后来又要杀孙中山,创立了中国致公党,最后客死香港;一个支持并响应孙中山的革命,后来直接指挥侵华战争,最后在东京巢鸭监狱被绞死,灵位进了靖国神社。 也就在这一年的10月20日,在遥远的欧洲,在德国美因河畔法兰克福(FrankfurtamMain)的一个小商人家,也有一个娃娃诞生了。没错,他就是谢尔比乌斯(图7),一个看上去和其他同龄孩子没有任何区别的普通小孩,也是一样长大了,读书了。非要区别的话,就是后来他在慕尼黑技术学院(Technical College in Munich)读的是电力专业,并在1904年,以一篇《关于间接水涡轮调节器构造的建议》(Proposal for the Construction of an Indirect Water Turbine Governor)的论文获得了汉诺威技术学院(Technical College in Hanover)的工程学博士学位。 这时候的谢尔比乌斯,还未满26岁。 图7亚瑟·谢尔比乌斯 本图扫描自《Seizing the Enigma: The Race to Break the German UBoat Codes 1939—1943》,原作者David Kahn 说起来,这位德国工程师在一战之前及一战中间究竟做了什么,我们确实还不是很清楚。清楚的是,在一战即将结束的1918年2月23日,在参考了荷兰人科赫的构想之后,谢尔比乌斯为自己设计的一种密码机器申请了专利。这是人类第一份关于转轮密码机的专利申请——在他之后,还有荷兰人科赫、瑞典人达姆、美国人赫本陆续提出自己的转轮密码机专利申请。但是,首先被官方批准的,却是赫本的专利。考虑到当时各位发明家是独立地向各自国家提出的申请,谢尔比乌斯没有首先获得批准,大概也只能说是造化弄人了吧。 就在提出申请的同年,谢尔比乌斯和朋友一起开了一家公司,开始出售这种机器——Enigma。之所以取名为Enigma(意为“谜”),我猜当时的谢尔比乌斯对这机器肯定是很自豪,甚至是很自负的。实话说,他的这项发明的确使加密产生了巨大的飞跃,他的自豪甚至自负,也绝对是有道理的:因为这台Enigma,人类终于迈入了机械化编码的时代!而且,较之荷兰人科赫初步和粗糙的设想,Enigma的起点要高得多——它已经完全不是蹒跚学步的水平,而是个刚刚出生就已具备了强大战斗力的武士!图8后续型号Enigma上的两个转轮图9后续型号Enigma,此图为整部机器打开盖板后的模样 Enigma的构造之精巧、思路之诡异,的确让每个稍微仔细思考过它原理的人大为叹服。有诗为证: 次第转轮幻无穷,展化密字亿万千。 此谜只合天上有,缘何飞落人世间! 为了不过多干扰整个故事进程,关于它的详细机械原理,将在本书第五章专门阐述。现在,我们只是简要介绍一下Enigma,便于大家理解后来发生的事情吧。 它的加密核心,是3个转轮。在每个转轮的边缘上,都标记着26个德文字母(不包括变异元音字母、 、,与英文字母完全相同),借以表示转轮的26个位置。经过巧妙的设计,每次转轮旋转的时候,伴随着“咔嗒”、“咔嗒”的声音,它都会停留在这26个位置中的某个位置上,比如转轮停在字母“H”位置,我们就说转轮的当前位置是H。 我们现在假设从转轮的右面“输入一个字母信号”。经过转轮内部特定走向的导线连接后,由于输入-输出的位置发生了变化,输出的字母信号也就不再对应刚才输入的字母了。 如图10所示,输入的字母K,经过转轮内部的导线,最终从转轮的另一侧输出,并变成了R。当然,这只是一个比较简单和粗略的比方,详细的工作原理,依然请参照本书后面的全面介绍。 谢尔比乌斯认为,一个转轮太少了,怎么着也得来3个;就像图11这样,起码要弄成一个转轮组。图10Enigma转轮原理示意图图11Enigma转轮组示意图 在转轮组内,转轮们相互接触的侧面之间,都有相对应的电路触点,可以保证转轮组的内部构成通路。于是,图11中输入的字母K,经过第一个转轮,变成输出字母R;之后这个R进入第二个转轮,咱们假设它又变成了C;尔后,这个C再进入第三个转轮,假设又变成了Y。 如此这般,初始字母K历经层层磨难,终于功德圆满,变成了谁也认不出来的Y。 值得说一句的是:这3个转轮内部都有着复杂的连线,而具体的走线情况,又都是各自不同。由于3个转轮内部连线不同,因此,它们合起来连续加密的总效果,就是3个转轮各自能力的乘积。也就是说,每个转轮都有26个位置,3个转轮组合起来,就能生成26×26×26=17 576 种不同的变化所谓17576种变化,只是理论计算值,在实际使用中是达不到这个数字的,下同。具体情况请见第五章。。 从以上的描述可以看出,Enigma转轮组的加密原理,正是上文提到的多表替代——它通过不断改变明文和密文的字母映射关系,对明文字母们进行着连续不断的换表加密操作。而这17 576种变化着的字母映射关系,实际就是对应着迥然不同的17 576张换字表。我们在前面介绍过,多表替代的密钥,在实践中一般都比较短,即便长点儿的,一般也就20位。因此,密钥长度20,也就意味着它背后对应着20张换字表。 反观Enigma,我们已经可以开始初步领教机器编码的威力了:过去常用的20张,顶天了100张换字表,现在已经被上万张——具体说就是17 576张——换字表给轻松取代了。我们常说“量变引起质变”,而这个成百上千倍扩大换字表总规模的办法,确实一下就刷新了加密的纪录,以致完全改变了加密的面貌!对一个使用Enigma的加密者来说,现在他拥有的换字表资源简直是多得奢侈,甚至奢侈得都有点过分了…… 同时我们也不难想到,17 576张换字表,其实正对应着密钥长度为17 576;而要对付如此超长的密钥,还不把破译者累吐了血,再气吐了血? 我们说过,过去要对付多表替代,唯一的办法就是通过卡西斯基试验找出它的命门,才能予以致命一击。这个命门当然就是密钥长度,超过这个长度的密文必然出现循环加密现象。因此,只要找出了正确的密钥长度,就可以利用重合指数计算来将它拆解成相对简单的单表替代,最终实现对多表替代的彻底破解。现在可好,假如破译者还想用这个招数的话,他就必然面对一个极为尴尬的现实:密文字母至少要在17 576位以后才会出现循环!这个长度,别说一般的密信、密电了,就是真拿一本书来全文加密,也找不出几次重复循环的破绽来啊——前提是,您还不能数错了位,哪怕只数错一位,必定就前功尽弃了…… Enigma密钥的长度,远远超过日常需要加密明文的长度,这个现象在之前的多表替代发展史上简直是闻所未闻。现在,非法接收方就算知道密钥长度是17 576,面对“普通长度”的密文,他依然是无计可施——根本就没有循环加密现象出现,因此所有的后续分析步骤,不管是重合指数还是频率分布统计,已经彻底失效!也因此,密文的安全强度,骤然出现了一个巨大的飞跃——而这一点,才是“量变引起质变”这一论断最重要的注脚! 说来说去,Enigma的诞生,其实也只意味着一件事,那就是长久以来困扰密码编码界的“密钥重复加密”问题,从此彻底烟消云散了。 我们说谢尔比乌斯是个天才,而这位天才的作为又怎么会仅此而已?到这里,也不过刚刚开始展现而已——且让我们继续描述Enigma吧: 谢尔比乌斯认为,这3个内部走线方式迥然不同的转轮,它们的排列形式不应该是固定的,而应该是可以互相换位的。如果我们把3个转轮依次称为1号转轮、2号转轮和3号转轮,而把转轮组的转轮顺序从左到右记录的话,那么排列就不该只是1-2-3这么一种,而是应该有123、132、213、231、312、321共6种方式。一招出手,密钥长度再次膨胀为17 576×6=105 456位 这就意味着,即便是由10万个字母构成的明文,使用Enigma加密时也不可能出现循环加密现象! 谢尔比乌斯认为,这样还是不够的。但是每次增加一个轮子,只能将密钥长度延伸为原来的26倍;而Enigma机器的体积就那么大,出于运输和使用方便的考虑,也不能向里面无限制地添加转轮。这就是说,“增添新转轮”以“延长密钥”的做法,效率其实很低。于是他暂时放下了延长密钥位数的考虑,转过头来研究如何让Enigma的使用变得更方便。 Enigma出现的一个重要背景,就是当时的密文传送手段,已经发生了质的改变。自从无线电报发明以来,人们要远距离传送密文,已经不需要再通过勤劳的邮递员大叔或者往鸽子腿儿上绑密信了。因此,应运而生的Enigma就得适应这个变化,它需要进行加密处理的,正是拟发出的电报明文。 谢尔比乌斯认为,Enigma本身能很方便地加密明文,这只是八字有了一撇;而八字的那一捺,也就是接收方对密电的还原,也就是我们说的“脱密”,也同样需要便于操作才成。因此,如何使接收方能够对Enigma密文进行方便快捷的脱密——区别于非法接收方的破译——就成了摆在谢尔比乌斯面前的一个难题。 千百年来,人们早已习惯加密是加密、脱密是脱密,几乎形成了一个思维定势了。而与Enigma前后脚出现的种种机械式密码机,也继承了这个思路,那就是:通过密码机加密发出密电后,接受方再通过专门配置的设备予以脱密。显而易见,这个思路不能说有错。但是在实践中,自然就产生了一个问题:如果收发双方都有来回通信,则双方就都必须装备两样东西——密码编码机器,以及密码脱密设备。如此一来,体积随之增大、成本直线上升还远不是问题的全部,更重要的是:在密码应用的主要场所——战场,笨重的密码机及脱密设备,还能够适应野战需要么? 不仅如此。我们知道,一个系统正常运转的概率,等于各分系统正常运转的概率之积。换言之,对于密码系统而言,里面涉及的独立分系统越多,则整个密码系统的可靠性就越低。如此一来,多了一个独立的脱密分系统,不仅让接收和脱密成为了两个步骤,而且实际上也增加了机器硬件成本和操作人员培训成本,而且这个举措又在一定程度上降低了全系统的整体可靠性。对于已经是小老板、必须要从商业角度考虑问题的谢尔比乌斯来说,这样的结果,自然是不太令他满意的;毕竟,他这台新机器的总成本已经不低了(后面我们会看到,其实应该说是很昂贵才对),再额外增加脱密设备,其价格必将大幅上升——那么,它还能有多少前途、具体说就是商业前途呢? 就在这时,谢尔比乌斯的同事威利·科恩(Willi Korn)给他出了一个主意:谁说Enigma非得配备一个额外的脱密设备了?咱们把它设计成二合一,问题不就解决了? 公允地说,这个主意实在是帅得要死、酷得要命。不管怎么说,能够脱密Enigma密文的设备,它的原理和构造必定与Enigma有大量的相关之处,否则怎么可能脱得出来?既然这样,为什么就不能把加密部分进行改造,让它同时也能适应脱密的需要呢?他这个同事朋友也是位工程师,出的主意当然具有可操作性——否则,光在嘴上过瘾怎么行?您具体怎么实现,总得有个办法吧——人家还真就给出了实现的办法,那就是在Enigma上加装一个小部件:反射板。 这个反射板,我们不妨把它理解为一面镜子。按照设想,它被安置在了转轮组的终点——左端;这样一来,某个字母信号从转轮组的右端进入转轮组,被3个转轮依次加密后,就从转轮组的左端进入了反射板。 我们说过,反射板像面镜子。因此,进入反射板的字母信号,就被“镜面”直截了当地“反射”回去。于是,从转轮组左端进入的字母信号,现在又从转轮组的左端重新回流进了转轮组。当然,这个信号并不是沿原来的路径不走样地“反射”回去的,而是换了个位置、以另外一条路径被反射回去的——形象地说,就是“走了一条新路”,但大方向依然是“被反射”的。现在就让我们来看看,这个反射,到底是怎么回事吧。 图12Enigma转轮组及反射板原理图1 图13Enigma转轮组及反射板原理图2 看起来似乎没什么,不是么?不过是把原来的走向给反射回去了,路径长了一倍而已;同时,也并没有什么新的加密方式出现,因为还是那三个转轮,而且每个轮子都还没来得及转啊…… 我开始就是这么想的,结果发现,天才就是跟我个人的水准不一样。谢尔比乌斯和他同事的这个创造,带来了一个极具震撼性的结果,那就是:由于这块反射板的加入,使Enigma出现了“加密-解密同相”的特征——或者直白一些说,对Enigma来讲,无论是加密还是脱密,它们的操作是完全一样的! 而在密码发展沿革的几千年历史上,类似这种“加密-解密同相”,或者说“自反”(selfreciprocal)的邪招,简直就是冷门中的冷门!细数起来,敢这么玩、能这么玩的,历史上一共只出现过4次,距谢尔比乌斯最近的那两次,也是在300多年前的16世纪的事情了;另两次,更是分别发生在古印度和古埃及——而这些手工编码方式,当然也早已经被淘汰掉了。谁又能想到,人类第一种真正意义上的转轮密码机,居然也玩起这手了。 增加了反射板之后的Enigma,已经不再需要什么脱密用的解码机了。细究原因,也只有一个: 它的编码机,就是解码机; 它的解码机,就是编码机!