分组密码的安全性要求在不知道密钥k的情况下,即使能得到全部密文,并且知道加密函数的全部计算细节,也无法得到相应的明文。例如,对于64比特分组,对之进行穷举的数据量为2的64次方,这是一个2-位的十进制数,即使用每秒运算万亿次以上的巨型计算机进行攻击,平均穷举时间也需要数年。当然这仅是理论数据,在攻击密码时还有其他约束条件,如文字、数据、规律等信息,所以实际需要的攻击时间要短得多。
DES是Data Encryption Standard的缩写,是美国国家标准局于1977年公布的由IBM公司研制的加密算法。DES加密算法广泛应用于电子商务领域,如POS,ATM,磁卡及智能卡等应用。
DES算法中数据以64比特分组进行加密,密钥长度也为64比特,其中有效密钥长度为56位。它的加密算法与解密算法相同,只是解密子密钥与加密子密钥的使用顺序刚好相反。
DES加密过程分为两部分:子密钥的产生 和 对明文的加密。
DES的密钥长度为64位,而实际有效密钥为56比特。对于输入的56比特密钥,每7位扩充1位奇偶校验位,使得8位构成的字节中1的个数为奇数,从而得到64位密钥
DES加密和解密过程都会用到16个48比特的子密钥,子密钥的生成步骤如下:
第一步,输入64位密钥 K=(x1x2x3……x64),将密钥K按PC-1表置换,得到56位二进制:(x57x49……x4),然后将这56位从中间分成2分,得到两个28位二进制:C0=(x57x49……x36),D0=(x63,x55……x4)。
PC-1表
(第二步到第三步是一次循环,输入Ci-1和Di-1,得到ki,输入从C0、D0开始。共16轮。以下以第一轮为例)
第二步,将C0和D0分别左循环移位<<(移位的位数查LS表),得到C1和D1;
LS表
第三部,将C1,D1连接得到56位二进制C1D1=b1b2……b56,将C1D1按照PC-2表进行置换得到第1个48位子密钥k1=b14b17……b32;
PC-2表
第四步,将第三部得到的Ci和Di做为入参,循环执行第二第三步16轮,得到16个子密钥k1~k16。
将明文数据以64位分组,每次对64比特进行加密。具体加密步骤如下:
第一步,对64比特数据按下表进行初始置换;
(第三步到第六步为一个循环,输入Ri-1、Li-1,输出Ri、Li。共执行16轮,每轮对应一个子密钥。以下以第一轮为例)第二步,将置换后的64比特从中间分成2个32位,得到L0和R0,分别是L0=D58D50...D8;R0=D57D49...D7。
第三步,将R0按照下表进行扩展E变换,从32位扩展到48位得到E1=x32x1x2…x32x1。
扩展E变换表
第五步,S盒。第四步,将扩展得到的E1和第一个子密钥k1进行模加(异或运算)。
设第四步模加结果为M1=m1m2m3…m48。将48比特分为8组6比特分组,每一组分别代入相应的S盒,得到4比特的结果值。S盒的计算是这样的:如果用m1m2m3m4m5m6表示第一组输入,S盒表中的行索引是m1m6组成的二进制数,列索引是m2m3m4m5组成的二进制,结果是该格的值。
将8组4进制的结果值连接起来,得到32比特。
S盒(8组)
S1: |
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 |
1 |
0 |
15 |
7 |
4 |
14 |
2 |
13 |
1 |
10 |
6 |
12 |
11 |
9 |
5 |
3 |
8 |
2 |
4 |
1 |
14 |
8 |
13 |
6 |
2 |
11 |
15 |
12 |
9 |
7 |
3 |
10 |
5 |
0 |
3 |
15 |
12 |
8 |
2 |
4 |
9 |
1 |
7 |
5 |
11 |
3 |
14 |
10 |
0 |
6 |
13 |
S2: |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
0 |
15 |
1 |
8 |
14 |
6 |
11 |
3 |
4 |
9 |
7 |
2 |
13 |
12 |
0 |
5 |
10 |
1 |
3 |
13 |
4 |
7 |
15 |
2 |
8 |
14 |
12 |
0 |
1 |
10 |
6 |
9 |
11 |
5 |
2 |
0 |
14 |
7 |
11 |
10 |
4 |
13 |
1 |
5 |
8 |
12 |
6 |
9 |
3 |
2 |
15 |
3 |
13 |
8 |
10 |
1 |
3 |
15 |
4 |
2 |
11 |
6 |
7 |
12 |
0 |
5 |
14 |
9 |
S3: |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
0 |
10 |
0 |
9 |
14 |
6 |
3 |
15 |
5 |
1 |
13 |
12 |
7 |
11 |
4 |
2 |
8 |
1 |
13 |
7 |
0 |
9 |
3 |
4 |
6 |
10 |
2 |
8 |
5 |
14 |
12 |
11 |
15 |
1 |
2 |
13 |
6 |
4 |
9 |
8 |
15 |
3 |
0 |
11 |
1 |
2 |
12 |
5 |
10 |
14 |
7 |
3 |
1 |
10 |
13 |
0 |
6 |
9 |
8 |
7 |
4 |
15 |
14 |
3 |
11 |
5 |
2 |
12 |
S4: |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
0 |
7 |
13 |
14 |
3 |
0 |
6 |
9 |
10 |
1 |
2 |
8 |
5 |
11 |
12 |
4 |
15 |
1 |
13 |
8 |
11 |
5 |
6 |
15 |
0 |
3 |
4 |
7 |
2 |
12 |
1 |
10 |
14 |
9 |
2 |
10 |
6 |
9 |
0 |
12 |
11 |
7 |
13 |
15 |
1 |
3 |
14 |
5 |
2 |
8 |
4 |
3 |
3 |
15 |
0 |
6 |
10 |
1 |
13 |
8 |
9 |
4 |
5 |
11 |
12 |
7 |
2 |
14 |
S5: |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
0 |
2 |
12 |
4 |
1 |
7 |
10 |
11 |
6 |
8 |
5 |
3 |
15 |
13 |
0 |
14 |
9 |
1 |
14 |
11 |
2 |
12 |
4 |
7 |
13 |
1 |
5 |
0 |
15 |
10 |
3 |
9 |
8 |
6 |
2 |
4 |
2 |
1 |
11 |
10 |
13 |
7 |
8 |
15 |
9 |
12 |
5 |
6 |
3 |
0 |
14 |
3 |
11 |
8 |
12 |
7 |
1 |
14 |
2 |
13 |
6 |
15 |
0 |
9 |
10 |
4 |
5 |
3 |
S6: |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
0 |
12 |
1 |
10 |
15 |
9 |
2 |
6 |
8 |
0 |
13 |
3 |
4 |
14 |
7 |
5 |
11 |
1 |
10 |
15 |
4 |
2 |
7 |
12 |
9 |
5 |
6 |
1 |
13 |
14 |
0 |
11 |
3 |
8 |
2 |
9 |
14 |
15 |
5 |
2 |
8 |
12 |
3 |
7 |
0 |
4 |
10 |
1 |
13 |
11 |
6 |
3 |
4 |
3 |
2 |
12 |
9 |
5 |
15 |
10 |
11 |
14 |
1 |
7 |
6 |
0 |
8 |
13 |
S7: |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
0 |
4 |
11 |
2 |
14 |
15 |
0 |
8 |
13 |
3 |
12 |
9 |
7 |
5 |
10 |
6 |
1 |
1 |
13 |
0 |
11 |
7 |
4 |
9 |
1 |
10 |
14 |
3 |
5 |
12 |
2 |
15 |
8 |
6 |
2 |
1 |
4 |
11 |
13 |
12 |
3 |
7 |
14 |
10 |
15 |
6 |
8 |
0 |
5 |
9 |
2 |
3 |
6 |
11 |
13 |
8 |
1 |
4 |
10 |
7 |
9 |
5 |
0 |
15 |
14 |
2 |
3 |
12 |
S8: |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
0 |
13 |
2 |
8 |
4 |
6 |
15 |
11 |
1 |
10 |
9 |
3 |
14 |
5 |
0 |
12 |
7 |
1 |
1 |
15 |
13 |
8 |
10 |
3 |
7 |
4 |
12 |
5 |
6 |
11 |
0 |
14 |
9 |
2 |
2 |
7 |
11 |
4 |
1 |
9 |
12 |
14 |
2 |
0 |
6 |
10 |
13 |
15 |
3 |
5 |
8 |
3 |
2 |
1 |
14 |
7 |
4 |
10 |
8 |
13 |
15 |
12 |
9 |
0 |
3 |
5 |
6 |
11 |
第五步,P盒置换。将S盒的32比特结果代入P盒置换表。
第六步,将P盒结果与L0模加,作为R1。将R0作为L1。
第七步,将L1、R1作为入参,代入第三步,循环16轮,得到L16和R16。
第八步,将R16L16组成的64比特代入IP逆置换表,置换后就是64比特的密文了。
以上8步,将64比特明文转换为64比特密文。最后将各组64比特密文连接起来得到最终密文。
DES的解密过程和加密过程完全类似,只是将16轮的子密钥序列k1,k2…k16顺序反过来。即第一轮用k16,最后一轮用k1。
DES的密钥长度为64比特,但实际上只有56比特可用,普遍认为这样的密钥长度太短。
1999年,美国电子边境基金会EFF只用22小时15分钟就破译了DES。随着计算能力增强,必须相应增加算法的密钥长度。
为了继续使用DES,可以采用DES的变形:三重DES。
三重DES中,使用两个64位密钥:K1、K2,使有效密钥长度增加到112位,大大增强了安全性。
设P为明文,C为密文,k1k2分别为密钥,E为加密过程,D为解密过程,
加密时先对明文用K1加密,结果用K2解密,再对解密结果用K1加密。
解密过程相反。
如果令K1=K2,则可以前向兼容1重DES。