白乐天

道阻且长,行则将至。

详解DES及3DES

DES简介

DES(Data Encryption Standard)是一种对称加密算法。DES是一种分组加密算法,分组长度是64位(即8字节),密钥长度为64位(8字节),每8位包含一个校验位,用于奇偶校验,所以只有56位参与运算。

加密流程

DES的加密流程可以分为3个步骤。

初始置换(IP)

64位明文通过固定置换表(IP表)重新排列。

初始置换表

原来位于第58个位置的数据放在第1个位置,原来位于第50个位置的数据放在第2个位置,第42个放在第3个,以此类推。

16轮Feistel迭代

将经过初始置换的64位数据被分成两部分,分为左32位(L₀)和右32位(R₀)。

后面每一轮都会输出新的左部分和右部分,记为 Ln和 Rn,其中n 是轮次编号(从0到15)。

E扩展置换

将32位的 Rn 通过一个固定的扩展置换表变成48位的数据。

扩展置换表

经过这样一个表将原来32位的数据扩展为48位的数据。

与子密钥异或(XOR)

扩展后的48位数据与当前轮子密钥Kₙ按位异或,子密钥的长度是48位,异或后的数据长度也是48位。(后面会讲子密钥生成过程)。

S盒替换

将异或后的48位数据分为8块,每块数据长度为6位,在DES中有8个S盒,在每个S盒中,将6位的输入压缩为4位的输出,然后得到32位的输出。

P盒置换

S盒得到的32位输出通过固定置换表(P盒)进一步混淆,重新排列。

P盒置换表

这样一次轮函数就结束了

逆初始置换(IP⁻¹)

经过16轮的轮函数迭代之后,将L15和R15拼接成64位的数据,经过逆初始置换表置换之后,生成最终的64位密文。

逆IP置换表

密钥调度(生成子密钥)

主密钥长度为64位,除去8位校验位(第8,16,24,32,40,48,56,64位),剩余56位参与运算。

PC-1置换

将64位密钥(剔除校验位后为56位)按照预定的PC-1置换表重新排列,并分为左右两部分(各28位)。

PC-1置换表

循环左移

对左右各28位数据进行循环左移。根据轮数不同,每一轮移位的位数(1位或2位)也有所不同,目的是使得子密钥具有足够的扩散性。

每次循环左移是基于上一次生成的中间密钥部分进行移位。

PC-2置换

将移位后的56位密钥合并后,通过PC-2置换表选择48位作为当前轮的子密钥,生成16轮子密钥。

PC-2置换表

3DES简介

3DES(Triple DES),即三重DES加密算法,3DES是为了增加DES的强度,将DES重复3次所得到的一种密码算法,也称为TDEA。

加密模式

3DES通过三次DES操作实现加密,支持两种主要模式:

  • EDE模式(加密-解密-加密):最常用,支持密钥灵活性。
  • EEE模式(加密-加密-加密):较少使用,安全性类似但需更多计算。

EDE模式

3DES最常用的模式是EDE模式(Encrypt-Decrypt-Encrypt)

加密流程

其基本思路是:

第一步:使用密钥K₁对明文进行DES加密。

第二步:使用密钥K₂对中间结果进行DES解密。

第三步:使用密钥K₃对结果再次加密,生成最终密文。

公式表示:

解密流程

解密是加密的逆过程,顺序为: