DES

DES(Data Encryption Standard)是一种对称密钥分组加密算法,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS)。

它基于使用56位密钥的对称算法。DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。1999年1月,distributed.net与电子前哨基金会合作,在22小时15分钟内即公开破解了一个DES密钥。

算法

DES是一种分组加密算法:将明文一组一组的通过变换成等长的密文,对DES而言,一组长度为64位。DES密钥表面上是64位的,然而只有其中的56位被实际用于算法,其余8位可以被用于校验,并在算法中被丢弃。因此,DES的有效密钥长度仅为56位。

Feistel结构

  1. 明文数据(64bit)被分成左右两部分(各32bit)。
  2. 将输入的右侧使用轮函数处理。
  3. 处理后得出的数据与左侧做异或得到加密后的左侧

这个过程被称为一轮。一轮结束后交换左右数据,进行下一轮计算。DES会进行16轮计算(最后一轮不交换左右数据)。这种左右交叉处理的结构成为feistel结构。feistel结构也被应用到其它许多加密算法中。

实际上首尾各有一次置换,称为IP与FP(或称`IP^-1`,FP为IP的反函数(即IP“撤销”FP的操作,反之亦然)。IP和FP几乎没有密码学上的重要性,为了在1970年代中期的硬件上简化输入输出数据库的过程而被显式的包括在标准中。更多置换的细节见DES补充材料

F函数

上图显示了F函数的步骤,主要包含4个步骤:

  1. 扩张:将32位的半块扩展到48位(图中的E)。
  2. 与密钥混合:用异或操作将扩张的结果和一个子密钥进行混合。
  3. S-box:在与子密钥混合之后,块被分成8个6位的块。8个S-box(图中S1-S8)的每一个都使用以查找表方式提供的非线性的变换将它的6个输入位变成4个输出位。
  4. 置换:最后,S-box的32个输出位利用固定的置换,“P置换”进行重组。这个设计是为了将每个S-box的4位输出在下一轮的扩张后,使用4个不同的S-box进行处理。

下面具体分析每一步:

扩张

按照固定的方式,将32bit重新排列成48bit。某些位在输出中被用到了不止一次,例如输入的第5位出现在输出的第6和8位。

子密钥

子密钥生成方法被称为密钥调度。首先通过选择置换1(PC-1)从64位输入密钥中选出56位的密钥,剩下的8位要么直接丢弃,要么作为奇偶校验位。然后,56位分成两个28位的半密钥;每个半密钥接下来都被分别处理。在接下来的回次中,两个半密钥都被左移1或2位(由回次数决定),然后通过选择置换2(PC-2)产生48位的子密钥(每个半密钥24位)。

选择置换1(PC-1)

从原密钥中采用固定取法取出56位,如下图左半密钥第一位57代表原密钥第57位。用此方法重新组合了密钥。

选择置换2(PC-2)

左移

S-box

在密码学中,一个S盒(Substitution-box,置换盒)是对称密钥加密算法执行置换计算的基本结构。它们通常用于模糊密钥与密文之间的关系。S盒通常是固定的(例如DES和AES加密算法), 也有一些加密算法的S盒是基于密钥动态生成的。

回到DES算法,DES的其中一个S-box:

给定6比特输入,将外面两个比特(第一个和最后一个比特)作为行条件,中间四个比特(inner four bits)作为列条件进行查表,最终获得4比特输出。例如,输入“011011”,通过外面两个比特“01”和中间的比特“1101”进行查表,最终的输出应该是“1001”。

P置换

P置换将32位的半块数据重新排列。

results matching ""

    No results matching ""