分组密码概述
分组密码是对称密码的一种,是最常用的加密手段,也是密码学极其重要的应用。所谓对称密码,即是加密和解密使用同一密钥或加密和解密的密钥之间存在简单的、容易计算的互推关系。
分组密码的工作方式是,首先将明文分成长度固定的组,如64比特或128比特为一组,并对不足64比特或128比特的尾组用适当的方式进行填充,将其扩充为一个整组后进行加密。然后用同一密钥和算法对每一组分别加密,输出固定长度的密文。
分组密码的安全性要求在不知道密钥k的情况下,即使能得到全部密文,并且知道加密函数的全部计算细节,也无法得到相应的明文。例如,对于64比特分组,对之进行穷举的数据量为2的64次方,这是一个2-位的十进制数,即使用每秒运算万亿次以上的巨型计算机进行攻击,平均穷举时间也需要数年。当然这仅是理论数据,在攻击密码时还有其他约束条件,如文字、数据、规律等信息,所以实际需要的攻击时间要短得多。
DES简介
DES是Data Encryption Standard的缩写,是美国国家标准局于1977年公布的由IBM公司研制的加密算法。DES加密算法广泛应用于电子商务领域,如POS,ATM,磁卡及智能卡等应用。
DES加密算法
DES算法中数据以64比特分组进行加密,密钥长度也为64比特,其中有效密钥长度为56位。它的加密算法与解密算法相同,只是解密子密钥与加密子密钥的使用顺序刚好相反。
子密钥的产生 和 对明文的加密。
子密钥的产生
DES的密钥长度为64位,而实际有效密钥为56比特。对于输入的56比特密钥,每7位扩充1位奇偶校验位,使得8位构成的字节中1的个数为奇数,从而得到64位密钥
子密钥,子密钥的生成步骤如下:
第一步,输入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解密算法
DES的解密过程和加密过程完全类似,只是将16轮的子密钥序列k1,k2…k16顺序反过来。即第一轮用k16,最后一轮用k1。
三重DES的变形
DES的密钥长度为64比特,但实际上只有56比特可用,普遍认为这样的密钥长度太短。
1999年,美国电子边境基金会EFF只用22小时15分钟就破译了DES。随着计算能力增强,必须相应增加算法的密钥长度。
为了继续使用DES,可以采用DES的变形:三重DES。
三重DES中,使用两个64位密钥:K1、K2,使有效密钥长度增加到112位,大大增强了安全性。
设P为明文,C为密文,k1k2分别为密钥,E为加密过程,D为解密过程,
- 3DES加密过程为:C=Ek1(Dk2(Ek1(P)))
- 3DES解密过程为:P=Dk1(EK2(Dk1(C)))
加密时先对明文用K1加密,结果用K2解密,再对解密结果用K1加密。
解密过程相反。
如果令K1=K2,则可以前向兼容1重DES。