第四章 分组密码
1/
分组密码概述
分组密码具有速度快、易于标准化和便于软硬件实现等待点。 通常是信息与网络安全中实现数据加密和认证的核心体制,它 在计算机通信和信息系统安全领域有着最广泛的应用。 分组密码的思想:将明文消息编码表示后的数字序列划分成长 为n的组,各组分别在密钥k控制下变换成等长的输出数字序列 在相同密钥下,分组密码对长为n的输入明文组所实施的变换 是等同的,所以只需研究对任一组明文数字的变换规则。这种 密码实质上是字长为n的数字序列的代换密码。
分组密码的设计原则
针对安全性的一般设计原则 – 明文分组长度和密钥长度望尽可能大 – 扩散和混淆是由Shannon提出的设计密码系统的 两个基本方法,目的是抗击敌手对密码系统的统计 分析。 – 混乱原则(confusion):又称混淆原则,是指密钥 和明文以及密文之间的依赖关系尽可能的复杂 算法设计时,采用复杂的代数运算 – 扩散原则(diffusion):密钥或明文的每一位影响 密文的许多位以便隐蔽明文的统计特性 比如古典密码中的hill密码的设计思想
分组密码的常见结构
通常由一个简单的函数F迭代若干次而形成,而F都 是基于代换(S盒)—置换(P盒)的网络,S盒的设计 是分组密码的核心 1、Feistel结构(代换和置换)Li-1 Ri-1
Ki F
Li = Ri-1
Ri = Li-1 F(Ri-1, Ki)
Feistel结构是典型的迭代密码.Feistel结构的解密与加密 是完全一样的,除了所使用的子密钥的顺序正好相反4
分组密码的常见结构
2、SPN结构 S变换起到混淆的作用; P变换起到扩散的作用S S…
S
S P S…
S P S
…
S
…
S
S
S
…
S
SPN结构也是一种特殊的迭代密码 。SPN结构和Feistel结构 相比,可以得到更快速的扩散,但是SPN密码的加解密通常不 相似。5
Feistel网络参数
Feistel网络的实现与以下参数和特性有关: ① 分组大小 分组越大则安全性越高,但加密速度 就越慢。分组密码设计中最为普遍使用的分组大 小是64比特。 ② 密钥大小 密钥越长则安全性越高,但加密速度 就越慢。现在通常使用128比特的密钥长度。 ③ 轮数 单轮结构远不足以保证安全性,但多轮结 构可提供足够的安全性。典型地,轮数取为16。 ④ 子密钥产生算法 该算法的复杂性越大,则密码 分析的困难性就越大。 ⑤ 轮函数 轮函数的复杂性越大,密码分析的困难 性也越大。6
Feistel单轮的加解密
Li-1
Ri-1
Li-1Ki
Ri-1
F +Li 加密 Ri
F +Li 解密 Ri
Ki
Feistel结构中间的轮运算和最后一轮的有区别,最后一轮运 算不需要置换。目的使得加密和解密的编程完全一致。7
数据加密标准-DES
DES的
历史 1971年,IBM,由Horst Feistel领导的密码研究项 目组研究出LUCIFER算法。并应用于商业领域。 1973年,美国标准局征求标准,IBM提交结果 1977年,被选为数据加密标准。 1994年,美国决定98年12月以后不再使用DES算 法 DES是一种明文分组为64比特,有效密钥56比特, 输出密文64比特的,具有16轮迭代的分组对称密码 算法,DES由初始置换,16轮迭代,初始逆置换组 成。 DES的解密算法与加密算法相同,只是解密子密钥 与加密子密钥的使用顺序刚好相反。8
DES的加密算法
明文 m IP L0 + f k1 R0
L1=R0 + f
k2
R1=L0⊕f(R0,k1)
L2=R1
R2=L1⊕f(R1,k2)
L15=R14 + R16=L15⊕f(R15,k16) f
k16
R15=L14⊕f(R14,k15)
L16=R15 IP-1 密文 C
初始置换IP和逆置换IP-1
58 60 62 64 57 59 61 63
50 52 54 56 49 51 53 55
42 44 46 48 41 43 45 47
34 36 38 40 33 35 37 39
26 28 30 32 25 27 29 31
18 20 22 24 17 19 21 23
10 12 14 16 9 11 13 15
2 4 6 8 1 3 5 7
40 39 38 37 36 35 34 33
8 7 6 5 4 3 2 1
48 47 46 45 44 43 42 41
16 15 14 13 12 11 10 9
…… 此处隐藏1512字 ……
0 0 1 0 0 0 1 0
0 0 1 1 0 0 1 1
0 1 1 1 1 0 0 0
0 1 0 1 1 1 1 0
PC置换之后 C0: 00000000 01111111 11111111 1001
D0: 00011110 11001100 01000100 0011
循环左移 1位 C1 : 0000000 01111111 11111111 1001 0 D1 : 0011110 11001100 01000100 0011 021