今天是过年返家的第二天,打开电视接着看了一部上次看了一半没看完的电影,叫做模仿游戏,图灵大家都知道,但是不知道他竟然是为此味道,只是知道做出来如此大的共享,却没想到顶着多么大的压力。
对德国造出enigma机器的人也很好奇,就看了这篇文章
Enigma密码机初级解析
在又一次读完1001n兄的《密码传奇》之后,我决定写些东西,对Enigma密码机做一番简要讲述。我打算从Enigma的加密原理和相关历史两方面下笔。Enigma密码机的原理会涉及到密码学及其机械构造,我会试图进行简化,尽量少用专业知识;而历史我会从人物事件进行讲述,避开时间对历史的模糊化。
写这篇文章可能是完全出于对Enigma密码机的热爱,为了对其进行了解并准备这篇文章,我经历了痛苦的思维过程,度过了许多难眠之夜……但这是值得的,前人的伟绩,后人应该知道。
这篇文章能够产生,要感谢我身边的三个人(考虑到公开发表,在此不透露个人信息),他们分别是引领我接触Enigma的人;和我一同讨论Enigma的人;以及将自己相关的亲身经历讲述给我的人。
至于题目所谓“初级解析”,不全是出于自谦,因为我的讲述缺乏相关专业知识,并且对于一些问题做不到深入的解释和分析。但我想,或许更简明,更强调原理层面的叙述更能让人得到纯粹思想上的快乐,《经济学原理》加深了我的这种认识。
Enigma是二战时德军使用的密码机,若是查阅不列颠百科全书,你会发现其中文版将“Enigma”翻译成了“谜语机”,这可不是因为这台机器有什么猜谜功能,所谓“语”,我想就是“密码”之意,指的就是其加密功能,而至于“谜”……希腊语中“Enigma”就是“谜”的意思。而在密码机的专业领域,“Enigma”有一个更霸气的名字―“隐匿之王”!是的,Enigma是密码机的王者,Enigma诞生于1918年,从那之后不断升级进化,产生了诸多后续机型和旁支机型,这一直持续到到计算机加密技术的成熟。在那半个多世纪的时间里,以Enigma为代表的密码机一直统领着加密领域,这也意味着在那风云多变的半个多世纪的时期里,全世界的许多(不是全部,级别较高的机密是要通过更高级的加密方式进行处理)政治经济外交信息都由其保护。就拿二战时的Enigma本身来说,德军的闪电战以及无限制潜艇战都要由Enigma的加密来保证,而二战初期德军的胜利很大程度上亦是由于盟军方面对Enigma的束手无策。随着Enigma的破解,盟军突破德军潜艇封锁,成功完成诺曼底登陆……引用维基百科上的一句话:“人们都普遍认为盟军在西欧的胜利能够提前两年,完全是因为恩尼格玛密码机被成功破译”。对了,“谜语机”有歧义,“隐匿之王”霸气太外露,所以人们还是通常直接使用音译名:“恩尼格玛”( [ɪ'nɪgmə])。
下面我就开始先进行Enigma加密原理的介绍,因为相关历史的叙述离不开对原理的理解,而对Enigma的加密原理的介绍,又需要一些密码学的知识……
简单的密码学基础
密码学是“研究如何隐密地传递信息的学科”。实际上隐秘地传递信息方法很多,但由于信息需要大量传递,长时间传递,以及在多个体之间传递,以至于密码学所研究的内容更偏向对信息字符的加密处理而不是如何对信息隐秘运送。
斯塔夫里阿诺斯在自己的《全球通史》里提到过人类历史与时间的不均衡性,人类在400万年前(或更早)就诞生于这个世界,而我们能够提及追溯的只有几千年,相当于大部分的事件集中于极少数的时间里,这一情况也反映在密码学的发展中。
可能在计算机科学涉足信息加密之前,加密处理也就限于以下两种方法:(有必要说一下,密码的加密基本上还是对字母的处理,例如汉语也要让每个单字对应四个拉丁字母。我们不得不承认,拉丁字母在这一方面更有优势,因为其基本元素是一维方向排列,而汉字的构成是将基本元素在二维平面组合。)
单表加密
单表加密实则就是字母间的一种映射,例如让A对应B,B对应Z,从而构成一张换字表。加密时,对原文按照换字表进行处理,从而实现加密。单表加密的一个经典例子就是凯撒密码:
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
规律实则是将每个字母向后推了三位。例如code→frgh
单表加密的破解很早就被完成了,因为一张换字表仅仅将字母进行了一次替代,而字母本身的出现次数,单词句法的一些规律依然未被改变。例如,英文(还有德文法文……)中字母“E”出现的频率最高,若是在截获的大量密电中统计得到某个字母出现频率最高,那它就应该对应着字母“E”,其余的也是通过这种方法(频率分析法)。同时,还可以通过对密文进行观察,猜出一些字母对应,因为单表加密中每个字母只有一次替换,所以一旦破译,就会完全暴露,从而进一步简化后面的工作。所以在早期的密码破译中,语言学家会发挥很大作用,因为对文字的直觉可以大大简少破译的工作量。
多表加密
多表加密产生于15世纪(注意单表到多表的时间跨度),所谓多表,实则就是“多张单表”,是使用多张换字表进行加密。例如,第一张表中“A”对应“B”,那我加密时第一次遇到“A”就要将其加密为“B”;第二张换字表中“A”对应“C”,那么第二次遇见“A”,就要加密为“C”……这样,若是我想加密“AA……”,那么密文就会是“BC……”。当换字表用尽时再进行下一轮循环。
根据我的理解,多表加密实则是有周期的单表加密,其优势就是这个周期性。因为多表加密可以将同一字母进行多种替代,从而使字母和句子本身的特性消失,相当于冲掉了字母出现的高频率。频率分析法也就失效了。
以维吉尼亚密码为代表的多表替代因其“不可破译”而被称为“密码之王”,这一直持续了大概300年,直到的查尔斯•巴贝奇出现。
查尔斯•巴贝奇,计算机科学的先驱,设计过差分机,分析机,这些都是早期计算机的模板。关于他本人的一些故事,在此就不赘述了,我总觉得有些悲情……
说说多表替代是怎么被破掉的(系统地阐述多表破解的是德国人卡西斯基,那阵子德国还叫普鲁士),我在前面讲过,多表加密就是有周期的多组单表替代,所以破译就是从这个“周期”切入。密文中一般会反复出现一些字母组,统计字母组间的字母数,就可以知道这两对组间使用了多少张表进行加密,这个表的张数,很可能就是真正的换字表张数(或因数),之后通过一定的数学分析,就可以最终确定换字表的张数,也就是所谓“周期”。将密文内容按周期数横向排列,之后再观察纵列。这时的纵列,实际上已经是消除过周期干扰的单表替代了!因为纵列的字母实则是由一张换字表加密出来的。这时频率分析法就又有效了,多表加密也随着简化为多组单表加密而被攻破。
说了这么多加密的东西,实则就是为了引出Enigma,因为Enigma使用的是单表加多表!
Enigma结构及加密原理
我会试着将Enigma的加密原理和机械构造穿插讲解,以让大家较好地理解,原理上主要是应用一些排列组合知识。
先通过主要结构讲一下信息在机器内的流动。
键盘:加密人员通过键盘进行输入
转轮:这是Enigma的核心部件,Enigma上一般装有至少3个转轮。每个转轮有代表26个字母的触头和触点,触点和触头在转轮内部有导线相连(例如输入A和输出B相连,一个转轮实际上就是一张换字表),同时外部有棘轮控制转动的幅度。当按动键盘上的单键时,最右边的转轮就会转动一次,每转动26次就会发生进位,带动下一个轮转动,这犹如钟表上的指针。每当转轮转动暂停下来,转轮的触头就会和下一个转轮的触点重新接触,构成通路,按动单键产生的电信号就会经过三个转轮(转轮的触头和下一个转轮的触点有26种接触可能,就是26种通路可能,也就是26张换字表)。
反射板:从最后一个转轮出来的电信号会经过反射板,反射板会对信号再次进行置换,接着反射回去,让其再次通过三个转轮,随后输出。
显示板:输出的字母会在显示板上展现,随后会另有机器打印记录。
连接板:设置在机器底部,可以将一对字母短接,相当于是单表加密。
输入的信号就这样经过加密并输出:
以上都是基于静态下的分析,至于动态嘛……才是Enigma“不可破译”的核心。
前面已经提到,两个转轮间触头触点的变化相当于26张换字表,那把右轮和中轮,中轮和左轮,左轮和反射板都考虑进来……应该有26×25×26种可能,即相当于产生了16900张换字表(注意由于有所谓“双重步进”(Enigma的特殊机械特点),即左轮进位时还会带动中轮再次进位,相当于中轮一次走了两位,所以中轮只有25种排布可能);再加上一般转轮都是5选3,这三个轮还可以随机排列,就是 =60;再加上连接板可以使6对字母替换: ×11×9×…×3×1=100391791500。综合以上,Enigma理论上可以产生16900×60×100391791500=101797276581000000张换字表!换句话说,除非你一篇文章中有某个字母重复出现十京一千七百九十七兆两千七百六十五亿八千一百万次,否则连周期有都没有!
是的,理论上Enigma是不可破译的。
Enigma还有一点值得称道,就是反射板,反射板的存在使得Enigma兼具加密和解密功能,即加密得到的密文再次输入又能得到明文。我是这样理解的,电信号通过三个转轮实际上是在被进行“加减法”,即是在调整字母的序号,因此电信号正向通过和随后的反向通过是属于同级运算,同级运算是可以调换运算顺序的,就好比5+2-3=4,4+3-2=5。这也使得Enigma不需要配备解密机。
关于反射板在此有必要再多说几句,上面的“26×25×26”强调的是三个转轮的瞬时状态,即存在26×25×26种转轮状态,而不是因为电信号要经过三个转轮才这样算(要知道,实际上经过了六个转轮,但前三个定了,后三个就不会变化,因此后三个不用再算)。
关于Enigma密码机加密原理我就想说这么多。电信号式密码机还是很先进的,要知道我国到了80年代才淘汰掉纯机械式改用电信号式,那时已经离使用电子式密码机(就是计算机技术)不远了……
Enigma操作流程
Enigma的操作我个人认为比较繁琐,当然这也是出于安全的考虑。前文已经提到过,能使Enigma发挥强大加密作用的正是各个元件的相互组合,而真正能使各个元件真正发挥作用的,我认为正是操作过程中的正确设置和使用(多说一句,Enigma被攻破一定程度上也是因为不合规范的操作)。
在这里建议大家使用Enigma模拟器(可以找我要,也可以直接下载:http://ishare.iask.sina.com.cn/f/14573783.html?from=like),随着下面的讲解逐步操作:
按照密码本的规定设置:
密码本规定了机器的初始设置(中文的密码本还记录着单字对应的字符),其作用是统一各部机器以便于解密,并通过经常的更换防止被破译。
选择转轮:5个(或者6,7,8个)转轮中选3个(或者4个)。
设置凹口圈(凹口圈装在转轮上用以控制进位):将每个转轮的凹口圈正确调整。
设置连接板:根据密码本上规定的连线关系连接字母。
确定转轮位置:按照转轮的编号拼装,并最后装机。
发报员自行设置:
当上述设置完成后,实际上已经可以加密发报了,但密码破译存在一个“临界量”,即若是由同一密钥(可以理解为设置)加密的密文传输太多,会很容易被破译(概率统计的大数原理?宏观经济规律?我觉得好像是一个机理)。指标组就是发报员在规定设置完成后,自行选择任意的三个字母,连续输入两遍,将得到的6个字母置于密文起始位置,之后再将密码机转轮按那三个字母进行设置,重新开始正式发报。收报员按照密码本设置密码机完成后,输入指标组密文,会得到两组同样的指标组明文,随后重新设置密码机,正式解密密文。指标组可以在密钥相同的情况下,造成信息的不规整(不同的指标组代表着不同的机器设置),从而避免密文被大量截获后破译。
现在各位试一下吧:
今天的转轮组是ⅡⅢⅣ(Wehrmacht/Luftwaffe-UKW型Enigma,B反射板,型号是在反射板上体现的),凹口是A,B,C,转轮设置ENI,连接板连接AB和CD。
密文:RUUFRONBGGG XFYXR JMMCU HWYLI OIPYA MZSLG FLJVR YZORP NLSRB VMNPR K
解密成功的就把明文发出来!
Enigma的兴盛和衰亡
关于Enigma的历史,人们已经很好地给出了分段:三个人,三个国家,以及所对应的有关Enigma的三个时期。
德国 谢尔比乌斯 兴盛
1918年,德国人谢尔比乌斯为自己的转轮密码机Enigma申请了专利。同时期的类似产品层出不穷,但可以说只有Enigma能够有巨大的效应和影响,因为Enigma装备了德军。
Enigma在诞生后的五年里可以说是无人问津的,因为当时的人们还不能理解密码机的安全性能,而且Enigma当时的售价高得惊人,折到今天似乎能买辆车了。想一想,一般的企业或团体是装配不起大量Enigma的,更何况它们没有高安全性加密的需求。
有加密需求又有钱,那估计也就是军方了。
Enigma能被德军使用,还要感谢一位英国人,他就是我们非常熟悉的温斯顿•丘吉尔爵士……丘吉尔一战时任英国海军大臣,在战争结束内阁倒台后,老丘寂寞无聊写了部《第一次世界大战回忆录》(直译为《世界危机》,要知道他的《第二次世界大战回忆录》是拿了诺奖的),书中就透露了一战时德军密码早在开战时就已经被协约国破译了。
德军从书中得到了这条重要信息,随即开始重视加密工作,Enigma也就赶上了好时机被大量采购装配军方。1926年Enigma被大量装配军方,而在之后的接近8年时间里盟军(姑且这样叫吧)对其手足无措,而在二战中Enigma更是发挥了巨大的作用,直到后期才被最终破译。
再无聊地说一句,那个时期发明密码机的工程师多是穷困潦倒,谢尔比乌斯算是例外,只可惜他老人家在1929年死于一场交通事故(骑马撞墙上了……)。
波兰 雷耶夫斯基 初步破译
前面说到,自从Enigma装配德军,盟军方面就再没有破译出有用的信息。英国和法国对此倒不怎么着急,因为它们觉得德军受一战条款的约束,不会在短期内做出什么大的动作,即便德国闹起来,再把它打赢就是了……英法的密码机构可以说度过了碌碌无为的八年,而在1926到1933这将近八年时间里,波兰人挑起了重担。
波兰人率先破译Enigma也实属无奈,这要从地理位置说起,波兰夹在德国和苏联之间,从战略上正是两国冲突的聚集点,当时明眼人都看得出来,波兰被瓜分是迟早的事,波兰人也都感到了这种窒息的压力。可以这么说,正是当头的国难促使波兰人以极高的效率破译苏军和德军的密码。
在波兰密码破译机构的帮助下,波兰军队曾经战胜了苏联军队,拯救了国家。而在西线,对德军的密码破译也有很高的水准,但就像前面讲到的,从1926年开始,德军密码逐渐地无法破译了。
1928年,转机出现了,德国驻波兰使馆的一个丢失的邮包落入波兰情报部门,而邮包里就是一台Enigma。之后的1931年,供职于德国国防部密码局的施密特先生,将Enigma的操作流程,核心原理,和设计细节等相关文件泄露给法国情报人员,法国情报人员又在之后将这些资料和英国以及波兰方面进行了交流(英法直接将其束之高阁……)。当然,有了Enigma样机,有了操作流程,还是没办法对其进行破译,因为Enigma本身代表着当时加密的最新理念:即便算法(加密机器,加密流程)泄露,在没有密钥(加密设置)的情况下,也可以不被破译。相当于把一台Enigma放在你面前,告诉你怎么用,你还是破译不了。
波兰人清楚,终究要靠自己的力量破译Enigma。它们的人才培养机制发挥了很大的作用,大批有才华的年轻人投入到密码破译工作中,“数学三杰”最有代表性,而“数学三杰”的首要人物正是雷耶夫斯基。
雷耶夫斯基首先发现了指标组的漏洞(指标组是经过密钥加密的,而且前后是一样的字符,因此会暴露密钥的信息),在分析大量的密文后,可以计算出转轮的配置连线情况。随后他发现了所谓的“字母循环圈”,即将一个字母输入,再将得到的字母反复输入,最终会回到这个字母本身。雷耶夫斯基从数学上严格证明,在同一密钥加密的情况下,字母循环圈的个数及其分别包含的字母个数是固定的,不随字母的两两交换而变化。字母的两两交换……是的,这相当于屏蔽掉了连接板的功能,相当于将Enigma总换字表数缩短了100391791500倍,相当于Enigma有效加密只有105456张换字表!
之后的工作就行相对简单了,工作人员通过转轮设置,和密文进行对应,从而找出密钥,实现破译。
后来随着密文难度和数量的扩增,以及密钥更换频率的增大,波兰方面不得不研发出循环测定机用以破译德军密电,之后又升级为著名的“Bomba”(炸弹)。
波兰密码破译在当时达到了很高的水平,但可惜波兰过早地被德军占领,以致于密码机构难再运转,这时波兰军方找到了密码破译的盟友—英国和法国。波兰方面将自己的成果完全移交英法方面,英法相关人员见到波兰人的成果目瞪口呆,遂着手Enigma的破译,怎奈法国不久亡国,最终破译Enigma的重任也就压到了英国人肩上。
说说波兰的密码破译人员。波兰亡国后,他们就被遣往集中营,之后辗转反侧,历经艰辛,最终有一部分逃到了英国,不过他们没再从事Enigma的破译工作,最多破译一些简单的密码。而战后他们也大多留在大学教书。雷耶夫斯基干脆当了个会计,他也终于在自己的晚年决定讲述自己的故事,波兰人的贡献也才被人得知。
英国 图灵 最终破译
英国人享受着战前平静的生活,密码破译人员在这期间也是碌碌无为。但当波兰人将重任传递给英国人时,英国人以极高的效率开始了工作。
布莱奇利庄园,一个密码破译的传奇之地,位于离伦敦只有几十公里的小镇上。无数的天才就是在庄园里的棚屋中最终攻破了Enigma,而这些天才中,我只想提一位—艾伦•图灵。
或许在轻松的环境中才能诞生真正的天才,图灵就诞生在初期避开战火的英国。讲图灵我很早就有了构思,英国官方给图灵的纪念铜牌上写着三句话,我就从这三句话开始:
“艾伦•图灵,计算机科学之父,战时密码的破译者,偏见的牺牲品。”
计算机科学之父:想必业内人士都清楚这一点,图灵通过“虚拟机器”的构想,证明了数学的不完备性,而虚拟机器本身就是计算机科学的基础,图灵完成这些理论的时候还不到24岁……
战时密码的破译者:图灵借助自己的“图灵机”理论,巧妙地避开了连接板,从密文全文入手进行破译,并带领制造了“Bombe”破译机,英国对德军密电的破译最终也达到了接近实时破译。
偏见的牺牲品:这里就多说一些图灵的琐事:
图灵小时候分不清左右。
图灵14岁时,一天赶上公共交通罢工,就自己骑了90公里自行车去上学。这事情还上了当地报纸。
图灵曾参加过马拉松比赛,成绩是第四名,只比次年的奥运冠军慢了12分钟。
图灵去庄园上班的时候自行车总在特定的圈数掉链子,于是图灵就发明了一个计数器装在车上,到时候了就刹车。(呃……他为什么不去修车子)
说这么多,只是想说图灵这个智商极高,运动极好的天才,有着一些异于常人的特点,而他最异于常人的特点,就是他的性取向……
图灵在中学时就是个同性恋者,他喜欢上了一个男孩子,可惜那个男孩子死于疾病。再加上后来战争爆发,人们也就一直没能发现图灵的这一问题。1952年,一名盗贼在一次盗窃图灵家的过程中,发现了图灵是同性恋者。随后图灵被指控“严重猥亵”,被注射大量雌激素,身体和意志遭到严重摧残。在1954年的一早,人们发现图灵死亡,身旁有一个咬了一口的苹果,后经化验,苹果中有氰化物。蘸毒的苹果,不就是源于《白雪公主》吗?图灵对这部1937年上映的动画电影很是着迷,就连自杀也选择了这种方式,或许天才就有这分孩子气,他们往往承受不了社会的冷酷。
再说说苹果公司的Logo,人们说“咬一口的苹果”和代表同性恋文化的彩带条都是为了纪念图灵,虽说这些传言都被否定了,但我们不妨就当作是美好的联想吧,图灵值得后人纪念!
Enigma终于被英国人完全破译,这也加快了盟军胜利的进程。要说“不可破译”的Enigma失败的原因,我觉得很大程度上缘于德军错误和过多的使用,让地方破译人员找到了破绽。
现在的Enigma已经仅仅是一段历史了,人们对其的欣赏或许已经大于研究了,但其历史地位是不会被撼动的。Enigma在二战结束后就停止了发展,但美英等国仍以Enigma“不可破译”的名义鼓动诸多国家使用Enigma,从而方便地得到机密,从这个角度看,Enigma也算是没有立即退出历史舞台。当然,还是不得不说,科学技术服务于军事和政治或许是一种无奈。