废弃是什么意思?
原本的计划是我自己写一个简单的 Enigma 模拟器 (M3型号,只有3个轮子)
或者网上找一个可编程的 (看到py-enigma好像不错, 这个是 Python 实现的).
然后网上找一些真实的战时 Enigma 加密信息,然后写个 Bomba 来破解
(Bomba 是破解 Enigma 的机器的机器的名字)
然后把这些东西做成任务形式,就像玩游戏一样, 然后其他程序员就可以看这些任务来用自己喜欢的语言写 Bomba
所以原先的计划是把这些东西写好然后其他程序员可以来玩, 来写个 Bomba, 体验一下比肩图灵的感觉
但实际碰到的问题是,战时的破解方法是拿一段明文去配一段密文
( 配的意思是猜,就是他们认为这段密文等于一段明文,但是不知道是是不是百分百正确, 只是觉得正确率很高 )
( 战时德国人会用天气船发天气预报, 这个是突破点之一, 加大了破解概率 )
然后以此的基础上去配置 Bomba 然后 Bomba 运行起来来破解密文, 最后人工检验是否正确
我没法找到这么一段明文, 网上没人这么弄
网上其他人的破解挑战, 比如 http://users.telenet.be/d.rijmenants/en/challenge.htm
都是给你一段信息,然后让你用 Enigma 去破, 你根据线索去配置 Enigma 然后输入密文,
得到德文, 然后翻译成英文来理解 都是这种形式
所以这个计划只能取消了
不过下面对于 Enigma 的介绍还是很详细的, 看下面这些可以节省你很多找资料的时间, (如果你对 Enigma 感兴趣的话)
下面都是原先写的, 后来发现行不通也没改
英格玛密码机 (Engima Machine) 是德国二战期间用的机器
作用是加密信息, 然后把加密后的信息通过无线电发出去, 这样只有友军才知道是什么意思.
整场二战德国人都不知道他们的 Enigma 加密被破解了
(原句: The large scale breaking of German communications was one of the best kept secret of the Second World War. German armed forces kept on using Enigma during the entire war without any suspicion)
(资料来源: http://users.telenet.be/d.rijmenants/en/enigma.htm [Turning the tide] Section 最后一段)
为了更形象的了解 Enigma 的使用方法和原理, 请看视频:
标题 | 链接 |
---|---|
[數字狂 非官方繁體中文字幕]_Enigma Machine 數字狂 | https://www.youtube.com/watch?v=J46hu4RMB5I |
[數字狂 非官方繁體中文字幕]_Engima 的缺陷 Flaw in the Enigma Code 數字狂 | https://www.youtube.com/watch?v=Sqpe5vZoKTo |
Turing's Enigma Problem (Part 1) - Computerphile | https://www.youtube.com/watch?v=d2NWPG2gB_A |
Tackling Enigma (Turing's Enigma Problem Part 2) - Computerphile | https://www.youtube.com/watch?v=kj_7Jc1mS9k |
Enigma, TypeX and Dad - Computerphile | https://www.youtube.com/watch?v=jvKdOEHkrJc |
只看这 2 个视频你是没法写代码实现 Enigma 模拟器的,
有些细节视频里没说, 比如
1 从 5 个转轮里抽 3 个是什么意思,为什么要抽 3 个?(第1集的06:00)
转轮上面不都是 01~26 吗?
因为每个轮子内部的连线不同, 比如轮子 V(5号轮子) 当输入 3 的时候可能输出 17
轮子 I (1号轮子) 输入 3 的时候可能输出 21
重点是内部的对应关系不同
注意在密码本上, 5个转轮的编号是用罗马数字表示的
比如 I VI V 这样,
I = 1
II = 2
III = 3
VI = 4
V = 5
当你在密码本的 Wazlzenlage 这一列看到 V IV I
意思是把5号轮子放左边, 4号放中间,1号放右边
看下图的 I, II, III, IV, V
注意轮子有两面, 下图是翻到了另外一面所以没有罗马数字编号
2 字母怎么经过 3 个轮子然后又绕回来, 再次经过 3 个轮子?具体怎么弄的?
比如到了第3个轮子,数字是37,然后视频说又回去
那不是回到第1个轮子的时候,数字和一开始进第1个轮子的时候一样了吗?
有一个部件叫做 Reflecter, 作用和轮子一样, 就是输入1个数字输出对应的数字
意思就是从第3个轮子出来的数字会先进 Reflector, 然后变成另一个数字, 之后再进第3个轮子,
然后走回去, 是这样运行的
![Image of a Reflector that belong to a Enigma Machine](img/Reflector.jpg)
3 按键是字母,轮子是数字,这之间的对应关系是什么?
因为比如你按下了P,经过插线板变成了M,下一步就应该去轮子那边了,但是M这个数字到了轮子那边怎么办?
A 对应 1
B 对应 2
C 对应 3
D 对应 4
...
Z 对应 26
4 PlugBoard 有10组,一组2个字母,也就是20个字母之间有对应关系,
那么还有6个字母没有连线的字母怎么弄?
直接进 Rotor, 不经过变换
证明:
Turing's Enigma Problem (Part 1) - Computerphile (18分钟59秒)
https://www.youtube.com/watch?v=d2NWPG2gB_A
讲清楚了如果插线板没插线, 那么字母不会变, 原样送到 rotor, 以及一般是插10组,而不是13组全部插满.
1 密码本(codebook) 是一张纸就是一个月的
前面几列都很好理解,无非是日期,几号轮子以及他们的顺序,还有轮子的初始设定,以及插线板设定.
最后那一列是用于接收方判断是哪一天的信息,然后才能根据那一天来设定机器,然后解密
2 轮子不只是能转, 还能拿出来调换顺序
3 转轮不只是有数字的, 也有字母的
4 Engima 有其他型号的, 并不是视频里就是唯一的型号
5 并不是所有型号都是3个转轮, 有的有4个(M4型号), 有的有8个(海军用的这个) https://en.wikipedia.org/wiki/Enigma_rotor_details https://en.wikipedia.org/wiki/Enigma_machine
### 资料来源
如果你感兴趣并且去查相关资料, 那么你可能会看到这几个词
Wehrmacht, Luftwaffe and Kriegsmarine
https://en.wikipedia.org/wiki/Wehrmacht
根据维基百科
The Wehrmacht was the unified armed forcesof Nazi Germany from 1935 to 1946.
It consisted of the Heer (army), the Kriegsmarine (navy) and the Luftwaffe(air force).
简单说就是 Wehrmacht 是德国军队的总称
而__陆军是 Heer__, 海军是 Kriegsmarine, 空军是 Luftwaffe