纳粹德国的超强机器,唯有机器才能破解机器。
今天来介绍二战时期被纳粹大规模使用的加密机器 - Enigma
他是一种机械式密码、并非由数学计算进行加密。
不过我觉得蛮有趣的,所以今天来了解一下。
首先先说说他怎麽操作,这样比较好理解。
Enigma 是一台像打字机的东西,只是除了用来打字的键盘之外,他还有每个字母专属的灯泡。
当你按下键盘中的某个字母,会有一颗灯泡亮起来,而亮起来的字母就是加密後的字母。
假设你按下A,而G的灯泡亮起来了,那就代表把A加密成G。
当然,机器所做的事情只包含你给他一个字母,他回传一个字母,并没有纪录的功能,
所以纪录是由人工的方式进行。
那这样有什麽好厉害的,好像只比凯萨密码厉害一点点嘛,
我们一样可以用字母频率分析来破解啊。
答案是不行,
举个例子好了,假设你要加密这段文字:my name is alan.
那麽依序按下字母之後你可能会得到 :kc qmtt wf cjeo
这是我用线上 Enigma模拟器 ( 连结我放在底下 )加密後的结果。
发现问题了吗,三个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。
这样的线总共有十条,於是增加的可能性是
(倍)
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万兆种可能。
图灵的破解方式说白了确实是一种暴力破解,不过是做过简化的暴力破解。
德国每天都一定会传送特定几个字,如天气、希特勒万岁之类的,
图灵就是利用这些特定的字简化了他所需要计算的量。
"即使密码系统的任何细节已为人悉知,只要密钥没有被泄漏,它也应是安全的。"
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
>>: 加上random与time模组,限制次数与时间的管理(1)
Conclusion 呼~到今天为止 9 天过去了,Libraries 之间的比较篇章也到今天告一...
故事依时间序简述 故事背景:某航空公司(以下简称某航) 某航於2017上半年裁员,共计裁减约600名...
前几篇介绍了 Vuex 管理资料状态,以及在生命周期或导航守卫发送 API 的时机点,再次回到专案范...
前言 偶尔写CSS时会发现改了颜色、宽高但没有任何效果,就有可能是优先级搞出的问题唷。 所以搞清楚C...
话说今天本来是打算要接着昨天的进度纪录架设 grafana 的 dashboard,可是昨天半夜 d...