目录
1. DES概述
- DES(Data Encryption Standard)数据加密标准
- DES是分组密码的典型代表,也是第一个被公布出来的加密标准算法。
- 属于对称运算,综合使用了置换(P)、代替(S)和代数(异或)等多种密码技术。
- 典型的Feistel密码结构,一共进行16轮迭代,现代大多数对称分组密码也是基于Feistel密码结构。
2. DES原理
首先了解下整体过程:
- 由 64 位密钥生成 16 个 48 位的子密钥
;
- 对 64 位的明文初始化置换 IP,分成左右各半,即
和
;
-
在 16 个子密钥控制下按 Feistel密码结构 进行 16 轮迭代 (每轮迭代包括 E扩展、异或、S盒代换、P置换 );
-
交换左右 32 位得到
,再进行 逆初始置换
。
下面介绍详细过程:
2.1 子密钥的产生
- 对于 64 位的密钥,其有效密钥长度为 56 位(另外8位用于校验),先经过置换选择1后分成左右各 28 位。然后再经过 16 次的循环左移和置换选择2,产生 16 个 48 位的子密钥。具体如下:
(1)置换选择1
- 64 位的密钥首先去掉 8 位奇偶校验位,剩余56位有效密钥长度。如图,最后一列为奇偶校验位。
- 然后根据下图的置换表PC-1,将密钥打乱重排,再分成左右各半,左边 28 位记为
,右边 28 位记为
。
- 例如,PC-1第1位是57,即把原密钥的第57位排在第1位。
- 注:PC-1表是给定的,共有 8行7列。可以发现,PC-1表中不含奇偶校验位,所以在置换的同时就去掉奇偶校验位,而不用真的单独去掉后再打乱。
- 即置换选择1后从 64 位变成 58 位。
(2)循环移位
- 根据下图的循环移位表决定
和
左移的位数。
- 如:1111000 0110011 0010101 0101111
- 循环左移1位后:1110000 1100110 0101010 1011111
- 注:迭代次数不同,移位次数不同。
迭代次数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
移位次数 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 |
(3)置换选择2
- 合并循环左移后的左右两部分,然后根据下图的置换表PC-2,将得到的
打乱重排,并从 56 位变成 48 位,得到第1个子密钥
。
- 注:置换表PC-1是 8行6列。
- 例如,PC-2第1位是14,即把循环移位后的第14位排在第1位。
(4)循环迭代
- 之后重复循环移位和置换选择2,再迭代15次。
- 即总共需要迭代16次,最终得到16个子密钥。
2.2 初始化置换IP
- 将明文用二进制位表示,按 64 位为单位进行分组,将 64 位明文根据初始置换表进行位与位的置换,置换后分为左右各半,即
和
,各 32 位。
- 注:初始置换表为 8×8 的表格,是固定的。
- 例如,初始置换表第1位是58,即把明文的第58位排在第1位。
2.3 Feistel密码结构和16轮的轮函数F变换
Feistel密码结构:
加密:
解密:
其中,F轮函数是DES的核心,数据处理宽度为 32 位,具体包括E扩展、异或操作、S盒代换、P置换:
(1)E扩展
- 按照扩展置换表,对
进行E扩展得到
,由 32 位扩展到 48 位。
- 例,扩展置换表第1位是32表示该位置的值等于未扩展R中第32位。
(2)异或操作
- 对
和
进行异或操作,即
。
(3)S盒代换
- S盒是DES唯一的非线性变换,是DES安全的关键,总共有8个S盒。每个S盒有6个输入,4个输出,是一种非线性的压缩变换。
- 将48位的
分为8组,每组6位,分别输入8个S盒,每个S盒产生4位输出,共输出32位。其中,每组的第1位和最后1位组成的二进制位行号,中间4位组成的二进制位列号。
- 例,
前8位为011000,则S1盒输入为011000,其中00是行,1100是列,S1盒行为0、列为12的交叉处的值为5,即输出为二进制0101。
- 后面位数也由相应的S盒处理,处理完成后由 48 位变回 32 位。
(4)P置换
- 按照置换运算P,将8个S盒代换后的值进行置换运算,把数据打乱。
按照上面步骤,进行 16 轮的轮函数F变换。在进行 16 轮相同迭代后, 交换左右 32 比特得到。
2.4 逆初始置换![IP^{-1}](https://latex.csdn.net/eq?IP%5E%7B-1%7D)
- 按照逆初始置换表进行置换得到64位的密文,这是DES加密的最后一步。