4.3 des 的 feistel 结构 | 第四章:数据加密标准与替换算法 |《密码学入门》| python 技术论坛-江南app体育官方入口

未匹配的标注

很多(但不是全部)现代分组密码都使用了 feistel 网络(实际上,aes 不是 feistel 密码)。除了潜在的密码学强度外,feistel 网络的另一个优势就是它的加密过程和解密过程几乎完全相同。des 的解密仅需要一个逆向密钥编排,这在软件和硬件上都是一个优势。下面是des 的 feistel 结构图:
du61mfoxkt.jpg!large
将 64 位的明文 x 进行初始按位置置换 ip 后,此明文会被分成l_0r_0两部分;然后将得到的 32 位的左右两部分输入到 feistel 网络,而 feistel 网络包含 16 轮操作。右半部分r_i将被送入函数 f 中,f 函数的输出将与 32 位的左半部分l_i进行 xor。最后,左右两部分进行交换。后面的每轮都重复这个过程,可以表示为:

l_i = r_{i-1} r_i = l_{i-1}\oplus f(r_{i-1}, k_{i})

其中 i = 1,…,16。经过 16 轮后,均为 32 位的左半部分l_{16}和右半部分r_{16}将再次交换,逆初始置换ip^{-1}是 des 的最后一步操作。逆初始置换ip^{-1}是初始置换ip的逆操作。每轮中的轮密钥k_i均来自 56 位主密钥,而这个过程则是通过密钥编排 [ key schedule ] 实现的。
前面提到的密码必须具备的两个基本属性,即扩散和混淆,都是在 f 函数内实现的。为了抵抗高级的分析攻击,设计 f 函数时必须十分小心。如果 f 函数的设计非常安全,feistel 密码的安全性也会随着密钥位数和轮数的增加而增强。
每轮中使用的 feistel 结构都将一个 64 位的输入分组双射映射到一个 64 位的输出分组(即每个可能的输入都唯一地映射到一个输出,反之亦然)。对任意函数 f 而言,即使 f 本身不是双向映射的这个映射仍然是双向映射。在 des 中,f 函数实际上是一个满射(多对一的映射),它使用了非线性的基本构造分组,并使用 48 位轮密码 k_i(1\leq i\leq16)将 32 位的输入映射到 32 位的输出。

本文章首发在 江南app体育官方入口 网站上。

上一篇 下一篇
讨论数量: 0



暂无话题~
网站地图