DES加密算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
根据对明文的处理方式不同,密码算法又可分为流密码(或称为序列密码)和分组密码。 一次只对明文中的单个比特(有时对字节)运算的密码称为流密码(Stream Cipher)。对明 文的一组比特进行运算,这些比特组称为分组,相应的密码称为分组密码(Block Cipher)。
1973 年,美国国家标准局(NBS)开始征集一种标准的数据加密标准算法(DES),以 用于非机密性政府机构、商业部门和民间的对非机密的敏感数据进行加密。IBM 公司在 1971 年完成的 LUCIFER 密码(64 比特分组,128 比特密钥)的基础上,改进成为建议的 DES。 1975 年 3 月 17 日,NBS 公布了这个算法,并说明要以它作为联邦信息处理标准,征求各方 意见。1977 年 1 月 15 日,建议被批准为联邦标准—FIPSPUB 46,并设计推出了 DES 芯片。 1981 年,ANSI 将 DES 作为标准,即 DEA[ANSI X3.92]。1983 年,ISO 采用 DES 作为标准, 即 DEA-1。DES(Data Encryption Standard)是一个优秀的对称分组密码算法,直到 2000 年 10 月 2 日 NIST 宣布 AES 算法前,其一直是业界的标准。
表 2-4 置换 P 16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25
1.3 逆初始置换 IP-1
逆初始置换 IP-1 是初始置换 IP 的逆置换,它将由 L16、R16 合并的 64 位数据作为输入, 进行换位后得到 64 位的密文输出。IP-1 (b1b2…b64) = b40b8…b25,即将输入的第 40 位换到输出 的第 1 位,将输入的第 8 位换到输出的第 2 位,……,输入的第 25 位换到输出的第 64 位, 如表 2-5 所示。
2 8
3 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
(3)置换 P。8 个 4 位分组合并为一个 32 位数据,再经过一个置换 P 变换后,输出 32 位的结果。P(b1b2…b32) = b16b7…b25,即输出的第 1 位为输入的第 16 位,输入的第 2 位为输 入的第 7 位,输入的第 32 位为输入的地 25 位,可用表 2-4 表示。置换 P 如表 2-5 所示。P 的主要作用也是增加算法的扩散效果。
实验 2 数据加密标准—DES
一、 实验目的
通过使用 DES 算法对实验数据进行加密和解密,掌握现代分组密码算法基本原理,熟练 掌握 DES 算法各部件的运算原理和具体运算过程。
二、 实验原理
根据密钥间的关系,密码算法可分对称密码和非对称密码。在对称密码(Symmetric Cipher)中,加密密钥和解密密钥是完全相同的,或彼此之间容易互相推导。在非对称密码 (Asymmetric Cipher)算法,或称为公钥密码(Public Key Cryptology)中,加密密钥和解 密密钥是不同的,从加密密钥推导出解密密钥是计算上不可行的。
表 2-5 IP-1 置换 40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25
3 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
0 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
S7
1 13 0 11 7 4 9 2 1 4 11 13 12 3
1 10 14 3 5 12 2 15 8 7 14 10 15 6 8 0 5 9
8 0
3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
0 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
S2
1 2
3 13 4 7 15 2 8 14 12 0 1 10 6 0 14 7 11 10 4 13 1 5 8 12 6 9
9 11 5 3 2 15
6 2
3 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
S8
1 2
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5
位密文。
解密算法与加密算法基本相同,不同之处仅在于轮子密钥的使用顺序逆序,即解密的第
1 轮子密钥为加密的第 16 轮子密钥,解密的第 2 轮子密钥为加密的第 15 轮子密钥,……,
解密的第 16 轮子密钥为加密的第 1 轮子密钥。
4
图 2-1 DES 加解密流程图
1.1 初始置换(IP) IP 的作用是把输入的 64 位数据块的排列顺序打乱,每位数据按照下面换位规则重新组 合。IP (b1b2…b64) = b58b2…b7,即将输入的第 58 位换到输出的第 1 位,将输入的第 50 位换到 输出的第 2 位,……,输入的第 7 位换到输出的第 64 位,如表 2-1 表示。
3 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
0 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
S5
1 14 11 2 12 4 7 13 1 5 0 15 10 3 2 4 2 1 11 10 13 7 8 15 9 12 5 6
9 3
86 0 14
表 2-2 扩展运算 E 32 1 2 3 4 5 456789 8 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1
(2)压缩替换(S 盒)。记 B=E(R)⊕K,将 48 位的 B 分成 8 个分组,B=B1B2B3B4B5B6B7B8, 每个 6 位分组(Bi)分别经过一个 S 盒(Si)进行选择替换运算,转换为一个 4 位分组。每 个 Si(i=1,2,…,8)都由 4 行×16 列组成,如表 2-3 所示,每行都是全部 16 个长为 4 的 比特串的一个全排列,每个比特串用它对应的二进制整数表示。其运算规则为 Si (b1b2b3b4b5b6)=S [b1b6][b2b3b4b5],即取输入 6 位数据的最高位和最低位组成的数据为行号 (0~3),取中间 5 位为列号(0~15),以此行列号查 Si 盒表,即得到输出结果。例如, S1(101011)= S [(11)2][(0101)2]= S [(3)10][(5)10]=9。
3 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
0 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
S6
1 10 15 4 2 2 9 14 15 5
7 12 9 5 2 8 12 3
6 7
1 13 14 0 11 3 8 0 4 10 1 13 11 6
表 2-3 S 盒替换表
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
S1
1 2
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5
DES 是一种分组乘积密码,包括 16 轮迭代。明密文分组长度为 64 位,密钥总长为 64 位,有效长度 56 位,其中第 8、16、……、64 位共 8 位是奇偶校验位。DES 是一种对和运 算,除子密钥使用顺序逆序外,加密和解密算法相同。DES 是一种面向二进制的密码算法, 能够加解密任何形式的计算机数据。
表 2-1 IP 置换 58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7
1.2 f 函数 f 函数是多个置换函数和替代函数的组合函数,它将 32 位比特的输入变换为 32 位的输 出,如图 2-2 所示。
5
图 2-2 函数 f (R,K)流程图
(1)扩展变换和轮子密钥加。32 位的 R 经过扩展变换 E(Expend)后,扩展为 48 位的 E(R),然后与 48 位的轮子密钥 K 进行按位异或。其中,E(R)=E(b1b2…b32)= b32b1…b1,输出 的第 1 位为输入的第 32 位,输入的第 2 位为输入的第 1 位,输入的第 48 位为输入的地 1 位,如表 2-2 表示。E 的主要作用是增加算法的扩散效果。
1. DES 的加解密算法
DES 的加密算法流程如图 2-1 所示,包括三大步骤:
(1)初始置换。将输入的 64 位的明文进行பைடு நூலகம்始置换 IP。然后,将变换后的数据平分成
各 32 位的左右两部分,左部分记为 L0,右部分记为 R0。 (2)16 轮的轮变换。对 R0 实行在轮子密钥 K1(轮子密钥由密钥扩展算法产生)控制下
3 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S3
0 10 0 1 13 7
9 14 6 093
3 15 5 1 13 12 7 11 4 2 8 4 6 10 2 8 5 14 12 11 15 1
6
2 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
图 2-3 DES 密钥扩展算法流程图
(1)置换选择 PC-1。将输入的 64 位主密钥经过 PC-1 变换为一 56 位数据,并将其平分 为各 28 位的两部分 C0、D0,即 PC-1(K)=C0D0。在 PC-1 中,输入数据的 8 个奇偶校验位(第 8、16、……、64 位)不参与换位运算,换位方法如表 2-6 所示,即将输入的第 57 位换到 输出的第 1 位,将输入的第 49 位换到输出的第 2 位,……,输入的第 4 位换到输出的第 56 位。
7
2. DES 的密钥扩展算法 除了加解密算法外,DES 还有一个重要组成部分,即密钥扩展算法,它将 64 位的输入 密钥(称为主密钥 Master Key)扩展为加解密各轮所需的轮子密钥(Sub Key)。DES 共需 要 16 个轮子密钥,每个轮子密钥有 48 位。DES 密钥扩展算法将 64 位的主密钥扩展为 16 个 48 位的轮子密钥,其流程如图 2-3 所示。
3 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
0 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
S4
1 13 6 11 5 6 15 0 3 4 7 2 10 6 9 0 12 11 7 13 15 1
2 12 1 10 14 9 3 14 5 2 8 4
表 2-6 PC-1 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4
的变换 f,结果记为 f (R0, K1),再与 L0 做按位异或运算,其结果记为 R1,R0 则直接作为下 一轮的 L1,如此循环 16 轮,得到预输出结果 R16、L16。
⎧
⎨ ⎩
R
n
=
Ln = L n −1 ⊕
R n −1 f ( R n−1 , K n )
n = 1, 2 ," ,1 6
(3)逆初始置换。对 R16、L16 组合后的 64 位预输出结果实行逆初始置换 IP-1,得到 64
1973 年,美国国家标准局(NBS)开始征集一种标准的数据加密标准算法(DES),以 用于非机密性政府机构、商业部门和民间的对非机密的敏感数据进行加密。IBM 公司在 1971 年完成的 LUCIFER 密码(64 比特分组,128 比特密钥)的基础上,改进成为建议的 DES。 1975 年 3 月 17 日,NBS 公布了这个算法,并说明要以它作为联邦信息处理标准,征求各方 意见。1977 年 1 月 15 日,建议被批准为联邦标准—FIPSPUB 46,并设计推出了 DES 芯片。 1981 年,ANSI 将 DES 作为标准,即 DEA[ANSI X3.92]。1983 年,ISO 采用 DES 作为标准, 即 DEA-1。DES(Data Encryption Standard)是一个优秀的对称分组密码算法,直到 2000 年 10 月 2 日 NIST 宣布 AES 算法前,其一直是业界的标准。
表 2-4 置换 P 16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25
1.3 逆初始置换 IP-1
逆初始置换 IP-1 是初始置换 IP 的逆置换,它将由 L16、R16 合并的 64 位数据作为输入, 进行换位后得到 64 位的密文输出。IP-1 (b1b2…b64) = b40b8…b25,即将输入的第 40 位换到输出 的第 1 位,将输入的第 8 位换到输出的第 2 位,……,输入的第 25 位换到输出的第 64 位, 如表 2-5 所示。
2 8
3 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
(3)置换 P。8 个 4 位分组合并为一个 32 位数据,再经过一个置换 P 变换后,输出 32 位的结果。P(b1b2…b32) = b16b7…b25,即输出的第 1 位为输入的第 16 位,输入的第 2 位为输 入的第 7 位,输入的第 32 位为输入的地 25 位,可用表 2-4 表示。置换 P 如表 2-5 所示。P 的主要作用也是增加算法的扩散效果。
实验 2 数据加密标准—DES
一、 实验目的
通过使用 DES 算法对实验数据进行加密和解密,掌握现代分组密码算法基本原理,熟练 掌握 DES 算法各部件的运算原理和具体运算过程。
二、 实验原理
根据密钥间的关系,密码算法可分对称密码和非对称密码。在对称密码(Symmetric Cipher)中,加密密钥和解密密钥是完全相同的,或彼此之间容易互相推导。在非对称密码 (Asymmetric Cipher)算法,或称为公钥密码(Public Key Cryptology)中,加密密钥和解 密密钥是不同的,从加密密钥推导出解密密钥是计算上不可行的。
表 2-5 IP-1 置换 40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25
3 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
0 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
S7
1 13 0 11 7 4 9 2 1 4 11 13 12 3
1 10 14 3 5 12 2 15 8 7 14 10 15 6 8 0 5 9
8 0
3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
0 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
S2
1 2
3 13 4 7 15 2 8 14 12 0 1 10 6 0 14 7 11 10 4 13 1 5 8 12 6 9
9 11 5 3 2 15
6 2
3 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
S8
1 2
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5
位密文。
解密算法与加密算法基本相同,不同之处仅在于轮子密钥的使用顺序逆序,即解密的第
1 轮子密钥为加密的第 16 轮子密钥,解密的第 2 轮子密钥为加密的第 15 轮子密钥,……,
解密的第 16 轮子密钥为加密的第 1 轮子密钥。
4
图 2-1 DES 加解密流程图
1.1 初始置换(IP) IP 的作用是把输入的 64 位数据块的排列顺序打乱,每位数据按照下面换位规则重新组 合。IP (b1b2…b64) = b58b2…b7,即将输入的第 58 位换到输出的第 1 位,将输入的第 50 位换到 输出的第 2 位,……,输入的第 7 位换到输出的第 64 位,如表 2-1 表示。
3 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
0 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
S5
1 14 11 2 12 4 7 13 1 5 0 15 10 3 2 4 2 1 11 10 13 7 8 15 9 12 5 6
9 3
86 0 14
表 2-2 扩展运算 E 32 1 2 3 4 5 456789 8 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1
(2)压缩替换(S 盒)。记 B=E(R)⊕K,将 48 位的 B 分成 8 个分组,B=B1B2B3B4B5B6B7B8, 每个 6 位分组(Bi)分别经过一个 S 盒(Si)进行选择替换运算,转换为一个 4 位分组。每 个 Si(i=1,2,…,8)都由 4 行×16 列组成,如表 2-3 所示,每行都是全部 16 个长为 4 的 比特串的一个全排列,每个比特串用它对应的二进制整数表示。其运算规则为 Si (b1b2b3b4b5b6)=S [b1b6][b2b3b4b5],即取输入 6 位数据的最高位和最低位组成的数据为行号 (0~3),取中间 5 位为列号(0~15),以此行列号查 Si 盒表,即得到输出结果。例如, S1(101011)= S [(11)2][(0101)2]= S [(3)10][(5)10]=9。
3 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
0 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
S6
1 10 15 4 2 2 9 14 15 5
7 12 9 5 2 8 12 3
6 7
1 13 14 0 11 3 8 0 4 10 1 13 11 6
表 2-3 S 盒替换表
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
S1
1 2
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5
DES 是一种分组乘积密码,包括 16 轮迭代。明密文分组长度为 64 位,密钥总长为 64 位,有效长度 56 位,其中第 8、16、……、64 位共 8 位是奇偶校验位。DES 是一种对和运 算,除子密钥使用顺序逆序外,加密和解密算法相同。DES 是一种面向二进制的密码算法, 能够加解密任何形式的计算机数据。
表 2-1 IP 置换 58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7
1.2 f 函数 f 函数是多个置换函数和替代函数的组合函数,它将 32 位比特的输入变换为 32 位的输 出,如图 2-2 所示。
5
图 2-2 函数 f (R,K)流程图
(1)扩展变换和轮子密钥加。32 位的 R 经过扩展变换 E(Expend)后,扩展为 48 位的 E(R),然后与 48 位的轮子密钥 K 进行按位异或。其中,E(R)=E(b1b2…b32)= b32b1…b1,输出 的第 1 位为输入的第 32 位,输入的第 2 位为输入的第 1 位,输入的第 48 位为输入的地 1 位,如表 2-2 表示。E 的主要作用是增加算法的扩散效果。
1. DES 的加解密算法
DES 的加密算法流程如图 2-1 所示,包括三大步骤:
(1)初始置换。将输入的 64 位的明文进行பைடு நூலகம்始置换 IP。然后,将变换后的数据平分成
各 32 位的左右两部分,左部分记为 L0,右部分记为 R0。 (2)16 轮的轮变换。对 R0 实行在轮子密钥 K1(轮子密钥由密钥扩展算法产生)控制下
3 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S3
0 10 0 1 13 7
9 14 6 093
3 15 5 1 13 12 7 11 4 2 8 4 6 10 2 8 5 14 12 11 15 1
6
2 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
图 2-3 DES 密钥扩展算法流程图
(1)置换选择 PC-1。将输入的 64 位主密钥经过 PC-1 变换为一 56 位数据,并将其平分 为各 28 位的两部分 C0、D0,即 PC-1(K)=C0D0。在 PC-1 中,输入数据的 8 个奇偶校验位(第 8、16、……、64 位)不参与换位运算,换位方法如表 2-6 所示,即将输入的第 57 位换到 输出的第 1 位,将输入的第 49 位换到输出的第 2 位,……,输入的第 4 位换到输出的第 56 位。
7
2. DES 的密钥扩展算法 除了加解密算法外,DES 还有一个重要组成部分,即密钥扩展算法,它将 64 位的输入 密钥(称为主密钥 Master Key)扩展为加解密各轮所需的轮子密钥(Sub Key)。DES 共需 要 16 个轮子密钥,每个轮子密钥有 48 位。DES 密钥扩展算法将 64 位的主密钥扩展为 16 个 48 位的轮子密钥,其流程如图 2-3 所示。
3 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
0 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
S4
1 13 6 11 5 6 15 0 3 4 7 2 10 6 9 0 12 11 7 13 15 1
2 12 1 10 14 9 3 14 5 2 8 4
表 2-6 PC-1 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4
的变换 f,结果记为 f (R0, K1),再与 L0 做按位异或运算,其结果记为 R1,R0 则直接作为下 一轮的 L1,如此循环 16 轮,得到预输出结果 R16、L16。
⎧
⎨ ⎩
R
n
=
Ln = L n −1 ⊕
R n −1 f ( R n−1 , K n )
n = 1, 2 ," ,1 6
(3)逆初始置换。对 R16、L16 组合后的 64 位预输出结果实行逆初始置换 IP-1,得到 64