二战完美密码机的再生

2012-09-09 01:16林雪云
关键词:加解密尼格反射器

林雪云

(福建师范大学福清分校,福建福清 350300)

二战完美密码机的再生

林雪云

(福建师范大学福清分校,福建福清 350300)

在详细了解恩尼格玛密码机工作原理的基础上,突破现有网络产品,利用C++与汇编语言的混合编程来尝试实现华丽界面和加解密的核心部分.它与网络其他现有产品特色之处在于综合运用软硬件知识,从实践上对恩尼格玛机的认识上升一个层次.

恩尼格玛机;加密;解密

无数军事战争的成功往往是因为及时、准确地获得了军事情报,而失败则是由于军事机密的泄漏.商业情报也是现代企业参与国际竞争的关键因素.当前的国际形势十分紧张,商业竞争非常激烈,人们对密码学的精密性也提出了更高的要求.恩尼格玛机一直是密码学中的一枝独秀,笔者的研究正是模拟实现恩尼格玛机的一个简单、实用的软件.

1 研究理论基础(基于实物机器)

1.1 恩尼格玛机核心组成

图1 恩尼格玛机组成

恩尼格玛机包括键盘、连接板、转子、反射器、固定口、显示器,各部分连接关系如图1所示.

1.2 研究特色

网络上关于恩尼格玛机此类产品的研究不少,所基于的原理是一样的,但是产品大都粗糙,界面难看.本研究设计力求改进这个问题,使界面更美观;同时对于键盘,虽然与普通键盘差别不大,为了简便仅保存了26个英文字母,但是本研究在功能方面扩展了对中文的加解密,因此在中文加解密的时候,所能接受的输入不仅仅是26个字母.

1.3 可能性分析

恩尼格玛有3大密钥:转子的相对位置、转子的起始位置、连接板的连接.它们分别提供的可能性如下:(1)3个转子间不同的相对位置为3×2×1=6种可能性;(2)3个转子不同的方向组成了26×26×26=17 576种可能性;(3)连接板上两两交换26个字母的可能性则是异常庞大,有100 391 791 500种.因此,总共有6×17576×100 391 791 500约等于1亿亿种可能性.这样庞大的可能性,即便动员大量的人力物力,要想靠“暴力破译法”来逐一试验可能性,也几乎是不可能的.它的多级转子的转动使得频率分析破解也成为不可能.而收发双方,则只要按照约定的转子方向、位置和连接板连线状况,就可以非常轻松简单地进行通讯了.这就是“恩尼格玛”密码机的保密原理.[1]

2. 系统实现

2.1 XLAT简介

在详细了解之前,必须先了解常用到的一条汇编指令——XLAT.

格式:XLAT

执行的操作:(AL)←((BX)+(AL))

说明:数据表的首地址放入BX,要查找的单元的相对地址(位移量)由AL指出.

功能:在BX为表首地址的内存表中查找相对地址为AL的单元,取出其中的内容再放入AL中.即将AL中的位移量换成对应的存储单元中的内容.

用途:日常生活中有许多需要查表完成的工作,比如查日历表、密码表、书目表、商品价格表、ASCII表、数学公式等.建好表以后,只要将表名的地址放入BX中,要查的号码放入AL,再用XLAT指令就可以找到要查找的内容了.[2]将本项目的核心部分设计成一张张表,有连接板表、转子表、转子的逆表、反射器表等等;然后使用XLAT指令,轻松地完成核心部分的设计.

2.2 核心零件的实现

2.2.1 转子 在实际中,机器转动起来的时候,转动的是一种固定的连接关系.于是,可以定义一种类似的连接关系,然后将这种连接关系拿起来转动.通过将26个字母打乱,与字母的正常顺序a到z进行比较,以a到z为正方向求出差值,可得出转子的加密表.解密表的目的是为了找到原字母,例如输入h,经过转子加密得到d,那么解密时输入d,期望输出是h.按这种方法可以求得转子一的解密表.根据以上原理,分别定义如下:定义转子一的加、解密表:

