为什么在DES算法的第一步中使用置换表,而在算法末尾使用置换表?

#1 楼

初始和最终排列对安全性没有影响(它们是不加密的,任何人都可以撤消)。通常的解释是,它们使某些情况下的实现更加容易,即通过8位总线接收数据的硬件电路:它可以将这些位累加到八个移位寄存器中,这在效率上(就电路面积而言)比一个移位寄存器要高。单个64位寄存器。此过程“自然地”执行DES的初始置换。

更详细:假设您正在设计一个硬件电路,该电路应使用DES进行一些加密,并按8位块接收数据。这意味着有8条“线”,每条线在每个时钟产生一位。累积数据的常见设备是移位寄存器:输入线插入一个位寄存器,该位寄存器本身插入另一个位,该寄存器插入第三个寄存器,依此类推。在每个时钟,每个寄存器接收前一个的内容,第一个寄存器接受新的位。因此,内容被“移位”。

对于8位总线,您将需要8个移位寄存器,每个移位寄存器接收8位用于输入块。第一个寄存器将接收位1、9、17、25、33、41、49和57。第二个寄存器将接收位2、10、18等。在八个时钟之后,您已经收到了完整的64位块,现在是时候进行DES算法本身了。 “左半部分”(32位),此时将由8个移位寄存器中每一个的最左4位组成。 “右半部分”也将从8个移位寄存器中获取位。如果您将其视为从移位寄存器到使用这些位的单元的导线,则最终会遇到一堆相互交叉的导线。交叉是可行的,但需要一定的电路面积,这在硬件设计中是昂贵的资源。

但是,如果您认为电线必须按照DES规范提取输入位并对其进行置换,那么您将发现不再有交叉。换句话说,位到移位寄存器中的累加固有地执行位的排列,这恰好是DES的初始排列。通过定义该初始排列,DES标准说:“好吧,既然您已经将位累积在八个移位寄存器中,那么就可以按此顺序使用它们就可以了。”

请记住,DES是在8位总线的技术设计和1000个晶体管的逻辑成本非常昂贵的时候设计的。 />

评论


$ \ begingroup $
出色的细节量!我们在大学里被告知,它使硬件的实现更加容易,但是为什么呢?所以谢谢您的回答。
$ \ endgroup $
–ZoFreX
2011年7月12日在19:10

#2 楼

几年前,我们的教授Christof Paar教授与DES的一位主要设计师一起吃了午饭。通过DES。在完成项目之前不久,他们发现到盒子的布线有点混杂。更改规范,而该规范很便宜,并且对系统的安全性没有任何影响,或者构建和测试新的硬件设备。

评论


$ \ begingroup $
其余的就是我们所说的历史;)
$ \ endgroup $
–聪明的人
2012年1月19日15:11

$ \ begingroup $
这与托马斯(Thomas)的回答基本相同,但细节较少,历史背景也较多。保存历史总是一件好事:)
$ \ endgroup $
–马腾·博德威斯♦
16年2月13日在11:52

$ \ begingroup $
你是说这个吗? https://youtu.be/kPBJIhpcZgE XD约40:00〜50:00分钟
$ \ endgroup $
–瓦伦
16年8月23日在4:32

#3 楼

我几年前写的描述IP和反向IP的东西。有了FIPS Pub的副本,您可以看到寄存器和位之间的相关性。本质上,数据是串行移入的(对于小于64位的接口,在这种情况下为8位宽),并以并行方式使用。在硬件和8位接口中,IP和反向IP置换(以及置换选择1)正在对8位接口上的位进行重新排序。请注意对端口位顺序(大字节序)和MSB7(小字节序)的引用。

初始置换

初始置换(IP)描述如何将字节宽接口连接到由两个32位组成的64位块块(L和R)。考虑一个字节宽度为1-8的接口。事件编号的比特进入L块,奇数编号的比特进入R块。请注意,位顺序为big endian,其中位1最高,位8最低。输入块通常以8个连续的字节加载方式加载:

Port    MSB7     Input  (LR)                     Left
 Bit    Bit             Block (64 bits)                 Block (32 bits)
  2------6-------58 50 42 34 26 18 10  2                 1  2  3  4  5  6  7  8
  4------4-------60 52 44 36 28 20 12  4                 9 10 11 12 13 14 15 16
  6------2-------62 54 46 38 30 22 14  6                17 18 19 20 21 22 23 24
  8------0-------64 56 48 40 32 24 16  8                25 26 27 28 29 30 31 32



                                                        Right

                                                        Block (32 bits)
  1------7-------57 49 41 33 25 17  9  1                 1  2  3  4  5  6  7  8
  3------5-------59 51 43 35 27 19 11  3                 9 10 11 12 13 14 15 16
  5------3-------61 53 45 37 29 21 13  5                17 18 19 20 21 22 23 24
  7------1-------63 55 47 39 31 23 15  7                25 26 27 28 29 30 31 32


Input Byte        8  7  6  5  4  3  2  1


最终置换

最终置换(IP-1)提供了相反,它将R16L16输出模块的输出标准化为一个字节宽的接口。输出块按从右到左的顺序排序,以允许进行后续解密的互补操作。如果先执行IP,然后执行IP-1,而无需进行任何轮回迭代操作,最后将交换奇数和偶数位:
在DES的实现中,左块和右块分别包含在四个8位寄存器的硬件中。每个8位寄存器都可以串行加载(IP),串行卸载(IP-1)或并行输出和并行加载(舍入)。 DES是一种加密算法,最初要求在硬件中实现,于1977年指定-在16或32位微处理器外设之前。PC1加载C和D 28位寄存器(由三个8位双向移位寄存器和1个4位双向移位寄存器组成,均具有并行输出),执行类似的功能。 C和D寄存器可以串行加载(向右移位),也可以在闭环中向左或向右串行移位以进行加密或解密。

用作C和D的输入。这意味着C(28)输出用作D(25)的串行输入。最低有效位用于奇偶校验。