Applied Cryptography:chapter 12 数据加密标准(DES)——第一部分

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

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轮操作)前,初始化排列就发生了;
DES第一轮排列方案
初始化排列其实就是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位(81624324048566456位密钥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=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值