charrotor1[26]={8,24,24,9,9,22,11,22,12,24,14,20,11,2,14,20,21,1,3,11,22,24,10,17,24,11};

char rotor4[26]={2,4,12,4,15,6,16,2,18,6,15,5,17,17,9,24,4,15,25,2,14,23,2,15,12,2};

用同样的方法定义转子二和转子三的加、解密表:

char rotor2[26]={13,1,8,1,7,7,1,18,10,12,22,11,12,1,21,0,13,25,16,24,11,25,1,4,21,1};

char rotor3[26]={16,4,4,8,23,25,23,3,10,0,9,10,22,12,24,24,24,24,10,4,6,22,0,1,22,8};

char rotor5[26]={25,22,25,13,25,15,4,25,10,5,18,19,19,13,25,0,1,2,16,5,1,14,15,25,14,8};

char rotor6[26]={20,3,16,3,1,22,22,18,4,0,23,18,2,2,2,2,10,4,16,17,4,16,0,22,25,14};

2.2.2 连接板连接板最初是26个字母的正常顺序a到z.设置密钥时,根据密钥把字母的位置两两调换.每个字母作为输入都有其相应的输出,而当将输出作为输入的时候,其输入将成为输出.比如输入密钥“as df gh”,表示as,df,gh分别互换.对于已调整的字符as,输入a,将输出s,输入s,将输出a;对于未调整的,输入与输出都是自己.该密钥设置前与设置后的情况如下所示:设置前char linked[27]=“abcdefghijklmnopqrstuvwxyz”;设置后char linked[27]=“sbcfedhgijklmnopqratuvwxyz”.

2.2.3 反射器 反射器是简单地将正常顺序的字母a到z两两交换.交换的3个字符,将互相成为对方的输入输出,如f和x互相交换,输入f将得到输出x,而输入x将得到输出f.

2.3 3大密钥的设置

图2 转子相对位置

2.3.1 转子的相对位置 从界面上接收到用户输入的3个参数作为转子的相对位置,如图2所示.当窗口转向的时候会调用系统在DLL中实现的set Key-One(int,int,int)函数,该函数完成转子的相对位置这一密钥的设置.

图3 转子起始位置

2.3.2 转子的起始位置从界面上接收到用户输入的3个参数作为转子的起始位置,如图3所示.当窗口转向的时候会调用DLL中的set Key Two(int,int,int)函数,该函数完成转子的起始位置这一密钥的设置.

图4 连接板的连接

2.3.3 连接板的连接 从界面上接收到用户输入的“连接板的连接”的数据,如图4所示.当窗口转向的时候会调用DLL中的set Key Two(int,int,int)函数,该函数实现连接板的连接这一密钥的设置.

2.4 加密和解密

一个字母在最核心的部分要经过如下过程:明文字符→连接板→转子一加密表→转子二加密表→转子三加密表→反射器→转子三解密表→转子二解密表→转子一解密表→连接板→密文字符.解密时,只要设置好相同的密钥后,输入密文字符,按照与加密同样的过程去解密,会得出最初输入的明文字符.

如图5所示,将解密过程与加密过程综合起来分析就会清楚其中的神奇之处.拿几处来解说一下,比如A1与A2,它们是互为加解密过程的,如果连接板用字符c查出来是d的话,那么用d查出来便是c,对于没有互换的总是保持原样;比如B2与B1,在B1处用的是转子一的解密表,B2处用的是转子一的加密表,它们是互为加解密的;再如C1与C2处,对于反射器来说,它是两两交换的,用e查出来是z,则用z查出来是e.以此类推,加、解密全过程中的其他类似.因此,可以用简单地使用相同的过程来实现加、解密.每加密或解密1个字母,3个转子都会做相应的转动调整.其调整规则为:转子一(包括加密表与解密表,因为系统使用加密表与解密表来共同模拟一个转子的功能,以下的转子二、转子三同理)每次都会转过1格;当转子一转动26的倍数时转子二转过1格,否则不转;当转子二转动26的倍数时转子三转过1格,否则不转.只要最初的用密钥设置正确,其中的每一步都可以按上面的原理来实现.[3]

图5 加密过程与解密过程

该系统对英文的处理可以使用上面的原理,而对于中文的处理有一些不同.这是因为定义的转子的加、解密表上只有26个字母,所以不能直接对中文字符本身加、解密.可以考虑一种处理方法:对其机内码(十六进制数)进行加、解密,其最核心的依然是效仿恩尼格玛机.

接下来分别详细介绍英文加解密与中文加解密.

(1)英文加解密.上文已经提到,英文的加、解密可以直接对字符进行加解密.因为英文的26个字母可以与系统所使用的连接板、转子和反射器表上面的26个字母一一对应.

(2)中文加解密.对于中文则不能直接对字符进行加解密了,在实现中是对中文的机内码加解密.一个中文字符的机内码是由2个字节组成,也就是4位的十六进制数.加密时,将一个中文字符的机内码0,1,…,E,F分别映射到字母表的a,b,c,…,n,o,p,然后对这些英文字符进行加密,得出密文;解密时,先将密文(一些英文字符)解密,然后将它们转换成4位的十六进制数,还原成汉字明文的机内码.例如“郭”的机内码为“B9F9”,在加密的时候,要将“B9”拆成英文字母“l”和“j”,将“F9”拆成英文字母“p”和“j”,然后对字母串“ljpj”进行加密,密文为“rkkd”;在解密的时候,首先将“rkkd”解密为“ljpj”,然后查表将它还原为“B9F9”.注意,在此是加密还是解密必须人为地选择,即需要告诉系统这是中文的加密还是中文的解密,界面上有让用户选择的按钮.

3 结语

使用高级语言混合编程来实现恩尼格码机,与网络上实现的一般的恩尼格玛机系统产品区别之处在于,利用了C++与汇编语言的混合编程、C#Winform,以VS2008为开发工具,界面比网络上更美观,性能更实用,可以实现中、英文加密.并且可将他作为一个软硬件结合的很好的教学例子来进行演示讲解.[4-6]

[1] 百度.恩尼格码密码机[EB/OL].[2011-11-05]http://baike.baidu.com/view/451596.htm.

[2] 郑晓薇.汇编语言[M].北京:机械工业出版社,2009:69-72.

[3] 维基百科.恩尼格码密码机[EB/OL].[2012-01-08]http://zh.wikipedia.

[4] 王成耀.汇编语言程序设计[M].北京:机械工业出版社,2004:252-261.

[5] 李淑馨,陈 伟.Visual C++2008程序设计完全自学教程[M].北京:清华大学出版社,2009:343-501.

[6] 郑阿奇.Visual C++.NET 2010开发实践——基于C++/CLI[M].北京:电子工业出版社,2010:40-50.

Reproduction of the Perfect Cipher Machine in World WarⅡ

LIN Xue-yun
(Fuqing College of Fujian Normal University,Fuqing 350300,China)

Based on the detailed understanding of the working principle of Enigma machine,the authors try to achieve the luxuriant interface and the core of the encryption and decryption by using the hybrid programming of C++and assembly language.Compared with other existing network products,this one features its comprehensive use of software and hardware knowledge,and in practice,it improves the understanding of Enigma machine to a new level.

Enigma machine;encryption;decryption

book=41,ebook=139

TN918.3

A

10.3969/j.issn.1007-2985.2012.04.009

(责任编辑 向阳洁)

1007-2985(2012)04-0041-04

2012-05-16

福建省科学研究项目(JB10196)

林雪云(1976-),女,福建福清人,福建师范大学福清分校数计系讲师,硕士,主要从事数据库、数据挖掘和

密码学研究.

猜你喜欢
加解密尼格反射器
尼格爷爷的长胡子
尼格爷爷的长胡子
PDF中隐私数据的保护方法
基于角反射器的机载毫米波云雷达外定标实验
电子取证中常见数据加解密理论与方法研究
基于FPGA的LFSR异步加解密系统
一种反向多结GaAs太阳电池背反射器的研究
网络数据传输的加解密系统研究
星载激光反射器的斜置角设计
雷达角反射器的设计及应用