密码算法
DES
首先声明!!!
由于DES的密文可以在短时间内被破译,现已不再使用。
是什么?
DES(Data Encryption Standard)是1977年美国联邦信息处理标准(FIPS)中采用的一种对称密码。
怎么做?(加密和解密)
DES将64 bits的明文加密成64 bits的密文。但实质上其密钥长度为56 bits,因为每隔7个比特会设置一个检查错误的比特。
由于每次只能加密64比特,所以当明文较长时,需要对加密进行迭代,迭代的方式即称为模式。(后续提及)
DES的结构(Feistel网络)
在Feistel网络中,加密的各个步骤称为轮(round),整个加密过程就是进行若干次轮的循环。DES是一种16轮循环的Feistel网络。
具体步骤:
- 输入的64比特数据划分为两个32比特,分别作为“左侧”LD和“右侧”RD输入。
- ((RD + 子密钥) --> 轮函数f) XOR (LD) = 加密后的LD 向下作为下一轮左侧。
- RD直接向下作为下一轮右侧。
其中,
“轮函数”:根据RD与子密钥生成看似随机的比特序列,用于对LD加密。
“子密钥”:本轮加密所使用的密钥,每一轮都需要一个不同的子密钥(subkey)。
注意:
最后一轮加密后,不需要对调。
使用同一子密钥按照相反顺序,即可完成解密——加密解密结构相同。
Feistel网络中轮数可以任意增加,可以使用任意函数作为轮函数(即使不存在反函数也OK!)。
越复杂越好!反正能解!
综上,无论任何轮数,任何轮函数,都可用相同结构加密和解密,且加密结果必定能正确解密。
三重DES
是什么?
三重DES(triple-DES)是为了增加DES的强度,重复3次所得到的一种密码算法,缩写3DES
怎么做?
其过程是 加密–解密–加密 ,为的是兼容普通的DES(当所有密钥相同时)。
使用两(三)种不同密钥的算法,称为DES-EDE2(3)(Encryption、Decryption)
结构
现状
处理速度不高,除了向下兼容,很少用于新的用途。
AES——高级加密标准
2000年,AES(Advanced Encryption Standard)最终被确定为Rijndael对称密码算法。
什么是Rijndael
Rijndael的分组长度和密钥长度可以选择以32比特为单位,在128到256比特的范围。
AES规格,分组长度固定为128比特,密钥长度只有128、192和256比特三种。
Rijndael的加密和解密
DES使用Feistel网络,Rijndael算法使用SPN结构(Substitution-Permutation network, 代替置换网络)。
与DES一样,Rijndael算法也是由多个轮构成,每一轮分为SubBytes、ShiftRows、MixColumns和AddRoundKey四个步骤。
加密四个步骤
输入分组为128比特,即16字节
- SubBytes(逐字节替换):以每个字节的值(0~255)为索引,从一张拥有256个值的替换表(S-Box)中查找对应值。
- ShiftRows(行平移):以4字节为单位的行(row)按一定规则向左平移,且每一行平移的字节数不同。
- MixColumns(列混合):将每列4字节值根据矩阵运算转变为另外的值。
- AddRoundKey(轮密钥XOR):将每1字节与轮密钥进行XOR。
其解密过程也是使用相同的结构,顺序调换罢了。
在这种结构中,输入的所有比特在一轮中都会被加密,这个Feistel网络有所区别,使得其加密所需轮数更少,此外,加密过程还能以字节、行、列为单位并行计算。
------本文图文参考书《图解密码技术》------