DES 数据加密标准

DES 数据加密标准

DES 是由美国 IBM 公司基于 Horst Feistel 提出的理论研制出来的加密算法,于 1977 年 1 月 15 日由美国国家标准局颁布为数据加密标准(Data Encryption Standard)。

DES 是一种分组密码,其输入的明文长度为 64bit,密文分组长度也是 64bit,密钥长度为 64bit,有 8bit 的奇偶校验,有效密钥长度为 56bit。

算法主要包括:初始置换 \(IP\)、16 轮迭代的乘积变换、逆初始置换 \(IP^{-1}\) 以及 16 个子密钥产生器。

DES 算法框图
DES 算法框图

DES 加密过程

第一步:数据填充分组

对明文数据填充分组,使其每个数据块是 64 bit。

第二步:初始置换

IP 置换目的是将输入的 64 位数据块按位重新组合,并把输出分为 \(L_0\)\(R_0\) 两部分,每部分各长 32 位。 \(IP\)\(IP^{-1}\) 在密码意义上作用不大,它们的作用在于打乱原来输入的 ASCII 码字划分的关系。

第三步:DES 的轮结构

将经过 IP 置换后的数据分成 32 bit 的左右两组,在迭代过程中彼此左右交换位置。每轮迭代时,只对右边 32 bit 进行一系列的加密变换,在此轮迭代即将结束时,把左边的 32 bit 与右边得到的 32 bit 逐位模二相加,左右下一轮右边的段,并将右边未经变换的段直接送到左边的寄存器作为下一轮迭代时左边的段。

每一轮,右边的段要经过选择扩展运算 E、密钥加密运算、选择压缩运算 S、置换运算 P 和左右混合运算。

选择扩展运算:

将输入的 32 bit \(R_{i-1}\) 扩展成 48 bit 的输出,按照下表构建 48 bit 的输出。

密钥加密运算:

将子密钥产生器输出的 48 bit 子密钥 \(k_i\) 与选择扩展运算 E 输出的 48 bit 数据按位模二相加。

选择压缩运算:

将前面送来的 48 bit 数据从左至右分成 8 组,每组为 6 bit,并行送入 8 个 S 盒,每个 S 盒为一非线性代换网络,有 4 个输出。\(S_1\) 盒如下:

将输入的 6 bit,第一、五位连接,作为行号,其余为作为列号,找出对应的表中值,转换为四位二进制数。例如,输入 011011,行号位 01 = 1,列号位 1101 = 13,取值为 5 = 0101。

置换运算:

\(S_1\)\(S_8\) 盒输出的 32 bit 进行坐标置换,置换矩阵如下:

左右混合运算;

最后将得到的 32 bit 数据与左边 32 bit 即 \(L_{i-1}\) 逐位模二相加,所得的到的 32 bit 作为下一轮迭代用的右边的数字段,并将 \(R_{i-1}\) 并行送到左边的寄存器,作为下一轮迭代用的左边的数字段。

第四步:左右交换

将 16 轮迭代后得到的 \(L_{16}\)\(R_{16}\) 进行一次左右交换。

第五步:逆初始置换

和初始置换一样,用一个置换矩阵,对 64 为数据块重新组合,逆初始置换矩阵如下:

这样,DES 的加密过程就完成了。

DES 解密的算法,与加密算法相同,区别在于第 3 步中和数据进行按位异或的密钥使用顺序不同,在加密中是按照第 i 次迭代就采用第 i 次迭代生成的密钥进行异或,而解密时第 i 次迭代就采用第 17-i 次迭代生成的密钥和数据进行异或。

子密钥产生器

在第三步中,每一轮都用到了不同的子密钥 \(k_i\),子密钥产生器就是根据初始的 64 bit 密钥生成每一轮子密钥的算法。算法框图如下:

第一步:获得密钥

从最初的 64 bit 的密钥中,取出密钥中的奇偶校验位(第 8、16、24、32、40、48、56、64 位),剩下的 56 位作为有效输入密钥 \(key=k_1 k_2 ... k_{56}\)

第二步:置换选择一

用 PC-1 矩阵,打乱密钥顺序,并分为 \(C_0\)\(D_0\) 两部分。

第三步:行移位

\(C_0\)\(D_0\) 分别循环左移,每一轮左移的位数由下表决定:

第四步:置换选择二

用 PC-2 矩阵,打乱密钥顺序,获得本轮子密钥。

第五步:迭代

如框图所示,重复以上步骤,获取 16 轮子密钥。

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×