Encryption
查找修改後的 DES 加密的密鑰
這是我今天考試時遇到的一個問題,如果有人能幫助我找到答案,我會很高興。
一個學生建立了一種加密算法(介於 DES 和 3DES 之間),其中加密基於 2 個密鑰, $ K_1 $ 和 $ K_2 $ ,並以這種方式計算:
$$ Cipher = E_{K_1} (E_{K_2} (plaintext)) $$ 在哪裡 $ E_{K_i} $ 是使用密鑰加密 $ K_i $ .
攻擊者知道:
- 單個明文。
- 該明文的密文。
- 加密算法。
- 每個密鑰都是 56 位的。
他怎麼能找到這2把鑰匙?
當然還有蠻力解決方案,查看所有可能的密鑰對,直到找到正確的一對。
我的問題是:我們能否找到另一種比蠻力更好的方法來找到密鑰?
您可以通過額外的 $ \mathcal{0}(2^{56}) $ 記憶和與 $ \mathcal{0}(2^{56}) $ 時間。
你可以注意到關係 $ c \leftarrow E_{k_1}(E_{k_2}(m)) $ 可以改寫為 $ D_{k_1}(c) = E_{k_2}(m) $ (只需在兩側應用解密功能。
第一步在於生成每一對 $ (k_2, E_{k_2}(m)) $ 並將它們儲存在表中(最好是用於快速查找的雜湊表)。
有一張包含所有對的桌子 $ k_2, E_{k_2}(m) $ 您現在可以嘗試所有值 $ k_1 = 0,2^{56} $ 並應用解密功能 $ D_{k_1} $ 在最初收到的密文上。如果值 $ D_{k_1}(c) $ 存在於您的預先計算的表中,然後您找到了另一個鍵 $ k_2 $ 用於加密原始明文。
這種方法也稱為中間相遇攻擊。