二战图灵破解恩格玛机的原理 |
您所在的位置:网站首页 › 如何破解3d漫画密码 › 二战图灵破解恩格玛机的原理 |
最近看了一部电影,叫《模仿游戏》,主要讲的就是二战期间图灵破解德军通讯密码的故事,最后的意义是导致二战提前两年结束,拯救了至少1400万人的生命。电影主要以讲故事为主,后来研究了一下伟人的破解原理,用最简单的语言科普一下,这里不需要各种数学知识,没有复杂的公式,相信我,坚持耐心看完,你一定能看懂。 1.第一回合:我们先来看一种最简单的加密:单表替换所谓替换,就是将明文按照一张固定的表,替换成另外的字母,比如替换表如下: 原文|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z| 替换|C|O|M|P|U|T|E|R|S|V|W|X|Y|Z|A|B|D|F|G|H|I|J|K|L|N|Q|加密 在加密的过程中,第一行的字母会被替换成第二行中的字母,比如: - HELLO-->RUXXO - AND-->CZP - THE-->HRU解密 解密的过程中,首先要拿到这张表,根据加密后的密文去查表,从而恢复出铭文 这样一个最简单的加密暴力破解难度有多大呢?答:26个字母的字母的全排列,大约是10的26次方数量级,这意味着如果全世界60亿人每人每秒可以测试一种可能的密码表,也需要21亿年才能试完所有的排列组合。然而这样也安全的话密码学也就可以退出历史舞台了。 破解 看看键盘上的字母分布?为什么要是乱序而不是ABCD按照顺序排列呢?键盘的设计按照了字母在英文中出现的统计频率进行了位置排列。下面这张图片来自维基百科,显示的是26个字母在普通的英文文本中出现的概率: 在第第一回合中:我们使用了单表替换,很容易被使用概率统计的方法破解,后来人们在这种基础上,使用了多个表,假设使用两个表: 原文|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z| 表一|C|O|M|P|U|T|E|R|S|V|W|X|Y|Z|A|B|D|F|G|H|I|J|K|L|N|Q| 表二|A|I|R|P|L|N|E|F|G|H|J|K|M|O|Q|S|T|U|V|W|X|Y|Z|B|C|D| 加密 明文第一个字母在第一张表查,第二个字母在第二张表查,第三个字母又在第一张表中查,也就是2作为一个循环。 比如: HELLO–>RLXKA 注意看HELLO中的两个L分别别替换成了X,K,用这种方式来抵抗字母频率分析。既然两个表可以,那么可以使用更多个表,比如: 解密同1 有人说,为何不使用非常多的替换表进行替换呢?哪个时候没有计算机,完全手工进行加密解密,密码表太长,加密解密靠手工效率非常低。 3.恩格玛密码机的工作原理先来看看看着家伙长什么样子:
它长这个样子: 我们在前面讲过,三个转子本身可以提供大约十万个密钥,扩大1000亿倍之后就是10^16个密钥。如果使用暴力破解的话,就算一秒钟验算一万个密钥,也需要三万多年才能穷尽所有的组合,而德军一条密钥的使用时间只有24个小时。对于破解者来说,恩格玛机所产生的庞大的密钥数量几乎让人断绝了一切进行暴力破解的念头,更不用提德军在1938年又把转子数量从三个提高到五个,海军后来又干脆提高到了八个。 以上就是恩格玛机的原理。已经看到了这里,继续加油,后边也不困难的。 3.3如何使用恩格玛机?恩格玛机的操作员每个月都会收到一本新的密码本,指定本月中每一天所使用的密钥。具体包含三个信息: 1.三个转子的排列顺序(例如三个转子从左至右编号分别为2-3-1)2.三个转子的位置分别对应一个固定的刻度(例如三个转子分别转动到Q-V-M对应到相应的刻度)3.插线板的设置(对哪些字母进行交换)恩格玛机所提供的密码系统在那个年代已经是登峰造极了,但有着轻度被迫害妄想症的德国人还是不太放心。虽然每条密钥的使用时间只有区区24小时,但一天之内还是会有成百上千条信息被发出。在本文的第一部分“替换加密的原理和破解方法”中我们也可以看到,敌人截获的密文越长,就越容易发现其中的规律和模式。 于是,德国人又采取了一样非常聪明的防范措施: 操作员在按照密码本上的指示设置好恩格玛机后,再发送每条信息前,都要随机选取三个字母作为对本条信息加密的三个转子的初始刻度。是的,“随机”的意思指的就是操作员本人在发送信息的这一秒里脑海里浮现出的任意三个字母。 这样做有什么好处呢? 每天通讯的内容只有每条信息的前六个字母是用密码本上的规定的初始位置加密的,而每一条信息的正文都是用不同的密钥进行加密的。如此一来,大大降低了敌人针对每一个密钥所能截获的密文长度。 加密 1.按照密码本的规定,调整三个转子的顺序,假设为2-1-32.按照密码本的规定,转动三个转子到相应的刻度3.按照密码笨的规定,用导线连接相应的字母,实现字母的替换4.随机找三个字母,假设为T,G,S5.依次输入两边(为了防止输入错)TGS,每次输入完一个字母,记录当前输出,转动一下第一个转子(当第一个转子转动一圈后,第二个转子将会转一格,第三个同理)6.假设本此输出的六个字母为BMXYUI,将BMXYUI发送出去7.将三个转子分别拨到T G S位置,开始输入需要加密的正文消息,输入一个字母拨动一下第一个转子,记录输出,这些输出就是密文解密 1.按照密码本的规定,调整三个转子的顺序,假设为2-1-32.按照密码本的规定,转动三个转子到相应的刻度3.按照密码笨的规定,用导线连接相应的字母,实现字母的替换4.将收到的前六个字母(假设为BMXYUI)输入,由于两边的机器设置都是一样的,于是得到输出序列TGSTGS5.将三个转子拨动到T G S位置,将收到的密文输入,输入一个 字母反向拨动一下第一个转子,记录输出,得到明文坚持读到了这里,恭喜你已经站在几十年前伟大的破解者同一起跑线上了,加油! 4恩格玛机的破解看了这么多原理,终于要进入破解之路啦! 我们来总结一下解密需要的信息: 1.恩格玛机的工作原理及内部构造,包括每个转子的线路连接;2.德军的对恩格玛机的操作守则;3.德军所使用的每日初始设置。恩格玛机的每日初始设置包含了三个信息:即转子的排列顺序、每个转子的初始位置、以及插线板的设置。这些信息被印刷在密码本上分发至全军,每24小时更换一次设置,每月更换一次密码本通过间谍活动,波兰人(你没看错,确实是波兰人,图灵是在波兰人的基础上做的)得到了1和2,接下来,波兰人需要做的就是破解德军所使用的每日初始设置(下文简称为日密钥) 通过以上的总结,我们了解到:每条信息的正文都是用不同的秘钥(三个随机字母)加密的,但是前6个字母是使用当天的日秘钥加密的,这看起来很完美,但是波兰人雷耶夫斯基用难以置信的洞察力发现了其中的一个漏洞。 我们想象雷耶夫斯基截取到了一段德军的电文,前六个字母是:HGABLE,他知道这是三个字母连续输入两次恩格玛机的结果,虽然我们不知道这三个字母是什么,但是知道HGABLE中的第一个字母H和第四个字母B是同一个字母加密后的结果,由于转子在期间转动了三次,所有同一个字母在两次加密时被替换成了不同的字母,我们可以吧它们组成一对: H - B 如果雷耶夫斯基在一天之内接货到了更多的电报,对每封电报的前六个字母进行类似操作,就可以得到更多字母对,直到26个字母全都对上: H - B A - O … Z - U 我们来想想恩格玛机的本质是什么? 那个时候没有用到混淆扩散,就是简单的字母替换。 在设置不变的情况下,输入的26个字母得到的替换字母都是确定不变的。 为了后边方便,我们设定一个规则: 这个公式非常简单,不要害怕,我只是为了好描述 A经过转动n次转子后替换后变成成为B描述为:A(n)=B 上边截获的HGABLE,我们假设明文为X,Y,Z可以描述为: X(0)=HY(1)=GZ(2)=Ax(3)=By(4)=Lz(5)=E我们来回想恩格玛机的其中一个个重要性质: 自反,例如A加密后为G,则G加密为A 这可以描述为A(0)(0)=A,好像有点意思了,我们把第四行X(3)=B可以写为: X(0)(0)(3)=B我们在去看看X(0)=H,H是我们已经截获的密文,那么上边就可以变成: H(0)(3)=B神奇的事情发生了,原始的X被抵消掉了,H和B之间的关系和加密每条信息的开始设置的随机数是没有关系的,只与一天的初始配置有关系,即开始时候三个转子的初始位置。 我们再来想想(0)(3)的物理意义:即将恩格玛机按照密码本设置好后,在转动三格得到的一种替换,本质还是单表替换,与文章开头的单表安全一样。 当截获大量的通信的前6个字母后:可以得到很多这样的消息: x1(0)=B x2(0)=C x3(0)=Mx1(1)=F x2(1)=A x3(1)=Rx1(2)=B x2(2)=O x3(2)=Qx1(3)=L x2(3)=Q x3(3)=Ux1(4)=K x2(4)=G x3(4)=Yx1(5)=J x2(5)=W x3(5)=X等等,用上边的推理,可以得到一张(0)(3)对应的表: 如图: 如果制造100台恩格玛机,100个人同时进行暴力破解,每人10秒一次检查,可以再3小时内完成,具体方法是: 每次在这10万种可能中选一种,然后转动三格,检查对应关系是不是上边分析出来的对应表。 但是由于插线板的存在,将可能的组合提高了很多,比如:将A的线和M的线连接起来,输入A的时候,A线转化为M再进入三个转子,M同理。瞬间组合可能提高了非常多。 这个时候,雷耶夫斯基找到一个非常巧妙的方法,消除了插线的干扰。我们先来做一个联系,假设有个八个字母的密码替换表如下: 明文|A|B|C|D|E|F|G|H| 密文|C|H|E|F|A|B|D|G|我们可以来一个首尾接龙的游戏: 上边这个密码替换表中,A被替换成C,C被替换成E,E被替换成A,首尾接住了,分为一组: (A,C,E)B被替换成了H,H被替换成G,G被替换成D,D被替换成F,F被替换成B,首尾接住了,分为一组: (B,H,G,D,F)原始的替换表就变成了(A,C,E)(B,H,G,D,F),和密码替换表完全一样,这样对于每种可能的密码替换表都可以写成这种形式,可以表示为[3,5],这样,随便用线将两个字母连起来,交换两个字母,都不会改变每个分组的长度,这样就绕开了插线的干扰,我真想说,这些人的脑子是怎么长的,佩服的五体投地。 接下来是体力活:刚分析了光26个字母和三个转子可以组成大概10万众可能,然后人工对这10万种可能进行我们上边玩的首尾接龙游戏,然后按照分的组数,每组的长度进行分类,接着在利用上边截获的报文的前6个字母得到的(0)(3)表叶玩一次首尾接龙游戏,得到这这个表的分组情况,利用分的组数和每组长度去分相应的分类中进行暴力查找,这个查找次数比10万小很多很多 到这里,波兰人已经拿到了德军日密钥中除了插线板意外所有的内容。 得到转子的设置之后,雷耶夫斯基将会把一台恩格玛机按照这种设置装好,但是插线板不接线,把一段密文输入机器,他将得到一段没有意义的信息,因为信息中的六对字母被随机对调了,但是这种字母互换只是一种非常初级的加密方式,连我们最开始讲的单替换表都不如,可以人工根据单词的意思猜测到哪六对字母互换了,这样就拿到了插线板的设置。 这样,波兰人就拿到了德军日密钥的全部内容,也就是雷耶夫斯基与德军中的接收员处在了完全对等的位置,德军所有的通讯对于波兰人来说都是完全透明的。 说到这里,图灵还没有出现 那么图灵做了什么呢? 德军在二战爆发前后,又采取了很多措施来加强恩格玛机的安全性(变态啊),其中的一些使得波兰人上面的这种破解方法失效: 1.1938年9月15日开始,德军干脆连日密钥中的转子位置也让操作员自己选择。这样一来,就连每条信息的前六个字母也变成是用不同密钥加密的了。2.1938年12月15日,德军把转子的数量从三个增加到了五个,安装的时候从五个里面随机选三个安装在恩格玛机上,将可能的转子组合增加了10倍。更重要的是,有了多出来的转子,波兰人做的分类目录就失效了。3.1939年1月1日,德军把插线板上交换字母的最大数量从6对增加到了10对。4.1940年5月1日,德军规定每条信息的信息密钥发送一遍即可,无需重复两次补充内容,可看可不看 有人好奇上边第一条中密钥中转子的位置让操作员选择,那么解密方怎么解密呢?如果你对这个好奇,就继续看,如果不好奇,就简单理解为波兰人那一套行不通了,这部分可以不看。 在后期的恩格玛机中,德军又对转子进行了改造,使得转子芯外面的字母圈可以绕着转子旋转。这样一来,德军的日密钥内容就变成了以下三个部分: 1.从五个转子中选择三个特定的转子,并按一定顺序排列;2.每个转子外侧的字母圈相对于转子芯的位置;3.插线板所交换的10对字母;这里请大家注意,在德军实行新规定之后,日密钥中已经不存在每日通用的转子初始位置。在发送每一条信息前,操作员都要自己选择转子初始位置,然后再自己选择本条信息的信息密钥。 举例来说,操作员按照密码本上的日期对恩格玛机完成三项设置后,准备发送一条信息。在发送前,他选择了ABC和XYZ分别作为转子初始位置和信息密钥。他首先把恩格玛机的三个转子拨动到A-B-C的位置上,键入两次XYZ后得到HBLZQO,这样就完成了对信息密钥的加密。接着他把恩格玛机的转子拨动到X-Y-Z的位置上继续输入信息的正文。 那么这个操作员怎样把ABC这个转子初始位置发送给接收方呢?答案是用明文发送。是的,你没看错,就是明文发送!所以操作员将会依次以明文发送ABC,接着是加密过的HBLZQO,最后是以信息密钥加密后的信息正文。 接收方收到以上信息后,会首先将恩格玛机拨动到ABC的位置,键入HBLZQO后得到XYZXYZ,于是他知道接下来的信息正文是用密钥XYZ加密的。接着他只要把恩格玛机转动到XYZ的位置键入密文,就可以得到信息的明文。 就算破解者截获到这段电报并且知道ABC是明文,也无法知道本条信息的信息密钥。因为破解者不知道德国人手中恩格玛机上的字母圈相对于转子被旋转了多少位,所以并不知道ABC所对应的转子真实位置到底是什么。 雷耶夫斯基巧妙的利用了德军“每条信息的前六个字母都是用同一个通用密钥加密”这一点来进行破解。但是德军采取上述做法之后,每条信息前面的这六位字母都变成是用不同的密钥加密的。所以雷耶夫斯基的破解方法也随之失效。 不过,这个时候的波兰人又想出了另外一种有效的方法进行破解(人类智力的潜能真是无穷无尽啊),直到1940年德国人规定信息密钥只需输入一次后,才彻底失效。 5.图灵的工作接下来,英国人图灵出场了。 1939年德军进攻波兰前夕。波兰人将恩格玛机的复制品和他们掌握的破解方式提供给了英法两国。图灵虽然赞叹波兰人的只会,但是他意识到这种破解方式过度依赖德国人的漏洞,后来德军升级恩格玛机,这种破解方式随之失效,于是图灵追求的是一种更加直接暴力的破解方式:机器对抗机器。如果说波兰人是利用敌人防线上的漏洞进行伞兵奇袭,那么图灵想要的更像是步兵师的正面对抗。机器创造出来的密码怪兽,只有用机器才能战胜。而人类的任务不过是设计机器的工作原理以及优化机器所要进行的运算量。 做了这么长的铺垫,终于要进入大结局了。我们来一起看一下英国人的破解恩格玛机的。 首先,英国人需要在密文中确定一条“Crib”。所谓Crib,指的是一段猜测出来的明文与密文中字母的一一对应关系。在密文中猜测出几个单词的明文并不困难,因为循规蹈矩的德国人在信息正文中喜欢用固定的词组,比如Keine besonderen Ereignisse(无特殊情况),Heil Hitler(希特勒万岁)等。另外一个例子是英国人发现德国人喜欢在早上6点钟发送一条天气预报,所以在早上6点钟截获的电文开头中肯定包含wetter(天气)这个词。在《模仿游戏》中,讲的是希特勒万岁。 猜出密文中包含的明文单词后,如何精确地确定它们的位置呢?希望你还没有忘记我们前面讲过的恩格玛机的第二个非常非常重要的性质,那就是一个字母永远不会被替换为自身。根据恩格玛机的这个特性,我们可以把一段明文字母在猜测对应的密文上方来回移动进行判断。下面我们用德文单词wetter做一个简单的示例: 在上面这张图片中,明文位置1可以被排除掉,因为在这个位置上明文中的E又被加密成了E,而这是违反恩格玛机特性的。同理,明文位置3也可以被排除掉,因为明文中的R又被加密成了R。排除掉不可能的情况,明文位置2就极有可能是wetter这个单词所处的真实位置。这样我们就得到了一个Crib,其中明文与密文的对应关系如下: 明文|W|E|T|T|E|R| 密文|E|R|K|M|G|W|在上边这个对应关系中,图灵利用其中首尾相接的字母链设计出了可以暴力破解恩格玛机的机器。这段的加密过程为: w->位置0加密->E->位置1加密->R->转子5加密->w 首尾相接了我们来详细看一下w->E的加密过程: 当操作员按下W后,如果W上接线和另外一个字母连接了,就替换成另外的那个字母,没有接线就替换,我们记操作员按下W后,没有进入转子之前生成的字母为V1,V1经过三个转子加密生成V2,V2经过插线板(有线替换,没有线就不替换),输出E 我们将W-E-R-W这个字母链连接成一张图,用三台恩格玛机串联,如图: 那么图灵工作的精髓来了: 用三个恩格玛机的转子串联起来,从刚才我们计算的所有可能中选一种,作为第一个恩格玛机的位置0,第二个恩格玛机相对于第一个偏差1,第三个相当于第一个偏差5,暴力破解者写所有的可能为: — 所有转子可能位置:26X26X26种 转子排列顺序为: A33=6种5个转子任选3个:C53=10种总的可能:610262626=1054560种每次在V1位置输入A-Z这26个字母,V4位置正好对应这26个字母,那么当前的转子位置0就是德军加密时候设置的位置0。如果有足够多的Crib,甚至可以直接锁定唯一的转子设置,没有的话就是暴力破解者100多万中,机器应该很快,那个时候还没有计算机,以现在的i5也就是秒级别的破解吧。 至于电影提到的在酒吧遇到的一个女的猜测她喜欢的男的有女朋友的片段对图灵的启发应该在于:帮助图灵找到灵感,找到上文中提到的wetter这个单词,电影中用到的是:希特勒万岁。 我们来看一下这个机器长啥样: 这个也是看知乎上大神的回答,自己看了在难以理解的地方又添加了点东西让更容易理解,但是我还有一些疑问希望和大家共同探讨: 1939年德军将密码机升级了以后,有个重大的改进:每个转子外侧的字母圈相对于转子芯有一个偏移,德军通信的时候,自己随机选择一个初始位置(例如ABC),将其作为初始位置,用明文发送给对方,接收方收到是ABC,然后将自己的机器初始位置设置为ABC,然后再去解密对方接着发送来的以后发送消息时候要用的初始位置。这里有个疑问:对于波兰来说,同样可以接受到明文的ABC,文中提到的之所以波兰截获到ABC也不会解开接下来发送消息要用的解密密钥的初始位置,因为波兰不知道他们机器的转圈上的字母相对于转子的偏移。那么问题来了,如果缴获或者用间谍搞到他们一台密码机,是不是整个密码体系就崩溃了?欢迎讨论。 致敬!-----------------------------------end------------------------------------ |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |