分组密码:对明文加密时,首先要对明文进行分组,每组的长度相同,然后对每组明文分别加密,得到等长的密文。
特点:速度快、易于标准化、便于软硬件实现
设计要求:
- 分组长度n要足够大
- 秘钥空间要足够大
- 密码变换必须足够复杂
分组密码设计原则和方法
- 混淆:所设计的密码应使得秘钥和明文以及密文之间的依赖关系相当复杂,以至于这种依赖性对密码分析者来说无法利用
- 扩散:所设计的密码应使得秘钥的每一位影响密文的许多位,以防止对秘钥进行逐段破译
分组密码工作方式
- ECB电子密码本
- CBC密码分组链接
- CTR计数器模式
- OFB输出反馈
- CFB密码反馈
DES数据加密标准
1.所需参数
key:8个字节共64位的工作密钥
data:8个字节共64位的需要被加密或被解密的数据
mode:DES工作方式,加密或者解密
2.初始置换
DES算法使用64位的密钥key将64位的明文输入块变为64位的密文输出块,并把输出块分为L0、R0两部分,每部分均为32位。初始置换规则如下:
注意:这里的数字表示的是原数据的位置,不是数据
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,
即将输入的64位明文的第1位置换到第40位,第2位置换到第8位,第3位置换到第48位。以此类推,最后一位是原来的第7位。置换规则是规定的。L0(Left)是置换后的数据的前32位,R0(Right)是置换后的数据的后32位。
例如:64位输入块是D1~D64,则经过初始置换后是D58,D50…D7。则L0=D58,D50,D12…D8;R0=D57,D49,D41…D7。
该置换过程是在64位秘钥的控制下。
3.加密处理–迭代过程
经过初始置换后,进行16轮完全相同的运算,在运算过程中数据与秘钥结合。
函数f的输出经过一个异或运算,和左半部分结合形成新的右半部分,原来的右半部分成为新的左半部分。每轮迭代的过程可以表示如下:
Ln = R(n - 1);
Rn = L(n - 1)⊕f(Rn-1,kn-1)
⊕:异或运算
Kn是向第N层输入的48位的秘钥,f是以Rn-1和Kn为变量的输出32位的函数
3.1函数f
函数f由四步运算构成:秘钥置换(Kn的生成,n=0~16);扩展置换;S-盒代替;P-盒置换。
3.1.1 秘钥置换–子密钥生成
DES算法由64位秘钥产生16轮的48位子秘钥。在每一轮的迭代过程中,使用不