Encryption

你能解釋一下 DES 的“弱密鑰”嗎?

  • November 9, 2016

DES 的弱密鑰是密鑰 $ K $ 這樣 $ DES_{k_1}(DES_{k_2}(x))=x $ 對所有人 $ x $ .

我不明白為什麼是 4 個鍵 $ k_1||k_2 $ : $ 1^{112} $ , $ 0^{112} $ , $ 0^{56}||1^{56} $ , $ 1^{56}||0^{56} $ 被認為是弱者。(也沒有在網上找到一些詳細的解釋。)

你試過維基百科嗎?

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 $ 從加密密鑰派生而來 $ K $ 使用DES key schedule,其形式為:

$$ 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 加密將是相同的。由於每個選項都有兩個選擇(全 1 或全零) $ K_L $ 和 $ K_R $ ,這給了我們總共四個弱鍵。

特別是,因為 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) $ .

然而,雖然我實際上並沒有弄清楚所有細節,但我確實希望,即使偶爾的子鍵衝突肯定是可能的,弱和半弱鍵的自逆屬性也不應該出現在任何其他鍵上,因為它們要求整個子密鑰調度是(反)對稱的。

引用自:https://crypto.stackexchange.com/questions/12214