12.1 背景
DES因为ANSI提出的DEA算法和ISO算法提出的DEA-1算法而出名。它抵挡了多年的密码分析师和可能存在的很强的敌人。
标准的发展
上世纪七十年代,民间密码学的研究非常的随意散漫,甚至被垄断在了军方。所以民间发表的密码学研究论文更是一篇都没有。但是密码学在军方的研究已经发展了很多很多年了(想想二战时期,电报,信息等传递,总归不会是大白话穿过去的吧?),但是运用到军方的通信设备,负责国家安危、打仗的军人,也是不懂密码学(就一些研究人员懂)。美国国家安全局(NSA)对密码学当然很了解,但是当时人们都不知道NSA这个机构,跟别谈密码学了。
几家小公司制作通信设备和密码设备发往海外国家。因为没有统一的标准,设备都是不一样的。买家,使用者都不知道这玩意儿到底安不安全(不懂啊),还没有独立的机构,可以评测设备的安全性。(要是当时有设备安全评测,估计成了暴发户了)。
到了1972年,美国美国国家标准局(NBS),现在是美国国家标准和技术协会。发布了一个提出要做一个计算机和数据信息的程序。他们想要开发的是一个单一的,标准密码算法。这个标准的算法,可以被测试和检测,不同的密码设备之间也可以相互交互,还要实现起来很便宜。
1973年,5月15日,NBS提出了标准加密算法的公共要求:
1)、算法必须提供高级别的安全
2)、算法必须详细,并且容易理解
3)、算法安全要由秘钥决定,安全也不能依靠由算法安全
4)、算法必须所有用户都能使用
5)、算法必须适用于不同的应用程序
6)、算法必须能够在电力设备上经济节约的实现
7)、算法必须足够使用
8)、算法必须能够被验证
9)、算法必须可出口的
NBS收到了IBM提交的算法,然后NBS寻求NSA的帮助,检验一下算法怎么样,符不符合条件。之后由NBS宣布IBM提供的算法通过,并且还给了一张免版税的许可证。
从这时候起,由于NSA对于该算法的发展具有隐藏却重要的作用,人们就抱怨起来,它居然把秘钥从128位降低到56位,这不是降低安全率吗?还有人怀疑该算法被NSA藏了“后门”,只有NSA可以随意进出的漏洞。
NBS在其后邀请了大量的专业人士,相关人士,进行评估,看看这个算法是否是人们认为的这个样子。无论结果怎么样,1976年,DES标准最终还是确定了下来。
采纳标准
1981年,美国国家标准协会批准DES作为私营部门标准,随后ANSI发布了DEA操作模式标准,它是一个类似于NBS发布的文档,也是网络加密标准。
DES设备的确认和认证
NIST对DES做校验。这种校验确保程序执行遵守制定的标准。直到1994年,NIST校验硬件和固体实现,标准禁止了软件实现。
1987年
DES方案每五年会被修订一次,1983年方案顺利被重新修订了一次,然后在1987年,NBS公开征求大家对于第二个五年的修订的意见。三个不同的选择以供考虑:另花五年重申标准,撤回标准,或者修改标准适应性。
NBS和NSA重新修订了标准。NSA宣布不会再认证这个标准了。因为它被攻破的可能性越来越高了。
NSA提出了CCEP,可以提供一系列的算法来代替DES,当然了,NSA什么尿性都能想到,这算法是不公开的。这方案最终并没有通过。
现如今公司越来越广泛的使用DES,同时也没有足够的其它选项以供选择。如果撤回这个DES标准,那么很多公司的数据就没有保护了。最终辩论以后,DES成了美国政府标准。NBS宣布DES不会再认证了。
1993
1992年,NBS,现在叫NIST,再一次向大众收集DES的想法。向公众就FIPS 46-1发表评论。这样就三个选择。
1、每五年就进行一次重申。美国国家标准与技术协会将会检测设备执行标准
2、放弃这种标准。
3、修订标准的适用性或者实施说明
这个公开招募在1992年十二月10结束。NIST的代理主任说:
去年,NIST也收集关于DES修订的评论。在看完这些评论,还有一些我获得的技术输入以后。我计划建议商务部长继续修订DES五年。我也计划建议部长顺便表明寻找新的替代标准。
总说要换了,DES标准要结束了,,但1998年又要继续这么说了。
DES的描述
DES是分组密码,它用一个64位块对数据进行加密。一个64位明文块从算法一头进去,64位密文块从另一边出来。DES就是一个对称加密算法:加密和解密的算法、密钥都是相同。
密钥的长度是56位。(密钥通常会扩展成64位数字)。密钥可以是任意56位数字和可以在任何时候被改变。
算法概述
DES操作的是64位明文块。在初始化排列以后,块就会被打裂成左、右两半(每个32位长)。然后就是16轮相同的操作,叫做函数f(数据和密钥混合起来)。在16轮操作以后,左右两边组合,最后一个排列结束了这个算法。
每一轮,密钥移位。并且从56位密钥中选择48位。数据左边一半通过扩展排列扩张成48位,和被移位且排序以后的密钥通过异或组合。这个操作的结果成了新的左半边。老的右一半成了新的右一半。这个操作重复16次,作为DES16轮循环。

