DAY 3- Enigma

纳粹德国的超强机器,唯有机器才能破解机器。

今天来介绍二战时期被纳粹大规模使用的加密机器 - Enigma
他是一种机械式密码、并非由数学计算进行加密。
不过我觉得蛮有趣的,所以今天来了解一下。

使用方式

首先先说说他怎麽操作,这样比较好理解。

Enigma 是一台像打字机的东西,只是除了用来打字的键盘之外,他还有每个字母专属的灯泡。
当你按下键盘中的某个字母,会有一颗灯泡亮起来,而亮起来的字母就是加密後的字母。
假设你按下A,而G的灯泡亮起来了,那就代表把A加密成G。

当然,机器所做的事情只包含你给他一个字母,他回传一个字母,并没有纪录的功能,
所以纪录是由人工的方式进行。

那这样有什麽好厉害的,好像只比凯萨密码厉害一点点嘛,
我们一样可以用字母频率分析来破解啊。

答案是不行,
举个例子好了,假设你要加密这段文字:my name is alan.
那麽依序按下字母之後你可能会得到 :kc qmtt wf cjeo
这是我用线上 Enigma模拟器 ( 连结我放在底下 )加密後的结果。

MY NAME IS ALAN

KC QMTT WF CJEO

发现问题了吗,三个A分别对应到了M、C、E
而中间两个字M、E都对应到了T

为什麽会有这种结果呢?

构造

来看一下把 Enigma 的上盖打开来後长什麽样子。

右上角空的地方是拿来放电池的、中间有灯泡。
Enigma最厉害的地方就是左上角那颗看起来像行李箱密码锁的东西。

旋转盘

这个项行李箱密码锁的东西叫做旋转盘( Rotors ),
一台 Enigma 有三个旋转盘,每个旋转盘有26格。

当每按下一个字母,最右边的旋转盘就会转一格。
而每一次旋转盘旋转,就会让底下的电路产生变化,进而让不同的灯泡亮。
所以,就算同一个字母被连续按了两次,他也会对应到不同的字母。

还没完,
当第一个旋转盘转一圈,就会带动第二个旋转盘转一格,
接着第二旋转盘转一圈,会带动第三旋转盘的一格。

也就是说让第三旋转盘转完一圈需要按下26×26×26 = 17576个字母。

更夸张的是这个旋转盘式可拆卸的,
总共有五个旋转盘,
而每次都可以决定使用哪三个旋转盘以及分别插在哪个位置。

也就是说增加了5×4×3 = 60倍的可能性。

接线板

另外看到最底下有许多的孔洞,每个孔洞也都代表一个字母。
这个设计叫做接线板 ( Plugboard ) ,是为了让 Enigma 的加密更加完备。

接线板需要使用一种双头的线,也就是可以把孔洞两两配对。
被配对的两个孔洞会调换。举例来说,我把A跟K连在一起,那麽我按下A的时候其实代表K,而按下K的时候其实代表A。

这样的线总共有十条,於是增加的可能性是
https://chart.googleapis.com/chart?cht=tx&chl=C_%7B10%7D%5E%7B16%7D%2F2%5E%7B10%7D%20%3D%20150%2C738%2C274%2C937%2C250(倍)

反射器

Enigma作为一台加密机,同时也是一台解密机的原因就在於这个反射器 ( Reflector ),
他可以保证明文和密文是对应的。

意思是说:假设A对应到F,那麽在同样的设置下,F就会对应回A。
这样的优点是只要设定相同,解密员只需要将收到的密文直接输入Enigma里面,就可以得到相对应的明文。

而这同样业是他的缺点,
因为一个字母必定加密成另一个字母,也就是A不可能对应到A。
而这也成为後来破解Enigma的漏洞之一。

设置

德军每个月都会印一张表,上面表示着每一天 Enigma 的初始设置。
设置表上会标明日期、用哪三个旋转盘、旋转盘的顺序、旋转盘转到哪一格、接线板上要接那些字母。

接着,假设今天的旋转盘表定设置是PGT,那麽加密前就把旋转盘转到PGT,然後随机传送三个字母作为此篇的密钥,
假设GJE好了,那就把旋转盘转到GJE,开始加密後面的文字。
所以收到讯息的人就要先用初始设置解密前三个字,获得GJE,再把旋转盘转到GJE,开始後续的解密。

这样的好处是让统计效果失效,
因为因为如果今天的每篇文字都用PGT来加密的话,就有可能提高用统计方法破密的可能。

运算复杂度

最终,一台 Enigma 加密同一段文字所得到的密文,
有将近1590万兆种可能。

如果有十个人,每分钟都查一个设定,24小时不休息,要花2000万年才能解完。
而且这还只是一天的量。

对於没有电脑的二战时期,这个天文数字就代表着破解是不可能的事。
(所以他们就发明了电脑)
这台电脑叫做图灵机,由Alan Turing 所发明 ( 跟我同名洒花 )
最後是用20分钟破解了Enigma。

但并不是说图灵机在20分钟之内解完了1590万兆种可能。
图灵的破解方式说白了确实是一种暴力破解,不过是做过简化的暴力破解。
德国每天都一定会传送特定几个字,如天气、希特勒万岁之类的,
图灵就是利用这些特定的字简化了他所需要计算的量。

Kerckhoffs's principle

"即使密码系统的任何细节已为人悉知,只要密钥没有被泄漏,它也应是安全的。"

Enigma 就是Kerckhoffs's principle 很好的例子,
就算英国获得了Enigma机器,如果不知道当天的设定,是没有办法破解的。

注意到,Enigma之所以最後被破解,是因为德军传送讯息的漏洞所造成。

最後如果你对 Enigma 有兴趣的话,可以去看一部2014年的电影,叫做"模仿游戏(The Imitation Game, 2014)",
是一部以Alan Turing的视角所拍的电影 ( 内容大部分真实 ),蛮好看的。
另外底下的第三个连结是我所使用的模拟Enigma机,
虽然我不知道他是不是会跟真实的enigma加密的一样,
不过它的基本性质是正确的,所以可以玩玩看。

参考资料:
https://www.youtube.com/watch?v=G2_Q9FoD-oQ
https://www.easyatm.com.tw/wiki/enigma
https://cryptii.com/pipes/enigma-machine
https://www.2worldwar2.com/enigma.htm


<<:  [Day2] - 前端,後端是在做什麽?

>>:  加上random与time模组,限制次数与时间的管理(1)

Day 9. Compare × Final

Conclusion 呼~到今天为止 9 天过去了,Libraries 之间的比较篇章也到今天告一...

某航空裁员後被骇

故事依时间序简述 故事背景:某航空公司(以下简称某航) 某航於2017上半年裁员,共计裁减约600名...

Day 21:总汇复习-Vuex、Route

前几篇介绍了 Vuex 管理资料状态,以及在生命周期或导航守卫发送 API 的时机点,再次回到专案范...

CSS 权重优先级

前言 偶尔写CSS时会发现改了颜色、宽高但没有任何效果,就有可能是优先级搞出的问题唷。 所以搞清楚C...

Day 12:Commitizen

话说今天本来是打算要接着昨天的进度纪录架设 grafana 的 dashboard,可是昨天半夜 d...