简介
DES为Data Encryption Standard的缩写,属于对称分组码算法,数据分组的长度为64比特。**长度为56比特(如果带有校验位则是64比特,每个8比特字节最后一个比特位是奇偶校验位)。奇偶校验位的值是前七个比特位的异或运算的结果取反(使用奇数校验),其结构如下:
算法流程
1、 整体加解密流程
由于加解密算法对称,即解密过程为加密的逆过程。
2、加密整体过程
IP为Initial Permutation,而LxRx整体的64比特数,L和R各位32比特。
3、IP及IP-1的向量表
在向量表中的数字表示第几个比特数,将输入的64比特根据向量表进行重新排序。
4、16次循环运算
需要进行16次类似的运算,这种运算称为Feistel算法。其中⊕表示异或运算。运算的基本方法,Ki为**生成算法生成的子**,f(.)函数进行**和比特的运算。Li = Ri-1,而Ri = Li-1⊕f(Ri-1,Ki)。
5、Ki生成方法
Parity drop在进行校验位去除的时候,需要进行置换,向量如下(有些文档称为PC1 permuted choice PC1)
Shift left每次左移一个或两个比特,注意使用的是循环左移,不同比特数移位情况如下
Compress 是将56比特的**,生成48比特的过程,向量如下(有些文档称为PC2 permuted choice PC2)
6、f(.)功能
E(Expansion)的功能是将32比特转换到48比特,而P是进行置换,S-Boxes将48bits映射到32比特。
理解上straight D-box处应该还有一次置换处理。
P置换为32位到32位的置换处理,向量表格如下
7、Expansion 32比特到48比特扩展
同样置换向量为
8、S-Box的处理48比特到32比特映射
而S-Box共有8个表格,每个表格为4X16。每次从6比特得到4比特,方式如下图,将比特1-6中的比特1和比特6亦即b1b6作为0-3的索引行号,比特2-5 b2b3b4b5为0-15的索引列号,从相应的S-Box中获取对应的值。
八个S-Box表格如下
9、(semi-)Weak keys
由于DES算法中子**的生成是依赖**循环移位得到的,所以一个特征的**的循环以为结果相同,称为weak keys:01010101 01010101, FEFEFEFE FEFEFEFE, E0E0E0E0 F1F1F1F1及1F1F1F1F 0E0E0E0E。semi-weak keys指那些只产生两组不同key的**。
10、2DES(Doulbe DES) 与 3DES
2DES是采用两个key进行两次DES算法加密,加密C=Ek2[KE1[P]],同样对称解密P=Dk1[Dk2[C]]。3DES又名TDEA(Triple data encryption algorithm),采用三次**处理,加密时使用的方法C=Ek3[Dk2[Ek1[P]]],解密时使用方法P=Dk1[Ek2[Dk3[C]]]。