简介
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]]]
。