初始化排列
在第一轮操作(上述的16轮操作)前,初始化排列就发生了;

初始化排列其实就是IP置换,如下图所示:
| – | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 1 | 58 | 50 | 42 | 34 | 26 | 18 | 10 | 2 |
| 2 | 60 | 52 | 44 | 36 | 28 | 20 | 12 | 4 |
| 3 | 62 | 54 | 46 | 38 | 30 | 22 | 14 | 6 |
| 4 | 64 | 56 | 48 | 40 | 32 | 24 | 16 | 8 |
| 5 | 57 | 49 | 41 | 33 | 25 | 17 | 9 | 1 |
| 6 | 59 | 51 | 43 | 35 | 27 | 19 | 11 | 3 |
| 7 | 61 | 53 | 45 | 37 | 29 | 21 | 13 | 5 |
| 8 | 63 | 55 | 47 | 39 | 31 | 23 | 15 | 7 |
(1,1)上的58,代表着现在表中第58位的数据要放到(1,1)上,这里就是55(7*8+2,也就是现在的(2,8)位置上的数值),需要放到新表中的1位置上。经过变换,新的数据表如下所示:
| – | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 1 | 55 | 53 | 51 | 49 | 56 | 54 | 52 | 50 |
| 2 | 39 | 37 | 35 | 33 | 40 | 38 | 36 | 34 |
| 3 | 23 | 21 | 19 | 17 | 24 | 22 | 20 | 18 |
| 4 | 7 | 5 | 3 | 1 | 8 | 6 | 4 | 2 |
| 5 | 63 | 61 | 59 | 57 | 64 | 62 | 60 | 58 |
| 6 | 47 | 45 | 43 | 41 | 48 | 46 | 44 | 42 |
| 7 | 31 | 29 | 27 | 25 | 32 | 30 | 28 | 26 |
| 8 | 15 | 13 | 11 | 9 | 16 | 14 | 12 | 10 |
初始排列和相应的最终排列不影响DES的安全性。但是由于这个排列算法对于软件来说实施困难,所以许多在软件上实施的DES算法都抛弃了初始化和最终的排列。尽管这种算法并没有比DES更不安全,但是它已经不遵循DES标准,已经不可以叫做DES算法了。
密钥转换(子密钥生成算法)
首先,64位的密钥,每到8的倍数位置,就踢掉这一位(例如第8、16、24、32位可以被忽略掉)。这样一共就踢掉了8位,只剩下56位。踢掉的那八位可以被用作奇偶校验,确保密钥没有错误。现在剩下的56位密钥分成两组,左一祖28位,右一组28位。
然后每一组每一轮都整体循环移动一位或者两位,可以专门做个规定,画个表:
| round | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| number | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 |
这样就是,第一轮,将密钥向左循环移1位。第二轮,将密钥向左循环移动1位。
这样,按照上面这张表,就会生成16组不同的子密钥。
这样16组56位的子密钥生成以后,按照新给的一张置换表PC-2,进行选取,每组子密钥选出48位,作为新的密钥,最终进行使用。顺便一提,这种56到48的方式叫做压缩排列
举个例子:
一、选取密钥,随便设的
密钥K:0123456789ABCDEF(十进制)
转换成二进制:00000001 00100011 01000101 01100111 10001001 10101011 11001101 11101111
二、一共是64位,然后按照上面的IP置换表进行置换
新的密钥K二进制:11001100 00000000 11001110 11111111 11110000 10101010 11110000 10101010
三、将8的倍数位全剔除,留下剩下的56位(8,16,24,32,40,48,56,64)
56位密钥k:1100110 0000000 1100111 1111111 1111000 1010101 1111000 1010101
四、分成左右两部分L0和R0(每部分28位)
L0=1100110 0000000 1100111 1111111
R0=1111000 1010101 1111000 1010101
使用上面的循环移位表进行移位,如下所示

第一轮是向左循环移动一位(移动的当然是L0,R0,每次移动的数据都是上一轮的数据)
L0=1100110 0000000 1100111 1111111 R0=1111000 1010101 1111000 1010101
L1=1001100 0000001 1001111 1111111 R1=1110001 0101011 1110001 0101011
L2=0011000 0000011 0011111 1111111 R2=1100010 1010111 1100010 1010111
L3=1100000 0001100 1111111 1111100 R3=0001010 1011111 0001010 1011111(这里向左两位)
L4=0000000 0110011 1111111 1110011 R4=0101010 1111100 0101010 1111100
L5=0000001 1001111 1111111 1001100 R5=0101011 1110001 0101011 1110001
L6=0000110 0111111 1111110 0110000 R6=0101111 1000101 0101111 1000101
L7=0011001 1111111 1111001 1000000 R7=0111110 0010101 0111110 0010101
L8=1100111 1111111 1100110 0000000 R8=

本文讲述了DES加密标准的历史和发展过程,包括其背景、标准的发展、采纳标准的过程、DES设备的确认和认证等内容。DES是一种对称加密算法,用一个64位块对数据进行加密。
最低0.47元/天 解锁文章
833

被折叠的 条评论
为什么被折叠?



