背景:單重DES在窮舉攻擊下相對比較脆弱
理論依據:以雙重DES為例
加密:C = E(K2,E(K1,P)) 解密:P = D(K1,D(K2,C))
要證明多重加密有效,就要證明不存在K3,使得 E(K2,E(K1,P)) = E(K3,P)
DES加密是64位分組之間的映射,64位分組存在264個可能的明文分組,這264個分組有(264)! = 10347380000000000000000個可能的一一映射關系。
而DES每個密鑰定義了一個映射,映射總數位256 < 1017。因而完全有理由認為雙重DES所對應的映射不能為單映射所定義。
中間相遇攻擊:一種對所有分組密碼均有效的攻擊方法
以雙重DES位例,C = E(K2,E(K1,P)) 。首先設定一個中間值X,有
X = E(K1,P) = D(K2,C)
給定明密文對(P,C),首先,將P按所有可能的密鑰K1加密,得到的256個結果按X的值排序放在一個表內,然后將C用所有可能的密鑰K2解密,每解密一次,將解密結果與表中的值比較,如果由相等的,就將剛才測試的兩個密鑰對一個新的明密文對進行驗證,若驗證成功,則認定這兩個密鑰對是正確的密鑰。
結論:中間相遇攻擊使用兩組已知明密文對就可以猜出正確的密鑰,其時間復雜度是256,比單重DES所需的255次方多不了多少。
三重DES
使用三個不同的密鑰進行三次加密的三重DES將使中間相遇攻擊的代價升至2112數量級。但是其缺陷是需要56×3 = 168位密鑰,這有些笨拙。
改進的辦法是使用兩個密鑰進行三次加密,犧牲一定的安全性來換取更加輕便的密鑰。
這種加密具體的運算過程是加密-解密-加密(EDE),寫成式子如下
C = E(K1,D(k2,E(K1,P))) P = D(K1,E(k2,D(K1,C)))
第二步采用解密運算並沒有什么密碼學上的深意,僅是為了使三重DES與單DES兼容,因為
C = E(K1,D(k1,E(K1,P))) = E(K1,P) P = D(K1,E(k1,D(K1,C))) = D(K1,C)
不過由於使用雙密鑰的三重DES算法的人還是感覺不放心,因此很多人還是覺得采用三個密鑰的三重DES算法才是最好的方案,三個密鑰的定義如下
C = E(K3,D(k2,E(K1,P))) P = D(K1,E(k2,D(K3,C)))