信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
文章目录
- 信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
-
- 1. 理论知识
- 二、ENIGMA密码机数字化
- 三、MATLAB仿真
- 四、ENIGMA密码机软件
- 五、参考资料
- 六、代码
1. 理论知识
ENIGMA密码机的最基本部分的示意图如下所示,我们可以看见它的三个部分:键盘、转子和显示器。
如果转子的作用仅仅是把一个字母换成另一个字母,那么该密码机的破译难度较低,因此为了增强密码的强度,“转子”会转动!这就是ENIGMA的最重要的设计——当键盘上一个键被按下时,相应的密文在显示器上显示,然后转子的方向就自动地转动一个字母的位置(在示意图中就是转动1/6圈,而在实际中转动1/26圈)。下面的示意图表示了连续键入3个b的情况:
但是我们看到,如果连续键入6个字母(实物中26个字母),转子就会整整转一圈,回到原始的方向上,这时编码就和最初重复了。而在加密过程中,重复的现象是很危险的,这可以使试图破译密码的人看见规律性的东西。于是我们可以再加一个转子。当第一个转子转动整整一圈以后,它上面有一个齿拨动第二个转子,使得它的方向转动一个字母的位置。看下面的示意图(为了简单起见,现在我们将它表示为平面形式):
想象一下要用ENIGMA发送一条消息。发信人首先要调节三个转子的方向,使它们处于17576个方向中的一个(事实上转子的初始方向就是密匙,这是收发双方必须预先约定好的),然后依次键入明文,并把闪亮的字母依次记下来,然后就可以把加密后的消息用比如电 的方式发送出去。当收信方收到电文后,使用一台相同的ENIGMA,按照原来的约定,把转子的方向调整到和发信方相同的初始方向上,然后依次键入收到的密文,并把闪亮的字母依次记下来,就得到了明文。于是加密和解密的过程就是完全一样的——这都是反射器起的作用。稍微考虑一下,我们很容易明白,反射器带来的一个副作用就是一个字母永远也不会被加密成它自己,因为反射器中一个字母总是被连接到另一个不同的字母。
除了可以利用轮子来增加加密的复杂度,还要加上插线板。键盘和第一转子之间设计了一个连接板。这块连接板允许使用者用一根连线把某个字母和另一个字母连接起来,这样这个字母的信 在进入转子之前就会转变为另一个字母的信 。这种连线最多可以有六根(后期的ENIGMA具有更多的连线),这样就可以使6对字母的信 互换,其他没有插上连线的字母保持不变。在上面ENIGMA的实物图里,我们看见这个连接板处于键盘的下方。当然连接板上的连线状况也是收发信息的双方需要预先约定的。
然后经过反射器后,再同样的路线返回到第一个轮子,从而得到加密/解密的信息。
当输入第二个字母时,要注意此时的轮子会发生变化,因此要根据变化后的轮子进行调整。比如轮子的排列若是慢速转子、中速转子、快速转子,则每当输入一个字母后,快速转子会转动一下。例如图左所示的轮子,第一个输入为A,则输出到第三个轮子右边为B(此处不考虑反射器的映射输出)。第一个信息进行输出后,快速轮子会转动(假设为向下转动),此时快速轮子中,A所对应的数字为1,若此时输入为B,则第三个轮子后侧输出为Q。在一定规则下,快速轮子转动一定次数,中速轮子转动一次。中速轮子转动一定次数后,慢速轮子进行转动。以此类推。每一次的输入,都在其特定的轮子排列下,得到该条件下的输出。
三、MATLAB仿真
根据实验要求,进行MATLAB仿真。该实验中,轮子的转动规则为:令低速转子转到26状态时前一个高速转子会转动1格,类似于时钟的结构,秒针转到60s时分针转动一格,分针转动到60分时,时针会转动一格。这样只需要判断转子状态即可判断是否进位,而不用count输入字符数。若转动规则为快速轮子转动26次,中速轮子转动一次,则需要记录输入字符数。
主要的思路为模拟,模拟的思路和上述的数字化完全一致,没有任何数学的推导过程。分别用数组zhuanzi1,zhuanzi2,zhuanzi3记录当前时刻下轮子的状态,然后每输入一个字母后,进行轮子的依次连接正向映射。到底第三个轮子后,经过反射器,连接到对应的位置,然后进行反向映射,最终得到显示器输入的结果。注意:此处从左到右轮子的转速依次为:慢速轮子、中速轮子、快速轮子
实验参数要求不展开,可见代码。代码见附录。
(由于实验要求,此处慢速轮子、中速轮子、快速轮子的转动关系,如时针分针秒针类似,以26为一周期,快速轮子到26时,会带动中速轮子,中速轮子到26时会带动慢速轮子)
四、ENIGMA密码机软件
通过第三节的ENIGMA密码机的核心程序,可设计APP进行可视化的操作,具体代码源程序如附件所示,此处进行展示。APP设计源码见附件。
ENIGMA程序APP①:
ENIGMA程序APP②:
该程序为模拟真实密码机按键情况,效果图如下:
五、参考资料
六、代码
APP设计在本人GitHub仓库中
文章知识点与官方知识档案匹配,可进一步学习相关知识小程序技能树首页概览3663 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!