最近看了一部电影,叫《模仿游戏》,主要讲的就二战期间图灵破解德军通讯密码的故事,卒、最后的意义是导致二战提前两年结束,用最简单的语言科普一下,这里不需要各种数学知识,没有复杂的公式,相信我,坚持耐心的看完,你一定能看懂!
1.第一回合:我们先来看一种最简单加密:单表替换
所谓途欢,就是讲文明按照一张固定的表,替换成另外的字幕,比如替换表如下:
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|
2| 替换|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|
加密
在加密的过程中,第一行的字幕回被替换成ie人行中的字幕,比如:
1| - HELLO-->RUXXO
2| - AND-->CZP
3| - THE-->HRU
解密
解密的过程中,首先要拿到这张表,根据加密后的密文去查表,从而恢复出铭文
这样的一个最简单的加密暴力破解难度有多大呢?答:26个字母的字母的全排列,大约是10的26次方数量级,这意味着如果全世界60亿人没人没秒可以测试一种呢可能的密码表,也需要21一年才能试完所有的排列组合。然而这样也安全的话密码学也就可以退出历史舞台了。
破解
看看键盘上的字母分布?为什么要是乱序而不是ABCD按照顺序排列呢?键盘的设计按照了字母在印文中出现的统计频率进行了位置排列。下面这张图来自维基百科,显示的是26个字母在普通的英文文本中出现的概率:
根据这样一个统计概率,接货大量的加密的密文,我们去统计其中每个字母传的频率,基本会出现这样一个分布图,直接用统计出来的结果和这张图敌营就能得到替换表,然后用替换表就能解密了。
2.恩格玛密码机的工作原理
先来看看长什么样子
主要组成部分:
1.键盘:输入明文
2.灯盘:在键盘上输入一个字母,会有相应的字母亮起来,代表被加密后的字母
3.转子:加密的核心,后面会详细讲
4.插线板:为提高安全性增加吊装至,后面会讲
操作方法:
1.调整好转子位置
2.输入明文,铭文对应的密文灯会亮起来
2.1我们来看看加密核心:转子
转子有两面,分别有26个点对应26个字母,转子两边的26个点用了26条线连起来,但是左边的A不和右边的A项链,上图中右边的杂乱的导线实现了这种对应关系,我们就可以将其看做是我们最开始提到的单表替换。
转子一面
转子另一面
也就是一个转子代表了一个单表替换关系。左边输出明文,右边阿狐楚对应的单表替换的密文。这还少最简单的单表替换,然而恩格玛市盈率三个转子串联起来两次,如图:
三个转子串联,第一个转子的输出作为第二个转子的输入,第二个转子的输出作为第三个转子的输入,由于这三个转子都可以动,也不确定第一个转子的输出链接到了第二个转子上哪个字母作为输入。恩格玛机除了转子,还有个重要装置:反射器,让我们先来看看示意图:
大家可以看到一个字母A从键盘被输入之后,一千次北三个转子进行三次替换然后到达反射器,在反射器又被替换成另一个字母,接着又沿着一条和来是不同的路径,然后输出最终加密结果,即字母G。反射器的原理 还是字母的替换,这个替换可以随便用一个简单的表一环,只要保证输入输出不通就行。
2.1插线板
他长这个样子:
在插线板尚客优26个字母,如果操作员用一根线将其中个两个字母连接起来,那么两个字母在加密过程中会被互换。例如图片中字母A和J被连接起来后,当操作员在键盘上敲下来字母A后,这个字母A会被替换成J后进入转子。经过转子加密输出后的字母会在一次通过插线板,然后结果被输出到灯盘上。
2.3如何使用恩格玛机?
加密
- 1.按照密码本的规定,调整三个转子的顺序,假设2-1-3
- 2.按照密码本的规定,转动三个转子到相应的刻度
- 3.按照密码本的规定,用刀线链接相应的字母,实现字母的替换
- 4.随机找三个字母,假设T,G,S
- 5.依次输入两边
- 6.假设本次输入的留个字母ABCDEF,将ABCDEF发送出去
- 7.将三个转子分别拨到T G S位置,开始输入需要加密的正文消息,输入一个字母波动一下第一个转子,记录输出,这就输出密文
解密
- 1.按照密码本规定,调整三个转子的顺序,假设为2-1-3
- 2.按照密码本的规定,转动三个转子到相应的刻度
- 3.按照密码笨的规定,用导线连接相应的字母,实现字母的替换
- 4.将收到的前六个字母(假设为BMXYUI)输入,由于两边的机器设置都是一样的,于是得到输出序列TGSTGS
- 5.将三个转子拨动到T G S位置,将收到的密文输入,输入一个 字母反向拨动一下第一个转子,记录输出,得到明文
####3恩格玛机的破解
我们先来做一个联系,假设有个八个字母的密码替换表如下:
1|明文|A|B|C|D|E|F|G|H|
2|密文|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],这样,随便用线将两个字母连起来,交换两个字母,都不会改变每个分组的长度,这样就绕开了插线的干扰,我真想说,这些人的脑子是怎么长的,佩服的五体投地.
再次对艾伦·图灵致敬!