数据加密标准DES(Data Encryption Standard)算法是由美国IBM公司研制的一种分组密码算法,一种迭代分组密码。
DES是一种使用最为广泛的加密算法,虽然DES出现后又产生了许多常规加密算法,但DES仍是此类算法中最重要的一种。
在正式讨论DES算法之前,为了更好的理解算法的实际工作过程,我们先来看一个简化的DES算法,以此加深对DES算法的理解。
一、简化的DES加密算法简化的DES加密算法是以8bit的明文分组和10bit密钥作为输入,产生8bit 密文分组作为输出。
1、加密流程简化的DES算法基本加密流程如图6.9所示图6.9 简化的DES的加密过程2、加密算法构成:函数、SW置换函简单DES的加密算法包括4个基本函数:初始置换函数IP、fk数、逆置换函数IP-1。
(1)初始置换函数IP初始置换IP是将明文中数据的排列顺序按一定的规则重新排列,而生成新的数据序列的过程。
如图6.10所示:8bit原数据位置 1 2 3 4 5 6 7 8【IP置换】经IP置换后的数据位置 2 6 3 1 4 8 5 7图6.10 简单DES的初始置换例:设8bit数据为11110011 ,则初始置换后的结果为:函数f k函数是多个置换函数和替代函数的组合函数。
f k函数首先将输(2) fk入它的8bit数据进行分组,分成左4位和右4位,然后对右组的4位数据进行E/P扩展置换运算,接着将扩展置换所得的8bit数据与子密钥进行异或运算,再将异或运算所得结果通过S盒输出,再将通过S盒输出的数据进行P4置换,最后将经过P4置换后的数据与输入f函数经分组的左4位数据进行异或运算。
kF(R,SK)函数是f k函数的核心函数,其中SK是子密钥。
F(R,SK)函数的运算方法如下:f k(L,R)=(L⊕F(R,SK),R)L:输入的左边4位分组 R:输入的右边4位分组⊕:逐位异或①扩展/置换是将4bit输入数据经过置换和扩展而产生8bit数据的算法。
如图6.11所示:E/P扩展置换前 1 2 3 4E/P扩展置换E/P扩展置换后 4 1 2 3 2 3 4 1图6.11 简单DES的扩展/置换②经扩展置换所得的8位数据与8位子密钥SK进行逐位异或运算异或运算规则如图6.12所示。
图6.12 异或运算即相同数据异或运算的结果为0,不同数据异或运算的结果为1。
例:A:1 1 1 0 1 0 1 1⊕B:1 0 1 0 0 1 0 0异或运算的结果:0 1 0 0 1 1 1 1③S盒输出简化DES算法使用两个S盒S0和S1。
如图6.13所示。
其运算方法是将输入S 盒的8bit数据从左至右按顺序分成左右两组,每组各4bit,左4bit数据输入S0盒,右4bit输入S1盒,如输入S盒的01001111分成0100和1111两组,对于每一组的第1bit和第4bit作为一个2bit数据并转化成一个十进制数据,这个数据用来指定S盒的一行。
第2bit和第3bit作为一个2bit数据并转化成一个十进制数据,这个数据用来指定S盒的一列。
将对应S盒中该行该列的十进制数据转化成二进制数据,即为S盒的2bit输出数据。
如:输入S0盒的数据为0100,则P1为0,P2为1,P3为0,P4为0,所以P1P4即00转化为0指定S0盒的第一行,P2P3即10转化为2指定S0盒的第三列,所得数据为3,转化为二进制为11,即从S0盒输出的2bit数据为11;输入S1盒的数据为1111,则P5为1,P6为1,P7为1,P8为1,所以P5P8即11转化为3指定S1盒的第四行,P6P7即11转化为3指定S1盒的第四列,所得数据为3,转化为二进制为11,即从S1盒输出的2bit数据为11,。
因此通过S盒输出的数据为1111。
S0盒 S1盒1 0 32 0 1 2 33 2 1 0 2 0 1 30 2 1 3 3 0 1 03 1 3 2 2 1 0 3图6.13 S盒图6.14 S盒运算④P4置换由S0和S1产生的4bit数据经P4置换,产生4bit数据的输出。
P4置换的方法如图6.15所示。
置换前数据位置: 1 2 3 4P4置换置换后数据位置: 2 4 3 1图6.15 P4置换(3)交换函数(SW)交换函数SW是将8bit输入数据的左四位与右四位交换位置之后产生8bit数据的输出。
其运算方法如图6.16所示。
交换前:1011 1101交换后:1101 1011(4)逆置换函数IP-1逆置换函数IP-1是将8bit输入数据置换为8bit数据输出。
其运算方法如图6.17所示。
置换前位置: 1 2 3 4 5 6 7 8IP-1 置换置换后位置: 4 1 3 5 7 2 8 6图6.17 逆置换函数IP-13、子密钥生成简化DES的密钥是使用一个发送方和接收方共享的10bit密钥。
运算中使用的两个8bit子密钥就是通过这个10bit密钥生成。
输入:10bit密钥输出:两个8bit子密钥(K1和K2)(1)子密钥生成流程简化DES的两个8bit子密钥的生成过程如图6.18所示。
(2)算法构成简化DES的子密钥生成算法主要由置换函数P10和置换函数P8这两个置换函数加上【循环左移】构成。
设10bit数据从左到右依次为(k1,k2,k3,k4,k5,k6,k7,k8,k9,k10)则置换方式如图6.19所示。
P10(k1,k2,k3,k4,k5,k6,k7,k8,k9,k10)=(k3,k5,k2,k7,k4,k10,k1,k9,k8,k6,)P8(k1,k2,k3,k4,k5,k6,k7,k8,k9,k10)=(k6,k3,k7,k4,k8,k5,k10,k9)P10置换前数据位置:1 2 3 4 5 6 7 8 9 10P10置换P10置换后数据位置:3 5 2 7 4 10 1 9 8 6P8置换前数据位置:1 2 3 4 5 6 7 8 9 10P8置换P8置换后数据位置: 6 3 7 4 8 5 10 9图6.19 P10和P8置换(3)子密钥生成例:设密钥为1010000010 ,则子密钥的生成过程如图6.20所示。
4、加密过程举例设8bit明文为11110011,使用前例中的子密钥进行加密,其过程如图6.21所示。
二、DES加密:在讨论完简单DES加密的基础上,我们来进一步探讨DES的加密过程。
1、加密过程DES的加密过程如图6.22所示,其中的一轮运算要循环16次,每一次循环都执行相同的过程,其具体过程如图6.23所示。
2、加密算法的构成:DES的加密算法和简单DES的加密算法相类似,也是主要包括4个基本函数:一个初始置换函数IP;一个f函数;一个用来交换数据的SW置换函数;一个逆k置换函数IP-1。
(1)IP置换图6.22 DES算法的一般过程图6.23 DES算法的一个循环与简单DES不同,DES的IP置换是将64bit的输入,经过置换产生64bit的输出。
其置换方法如图6.24所示。
图6.24 IP置换(2)扩展置换扩展置换是将32bit的输入通过置换与扩展转化为48bit的输出。
扩展置换的方法如图6.25所示。
图6.25 扩展置换(3)S盒DES算法使用8个S盒,每个S盒将一个48bit输入经过替代选择产生32bit 的输出。
如图6.26所示。
S1S2S3S4S5 ArrayS6S7S8图6.26 DES算法的S盒(4)置换函数P置换函数P将DES算法中8个S盒输出的共32bit数据经过置换产生32bit 的输出,其置换方法如图6.27所示。
图6.27 P置换(5)IP-1逆置换逆置换函数IP-1负责产生最后的64bit密文分组。
运算方法如图6.28所示。
图6.28 IP-1逆置换3、子密钥生成DES子密钥算法如图6.29所示。
其中每次循环的具体运算方法Array如图6.30所示。
算法与简单DES的算法类似,具体置换和循环左移的方法如图6.31-6.33所示。
图6.30 子密钥生成的一次循环图6.29 DES的子密钥生成算法图6.31 置换选择1(PC-1)图6.32 置换选择2(PC-2)循环次数左移比特数112132425262728291102112122132142152161图6.32 左移调度4、DES算法举例设明文M和密钥K的取值分别如下:M=0000 0100 1011 0101 1101 1001 1100 1110 1010 1100 1000 0110 1111 1000 0101 0011 K=0000 0001 0010 00110100 01010110 0111 1000 10011010 101111001101 1110 1111(1)IP置换M经过IP置换得L0=1100 1100 1100 011 0 0011 1011 1000 0110 R0= 0111 1110 0101 0010 0101 1100 1010 1000 密钥K经过置换选择PC-1得C0D0(56位),其中C0=1111 0000 1100 1100 1010 1010 0000D0=1010 1010 1100 1100 1111 0000 0000(2)左移置换左移C0、D0得C1=1110 0001 1001 1001 0101 0100 0001D1=0101 0101 1001 1001 1110 0000 0001对C1D1进行置换选择PC-2得子密钥K1K1=0000 1011 0000 0010 0110 011110011011 0100 1001 1010 0101(3)扩展置换E(R0)=0011 1111 1100 0010 1010 01000010 1111 1001 0101 0101 0000E(R0)⊕ K1=001101 001100 000011 000011101101 001101 110011 110101(4)S盒输出S1:(001101)=1101 S2:(001100)=0011 S3:(000011)=0111 S4:(000011)=1000 S5:(001101)=1101 S6:(001101)=1001 S7:(110011)=0101 S8:(110101)=1001 (5)P置换对S盒输出的结果进行置换P得F(Ri-1 ,Ki)F(R0 ,K)=01111111 10010101 11101000 01000110(6)异或运算L0⊕F(R,K)= 11001100 11000110 00111011 10000110⊕ 01111111 10010101 11101000 01000110=10110011 01010011 11010011 11000000(7)SW置换L1= R0= 0111 1110 0101 0010 0101 1100 1010 1000R1=1011 0011 0101 0011 1101 0011 1100 0000经过以上运算得出第一轮运算的结果,重复以上步骤直至得出L 16和R 16并经SW置换和逆置换得出最后的结果。