第4章 分组密码

时间:2022-11-21 01:58:52 作者:壹号 字数:7103字

第四章 分组密码

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