我不知道为什么是4个键$ k_1 || k_2 $:$ 1 ^ {112} $,$ 0 ^ {112} $,$ 0 ^ {56} ||| 1 ^ {56} $,$ 1 ^ {56} ||| 0 ^ {56 } $被认为是弱者。 (也没有在网络上找到一些详细的说明。)
#1 楼
您尝试过Wikipedia吗?DES由16个形式的回合组成:
$$ L_ {i + 1} = R_ {i},\ quad R_ {i + 1} = L_i \ oplus F(R_i,K_i),$$
,除了舍入子项$ K_i $以外,其他均相同。 (最后一轮略有不同,因为在所有其他轮之后,半块$ L $和$ R $不会像它们一样被交换,但这并没有密码学上的区别。)
子键$ K_i $是使用DES密钥时间表从加密密钥$ K $导出的,格式为:
$$ K_L \,\ | \,K_R = P_1(K)$$
$$ K_i = P_2(K_L \ lll n_i,K_R \ lll n_i)$$
其中$ K_L $和$ K_R $是置换密钥$ P_1(K )$,函数$ P_1 $和$ P_2 $是固定的映射,基本上只是对周围的位进行混洗,而$ \ lll n_i $表示位旋转了固定数量的位置$ n_i $,其中
$$(n_0,n_1,\ dotsc,n_ {15})=(1、2、4、6、8、10、12、14、15、17、19、21、23、25、27、28) 。$$
这里要注意的重要一点是,如果$ K_L $和$ K_R $都由全零或全一位组成,则旋转它们无效,因此所有子键$ K_i $将相等,这意味着所有16轮DES加密我们这些键将是相同的。由于$ K_L $和$ K_R $每个都有两个选择(全为1或全为零),因此总共给我们提供了四个弱密钥。
尤其是因为DES是一个Feistel密码,因此每个DES循环都是自己的逆运算(除了交换半个块外),所有回合都相同的事实也使整个DES函数自反:也就是说,对于弱密钥,DES加密是与解密相同。
附言DES还具有六对“半弱密钥”,使用一对密钥中的一个进行加密等效于使用另一对进行解密(反之亦然)。基本上,这些是键,$ K_L $和$ K_R $的位模式以2的周期重复,即$$ K_L,K_R \ in \ {000000 {\ dotsc} 00,\,010101 {\ dotsc} 01,\,101010 {\ dotsc} 10,\,111111 {\ dotsc} 11 \} $$(不包括上述四个弱键)。因为位模式在周期2重复,所以这些键的舍入子键$ K_i $只能取两个可能的值,具体取决于旋转常数$ n_i $是奇数还是偶数。
,将这些半弱键中的任何一个的$ K_L $和$ K_R $中的每一个的位反转(或等效地,将它们旋转一位),会产生另一个“互补”半弱键,该键生成相同的两个舍入子键,但转过身来。如果查看上面列出的DES旋转常数,您会注意到$ n_i $是奇数,当且仅当$ n_ {16-i} $是偶数时,因此,舍入子键的这种交换等同于反转键时间表。由于DES解密与密钥时间表相反的加密相同,因此这意味着使用半弱密钥的加密等同于使用其互补对进行的解密。
还有48个“可能弱密钥”。 $ K_L $和$ K_R $的位模式的周期为4,因此仅生成四个不同的圆形子关键字。这些密钥没有像弱密钥和半弱密钥那样明显的加密/解密对称属性,但是它们产生的密钥调度比平时要简单得多,可以想象以某种方式加以利用。
当然,实际上,所有这些类型的弱密钥都是无关紧要的:如果随机选择密钥(或通过好的KDF选择密钥),则选择弱(或半弱或可能是弱)密钥的机会就可以忽略不计($ 1/2 ^ {50} $)。而且,如果您确实怀疑某个系统由于某种原因而使用弱键的可能性高于偶然遇到的可能性,那么一种更有效地利用此知识的方法就是仅测试所有这64个键,并查看是否有他们确实恰好是正确的。更不用说如今的任何(单个)DES密钥都是“弱”的,仅仅是因为56位的密钥空间太小,无法抵抗暴力攻击(尽管将密钥空间加倍的三重DES确实也具有相同的弱密钥)作为单个DES)。
Pps。要表明DES中没有其他类似的弱密钥,则需要进行更详细的分析。特别是,有一个奇怪的现象是DES PC-2函数(上面的$ P_2 $)忽略了旋转子键的某些位(特别是,它仅从56个中选择了48位),因此$ K_i = K_j $即使$(K_L \ lll n_i \,\ | \,K_R \ lll n_i)\ ne(K_L \ lll n_i \,\ | \,K_R \ lll n_i)$。
但是我还没有真正弄清所有细节,我确实希望,即使确实有可能发生子键冲突,对于任何其他键,弱键和半弱键的自反转属性也不应出现,因为它们需要整体子项计划是(反)对称的。
#2 楼
请记住,初始值被分为两半,每一半都独立移动。如果每一半中的所有位均为0或1,则用于该算法的任何周期的密钥对于该算法的所有周期都是相同的。如果密钥全为1,全为0,或者密钥的一半全为1,或者另一半为全0,则会发生这种情况。还请记住, DES密钥计划。
有四个此类弱密钥。
0101 0101 0101 0101
1F1F 1F1F 0E0E 0E0E
E0E0 E0E0 F1F1 F1F1
FEFE FEFE FEFE FEFE
实际键(请注意,每个第8位都将被删除)
0000000 0000000
0000000 FFFFFFF
FFFFFFF 0000000
FFFFFFF FFFFFFF
另一种称为半弱键的键是一种以两个周期重复的键。由于DES生成子项的方式;这些键只生成两个不同的子键,而不是生成16个不同的子键。每个子密钥在算法中使用了八次。
有六对这种类型的密钥。
DES半弱密钥对
01FE 01FE 01FE 01FE and FE01 FE01 FE01 FE01
1FE0 1FE0 0EF1 0EF1 and E01F E01F F10E F10E
01E0 01E0 01F1 01F1 and E001 E001 F101 F101
1FFE 1FFE 0EFE 0EFE and FE1F FE1F FE0E FE0E
011F 011F 010E 010E and 1F01 1F01 0E01 0E01
E0FE E0FE F1FE F1FE and FEE0 FEE0 FEF1 FEF1
第三种按键,在四个周期后重复出现。它们产生四个子密钥,每个子密钥在算法中使用了四次(共16个)。这些被称为弱键。
有48种这种类型的键。
1F 1F 01 01 0E 0E 01 01
E0 01 01 E0 F1 01 01 F1
01 1F 1F 01 01 0E 0E 01
FE 1F 01 E0 FE 0E 01 F1
1F 01 01 1F 0E 01 01 0E
FE 01 1F E0 FE 01 0E F1
01 01 1F 1F 01 01 0E 0E
E0 1F 1F E0 F1 0E 0E F1
E0 E0 01 01 F1 F1 01 01
FE 01 01 FE FE 01 01 FE
FE FE 01 01 FE FE 01 01
E0 1F 01 FE F1 0E 01 FE
FE E0 1F 01 FE F1 0E 01
E0 01 1F FE F1 01 0E FE
E0 FE 1F 01 F1 FE 0E 01
FE 1F 1F FE FE 0E 0E FE
FE E0 01 1F FE F1 01 0E
1F FE 01 E0 0E FE 01 F1
E0 FE 01 1F F1 FE 01 0E
01 FE 1F E0 01 FE 0E F1
E0 E0 1F 1F F1 F1 0E 0E
1F E0 01 FE 0E F1 01 FE
FE FE 1F 1F FE FE 0E 0E
01 E0 1F FE 01 F1 0E FE
FE 1F E0 01 FE 0E F1 01
01 01 E0 E0 01 01 F1 F1
E0 1F FE 01 F1 0E FE 01
1F 1F E0 E0 0E 0E F1 F1
FE 01 E0 1F FE 01 F1 0E
1F 01 FE E0 0E 01 FE F1
E0 01 FE 1F F1 01 FE 0E
01 1F FE E0 01 0E FE F1
01 E0 E0 01 01 F1 F1 01
1F 01 E0 FE 0E 01 F1 FE
1F FE E0 01 0E FE F0 01
01 1F E0 FE 01 0E F1 FE
1F E0 FE 01 0E F1 FE 01
01 01 FE FE 01 01 FE FE
01 FE FE 01 01 FE FE 01
1F 1F FE FE 0E 0E FE FE
1F E0 E0 1F 0E F1 F1 0E
FE FE E0 E0 FE FE F1 F1
01 FE E0 1F 01 FE F1 0E
E0 FE FE E0 F1 FE FE F1
01 E0 FE 1F 01 F1 FE 0E
FE E0 E0 FE FE F1 F1 FE
1F FE FE 1F 0E FE FE 0E
E0 E0 FE FE F1 F1 FE FE
在谴责DES具有弱密钥之前,请考虑与总共72,057,594,037,927,936个可能的密钥相比,这64个密钥列表是微不足道的。
如果您选择随机密钥,则选择其中一个密钥的几率很小这些键可以忽略不计。如果您确实是偏执狂,则可以始终在密钥生成过程中检查弱密钥。
还有另一种类型的密钥,称为补码。
采用密钥的按位补码;也就是说,将所有0替换为1,并将1替换为0。现在,如果原始密钥对一个明文块进行加密,那么该密钥的补码会将明文块的补码加密为密文块的补码。
如果x'是x的补码,则标识如下:
E(K,P)= C
E(K',P')= C'
这不是什么神秘的东西。子密钥在每轮扩展排列后与右半部分进行异或。这种互补性质是该事实的直接结果。
评论
$ \ begingroup $
@@ Ilmari Karonen:谢谢您的明确解释!但是,这并不能证明这是唯一的弱项,不是吗?很好的证明了这四个键是弱键,但是我不明白为什么它们应该是唯一的弱键。谢谢!
$ \ endgroup $
–Basile Bruneau
16年11月9日在12:08
$ \ begingroup $
“尤其是因为DES是一个Feistel密码,因此每个DES轮都是自己的逆(除半块交换之外),”这是否意味着DES(LR)= RL明文分为L和R两半的弱键?
$ \ endgroup $
–gen
17-10-22在10:39