DES算法详解
DES数据加密标准(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。DES 加密算法中,明文和密文为 64bit 分组,也就是8字节。密钥的长度为 64 位,但是密钥的每个第八位设置为奇偶校验位,所以只有 56 bit 对实际强度有影响。
算法原理
主要的加密流程如下图所示:
子密钥生成
DES 在加密过程中会用到 16 个 48 bit 的子密钥,而输入的密钥长度只有 64 bit,故需要根据主密钥生成子密钥,总共分为以下三步:
- 将输入的 64 bit 密钥经过 PC1 置换变为 56 bit 的输出,再将其分为 C0 和 D0 两部分
- 将 C0 和 D0 循环左移
- C0 和 D0 通过 PC2 置换获取 48 bit 子密钥,重复 2-3 步 16 轮
初始置换
将 64 bit 的明文组进行初始置换,这里的置换只是将数据的位置进行变化,得到一个新的数据。在密码学上的意义不大。
Feistel 结构和 F 轮函数
Feistel 结构会将 64 bit 的输入分成两半,每次会加密一半的明文,然后将左右位置互换。加密过程中会用到 F 轮函数,处理 16 轮,该函数会进行以下几个步骤:
- 扩展 32 bit 的明文到 48 bit
- 将扩展后的明文与该轮的子密钥进行异或
- 将异或后的结果分成 8 份,每份 6 bit,进行 S-box 置换,S-box 会将 6 bit 的输入转换为 4 bit 的输出
- 将上一步处理的 32 bit 结果进行一次 P 置换
逆初始置换
将 16 轮 Feistel 结构处理后的 64 bit 密文进行逆初始置换,至此 DES 算法对一个分组的加密流程结束。