DES加密算法基本知识
DES(Data Encryption Standard)又叫数据加密标准,是1973年5月15日美国国家标准局(现在是美国标准技术研究所,即NIST)在联邦记录中公开征集密码体制时出现的。DES由IBM开发,它是对早期被称为Lucifer体制的改进。DES在1975年3月17日首次在联邦记录中公布,在经过大量的公开讨论后,1977年2月15日DES被采纳为“非密级”应用的一个标准。最初预期DES作为一个标准只能使用10-15年,然而,事实证明DES要长寿得多。在其被采用后,大约每隔5年被评审一次。DES的最后一次评审是在1999年1月,在当时,一个DES的替代品,AES(Advanced Encryption Standard)开始使用。
DES是一种分组对称加解密算法,用64位密钥(实际用56位,其中每第八位作奇偶校验位)来加密(解密)64位数据,加密的过程伴随一系列的转换与代换操作。DES加密(解密)的过程可以分为两步:首先变换密钥得到56位密钥,然后据转换操作得到48位共16组子密钥。其次是用上面得到的16组子密钥加密(解密) 64位明(密)文,这个过程会有相应的S-BOX等的代换-转换操作。整个算法加密过程可以参考DES标准说明文件(http://csrc.nist.gov/CryptoToolkit/tkencryption.html)。
如何识别DES加密算法
由于DES是加(解)密64位明(密)文,即为8个字节(8*8=64),可以据此初步判断这是分组加密,加密的过程中会有16次循环与密钥置换过程,据此可以判断有可能是用到DES密码算法,更精确的判断还得必须懂得一点DES的加密过程。
Crackme实例分析
本期Crackme用到MD5及DES两种加密算法,难度适中。这次我们重点来看一下DES的加密过程及注册算法过程。用调试器载入程序,下GegDlgItemTextA断点,可以定位到下面代码,我们先来看一下整个crackme的注册过程:
由于代码分析太长,故收录到光盘中,请大家对照着分析(请见光盘“code1.doc”)
从上面分析可以看出,注册过程是类似:f(机器码,注册码)式的两元运算。机器码是经过md5算法得到的中间16位值,注册码是经过DES解密过程取得16位注册码,然后两者比较,如相等,则注册成功。机器码的运算过程可以参照上一期的MD5算法来理解。下面重点来说一下注册码DES的运算过程。
1、密钥处理过程:一般进行加解密过程都要初始化密钥处理。我们可以跟进004023FA CALL Crackme1.00401A40这个call,可以看到如下代码:
…(省略)...
00401A4D LEA ECX,DWORD PTR DS:[ECX]
00401A50 /MOV EDX,EAX
00401A52 |SHR EDX,3
00401A55 |MOV DL,BYTE PTR DS:[EDX+ESI]
00401A58 |MOV CL,AL
00401A5A |AND CL,7
00401A5D |SAR DL,CL
00401A5F |AND DL,1
00401A62 |MOV BYTE PTR DS:[EAX+417DA0],DL
00401A68 |INC EAX
00401A69 |CMP EAX,40 这里比较是否小于64
00401A6C /JL SHORT Crackme1.00401A50
以上过程就是去掉密钥各第八位奇偶位。
…(省略)...
00401AB0 |MOV DL,BYTE PTR DS:[ECX+417D9F]
00401AB6 |MOV BYTE PTR DS:[EAX+417BA3],DL
00401ABC |ADD EAX,4
00401ABF |CMP EAX,38 这里进行密钥变换
…(省略)...
00401BFF ||MOVSX ECX,BYTE PTR DS:[EAX+412215]
00401C06 ||MOV CL,BYTE PTR DS:[ECX+417D9F]
00401C0C ||MOV BYTE PTR DS:[EAX+417BA5],CL
00401C12 ||ADD EAX,6
00401C15 ||CMP EAX,30 这里产生48位的子密钥
00401C18 |/JL SHORT Crackme1.00401BA0
00401C1A |MOV EAX,DWORD PTR SS:[ESP+14]
00401C1E |MOV EDI,EAX
00401C20 |MOV ECX,0C
00401C25 |MOV ESI,Crackme1.00417BA0
00401C2A |REP MOVS DWORD PTR ES:[EDI],DWORD PTR D>
00401C2C |MOV EDI,DWORD PTR SS:[ESP+10]
00401C30 |ADD EAX,30 下一组子密钥
00401C33 |INC EDI
00401C34 |CMP EAX,Crackme1.00417B90 这里进行16次的生成子密钥过程
00401C39 |MOV DWORD PTR SS:[ESP+10],EDI
…(省略)...
可以看到8位密钥为:1,9,8,0,9,1,7,0
2、对数据处理的过程,跟进004024C7 CALL Crackme1.00402050,到如下代码:
00402072 |MOV BYTE PTR DS:[EAX+417E30],DL
00402078 |INC EAX
00402079 |CMP EAX,40 这里取得64位数据
0040207C /JL SHORT Crackme1.00402060
…(省略)...
004020C6 |MOV BYTE PTR DS:[EAX+417BA3],DL
004020CC |ADD EAX,4
004020CF |CMP EAX,40 进行第一次变换
004020D2 /JL SHORT Crackme1.00402080
004020D4 MOV AL,BYTE PTR SS:[ESP+20]
004020D8 TEST AL,AL
004020DA MOV ECX,10
…(省略)...
00402191 MOV EBP,DWORD PTR DS:[415094] ; Crackme1.00417E30
00402197 SUB EAX,EBP 这里对变换后的数据分为两部分
00402199 MOV DWORD PTR SS:[ESP+10],EAX
0040219D MOV DWORD PTR SS:[ESP+20],Crackme1.00417B60
004021A5 /MOV EAX,DWORD PTR SS:[ESP+20]
004021A9 |MOV ECX,8
004021AE |MOV ESI,EBP
004021B0 |MOV EDI,Crackme1.00417E10
004021B5 |PUSH EAX 这里用上面生成的子密钥来解密数据
004021B6 |MOV EBX,EBP
…(省略)...
004021FF |SUB EAX,30 下一个子密钥
00402202 |CMP EAX,Crackme1.00417890 这里将循环16次,典型的DES加解密过程
00402207 |MOV ECX,8
0040220C |MOV ESI,Crackme1.00417E10
00402211 |REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI>
…(省略)...
0040225A |MOV BYTE PTR DS:[EAX+417BA2],DL
00402260 |MOV DL,BYTE PTR DS:[ECX+417E2F]
00402266 |MOV BYTE PTR DS:[EAX+417BA3],DL
0040226C |ADD EAX,4
0040226F |CMP EAX,40 这里是未置换
00402272 /JL SHORT Crackme1.00402220
00402274 MOV EBP,DWORD PTR SS:[ESP+18]
00402278 MOV ECX,10
0040227D MOV ESI,Crackme1.00417BA0
…(省略)...
有兴趣的读者可以参考DES算法来理解上面的过程。
Crackme总结
要找到注册码,应该:对机器码生成的md5值,取前面16位,再用DES加密这16位字符,加密后的十六进制值即为注册码。如:机器码2747318257,变换后的md5值为7828e8ca43f7d8329ead4c1f aa39c1ec,取前16位7828e8ca43f7d832十六进制值(37 38 32 38 65 38 63 61 34 33 66 37 64 38 33 32)用DES加密后数据为5041a5d06937f8f73f87e68a0e7d2810,此即为真正的注册码。
DES加密算法总结
目前在国内使用密码学注册算法的共享软件不多,但从以上分析可见,使用某种高强度的密码学算法可以使注册过程强度增大好几倍,这使得cracker要分析出注册机必须花费大量的时间,这样可以在一定的程序上阻止软件被cracker快速破解。为了防止cracker爆破软件,可以加一个高强度的猛壳,这样可以组成目前相对较好的一种加密方案。
对付这种加密方案,cracker必须掌握一定的密码学知识,否则跟进那些密码运算模块,只会看到大量的“0”“1”,会被算法过程搞得头晕眼花。没有捷径,只有踏踏实的技术实力才能轻松应对这种加密方案。
使用DES加密算法的典型软件
现在使用DES加密算法的共享程序非常多,学习了本文所讲的方法后,可能很多读者都想找个实际的程序练手,不过需要声明的是:我们旨在提高国内加密解迷的整体水平,不能用本文所讲的技术做触犯法律的事,否则,所带来的一切法律责任自负,与作者和本杂志社无关。
常见的采用DES加密算法的程序很多,比如共享软件:变脸王的注册码后半部分只用了DES一种算法,还有公路坐标计算系统V1.0也用到DES加密算法。DES是一种对称的算法,加密和解密用同一个函数,一般只要了解程序用到了DES算法,那么就可以很快搞定DES这部分注册过程。
信息安全中的DES加密算法
李 联
(西北工业大学 软件学院陕西 西安710072)
摘 要:根据密钥类型不同将现代密码技术分为2类:—类是对称加密(秘密钥匙加密)系统 ;另一类是公开密钥加密(非对称加密)系统。着重讨论DES的加密算法,详细论述了D ES的算法流程,并探讨了DES算法的缺陷和漏洞。
关键词:网络信息安全;DES;对称加密算法;公开密钥加密算法
The DES Encryption Algorithm in Information Security
LI Lian
(Software College, Northwestern Polytechnical University, Xi
′an, 710072, China)
Abstract: Moderm encryption algorithm has two types as the different of key:one is the sy mmetrical encryption system;the other is the public key encryption systemThi s article mainly discusses the DES encryption algorithm, detailed states the th ought of it,and attempts to discover the defect and loophole of it
Keywords:
network information security;DES; the symmetrical encryption algorithm ;the public key encryption algorithm
古往今来,通信中的安全保密问题一直受到广泛关注。历史上,交战双方在通信安全、保密 和密码破译方面的优势均被认为是取得战争胜利的关键因素之一。今天,人类已进入信息化 时代,现代通信涉及各个行业,信息安全已成为人人都关心的问题,这就促使密码学揭去了 神秘的面纱,为更广泛的领域和大众服务。
1加/解密算法的一般原理
密码体制从原理上可分为2大类,即单钥密码体制和双钥密码体制。
单钥密码体制是指信息的发送方和接受方共享一把钥匙。在现代网络通信条件下,该 体制的一个关键问题是如何将密钥安全可靠地分配给通信的对方,并进行密钥管理。因此单 钥密码体制在实际应用中除了要设计出满足安全性要求的加密算法外,还必须解决好密码的 产生、分配、传输、存储和销毁等多方面问题。单钥密码可分为古典密码、流密码和分组密 码,DES就属于分组密码中的一种。
双钥密码体制又称公钥密码体制,其最大特点是采用2个密钥将加密、解密分开。在 双钥体制下,每个用户都拥有2把密钥,—个公开,一个自己专用。当使用用户专用密钥加 密,而用该用户公开密钥解密时,则可实现一个被加密的消息能被多个用户解读;当使用 用户公开密钥加密,而用该用户专用密钥解密时,则可实现传输的信息只被一个用户解读。 前者常被用于数字签名,后者常被用于保密通信。
2加/解密机制的应用
在信息安全领域中,凡涉及到数据通信均采用加/解密机制。而目前日益发展的电子商 务正是充分展示加/解密机制的一个十分重要的领域。
在电子商务中,订单的保密性需用加密技术来处理,而订单的可靠性、时间性则需用 数字签名技术,有时还需双重签名。例如,刘先生要买张小姐的一处房产,他发给张小姐一 个购买报价单及他对银行的授权书的消息,如果张小姐同意按此价格出卖,则要求银行将钱 划到张小姐的帐上。但刘先生不想让银行看到报价,也不想让张小姐看到他的银行帐号信息 。此外,报价和付款是相连的、不可分割的,仅当张小姐同意他的报价后,钱才会转移。要 达到这个要求,采用双重签名即可实现。
3DES的算法描述
DES作为美国国家标准研究所(American National Standard Institute,ANSI)的数 据加密算法(Data Encryption Algorithm,DEA)和ISO的DEA 1,成为一个世界范围内的 标准已经二十多年。尽管他带有过去时代的特征,但他很好地经受住了多年的密码分析 ,除了可能的最强有力的对手外,对其他的攻击具有较好的安全性。
3.1DES的描述
DES是一种分组加密算法,他以64位为分组对数据加密。64位一组的明文从算法的一端 输入,64位的密文从另一端输出。DES是一个对称算法:加密和解密用的是同一个算法(除 密钥编排不同以外)。
密钥的长度为56位(密钥通常表示为64位的数,但每个第8位都用作奇偶检验,可以忽 略)。密钥可以是任意的56位数,且可以在任意的时候改变。
DES算法的入口参数有3个:Key,Data,Mode。其中Key为8个字节共64位,是DES算法 的工作密钥;Data也为8个字节64位,是要被加密或解密的数据:Mode为DES的工作方式,有 两种:加密或解密。
DES算法的工作过程:若Mode为加密,则用Key对数据Data进行加密,生成Data的密码 形式(64位)作为DES的输出结果;若Mode为解密,则用Key对密码形式的数据Data解密,还 原为Data的明码形式(64位)作为DES的输出结果。
在通信网络的两端,双方约定了一致的Key,在通信的源点用Key对核心数据进行DES加密 ,然后以密码形式通过公共通信网(如电话网)传输到通信网络的终点,数据达到目的 地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样便保证了核 心数据(如PIN,MAC等)在公共通信网中传输的安全性和可靠性。通过定期在通信网络的源 端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融界交易网 络的流行作法。
简单地说,算法只不过是加密的一种基本技术,DES基本组建分组是这些技术的一种组合 ,他基于密钥作用于明文,这是众所周知的轮(round)。DES有16轮,这意味着要在明文分 组上16次实施相同的组合技术。
3.2DES算法详述
DES算法把64位的明文输入块变为64位的密文输出块,他所使用的密钥也是64位,DES对64 位的明文分组进行操作。通过一个初始置换,将明文分组分成左半部分和右半部分,各32位 长。然后进行16轮相同的运算,这些相同的运算被称为函数f,在运算过程中数据和密 钥相结合。经过16轮运算后左、右部分在一起经过一个置换(初始置换的逆置换),这样算 法就完成了。
(1)初始置换
其功能是把输入的64位数据块按位重新组合,并把输出分为L0,R0两部分,每部分各 长32位,其置换规则如表1所示。
即将输入的第58位换到第1位,第50位换到第2位,…,依次类推,最后一位是原来的 第7位,L0,R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位。例:设置换前 的输入值为D1D2D3…D64,则经过初始置换后的结果为:L0=D58D50…D8;R0=D57D49…7。
(2)逆置换
经过16次迭代运算后,得到L16,R16,将此作为输入进行逆置换,即得到密文输出。 逆置换正好是初始置换的逆运算。例如,第1位经过初始置换后,处于第40位,而通过逆置 换,又将第40位换回到第1位,其逆置换的规则如表2所示。
(3)函数f(Ri,Ki)的计算
其算法描述如图1所示。
在图1中,“扩展置换”是将32位放大成48位,“P盒置换”是32位到32位换位,其换位 规则分别如表3、表4所示。
在(Ri,Ki)算法描述图中,S1,S2,…,S8为选择函数,其功能是把6 b数 据变为4 b数据。下面以选择函数S1为例说明其功能。其选择函数S1的功能表如表5所 示。
通过表5可以看到,在S1中共有4行数据,分别命名为0,1,2,3行,每行有16列,分 别命名为0,1,2,3,…,14,15列。
现设输入为:D=D1D2D3D4D5D6
令:列=D2D3D4D5,行=D1D6
然后在S1表中查得对应的数,以4位二进制表示,此即为选择函数S1的输出 。
(4)子密钥Ki(48 b)的生成算法
开始,由于不考虑每个字节的第8位,DES的密钥从64位变为48位,如表6所示,首先56位 密钥被分成两个部分,每部分28位,然后根据轮数,两部分分别循环左移l或2位。
DES算法规定,其中第8,16,…,64位是奇偶校验位,不参与DES运算。故Key实际可用 位数只有56位。即:经过密钥置换表的变换后,Key的位数由64位变成了56位,此56位分为C 0,D0两部分,各28位,然后分别进行第一次循环左移,得到C1,D1,将C1(28位),D1(28位 )合并得到56位,再经过压缩置换,从而便得到了密钥K0(48位)。依次类推,便可得到K1,K 2,…,K15。需要注意的是,16次循环左移对应的左移位数要依据表7所示的规则进行。
以上介绍了DES算法的加密过程。DES算法的解密过程是一样的,区别仅在于第一次迭代 时用子密钥K15,第二次是K14,…,最后一次用K0,算法本身并没有任何变化。
3.3算法的编程实现
对于算法的实现,前面有了很详细的算法概述,下面主要介绍如何编程。DES加密是一种 分 组加密算法,他是把密文分成几块(block),一次加密一块,分几次加密完成 ,这是一个非常典型的分组加密算法。
算法的主要函数为:
这个函数是对dc这个32位的结构进行加密,data则是输入的密钥存放的数据结构,blocks 因为是DES加密算法时的一个分组加密算法,所以blocks是指分组的组数。
这个函数是上个函数的逆运算,即对他进行解密。
4DES算法的应用误区及避开方法
DES算法具有极高的安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没 有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度 是每秒检测一百万个密钥,则他搜索完全部密钥就需要将近2 285年的时间,可见,这是 难以实现的。当然,随着科学技术的发展,当出现超高速计算机后,可以考虑把DES密 钥的长度再增长一些,以此来达到更高的保密程度。
由上述DES算法介绍可以看到,DES算法中只用到64位密钥中的其中56位,而第8,16, 24,…,64位8个位并未参与DES运算,这一点,提出了一个应用上的要求,即DES 的安全性是基于除了8,16,24,…,64位外的其余56位的组合变化才得以保证的。因此 ,在实际应用中,应避开使用第8,16,24,…,64位作为DES密钥的有效数据位,才能保 证DES算法安全可靠。对运用DES来达到保密作用的系统产生数据被破译的危险,这正是DES 算法在应用上的误区。
避开DES算法应用误区的具体操作:在DES密钥Key的使用、管理及密钥更换的过程中,应 绝 对避开DES算法的应用误区,即绝对不能把Key的第8,16,24,…,64位作为有效数据位 来对Key进行管理,这一点,对应用DES加密的用户来说要高度重视。有些网络, 利用定期更换DES密钥Key的办法来进一步提高系统的安全性和可靠性,如果忽略了上述应用 误区,那么,更换新密钥将是徒劳的,对网络的安全运行将十分危险,所以更换密钥一 定要保证新Key与旧Key真正的不同,即除了第8,16,24,…,64位以外其他位数据发生 了变化,这一点是非常重要的。
目前加密算法已被广泛的应用,随着信息化和数字化社会的发展,随着计算机和Inte rnet的普及,密码学必将在国家安全、经济交流、网络安全及人民生活等方面发挥更大作用 。
参考文献
[1] [美]Bruce Schneier应用密码学[M].吴世忠,祝世雄,张文正,等译.北京:机械 工业出版社,2000.
[2]冯登国.密码分析学[M].北京:清华大学出版社,2000.