到底什麼是3倍DES

還是那句老話,這種專業技術性的問題,什麼Google 百度全都不頂用,還是wikipedia靠譜。

TripleDES,通常被記爲TDES,更標準的寫法是TDEA(Triple Data Encryption Algorithm),3DES的寫法是不標準的,應當避免。

TripleDES是在DES基礎之上發展的,這個算法使用三個密鑰Key1,Key2和Key3對明文依次做三次DES加解密得到密文,解密的過程則恰好反過來。

這三個Key1,Key2和Key3合在一起組成一個密鑰組(key bundle)。

選擇三個密鑰時可以有兩種方式:
1)Key1 != Key2 !=Key3 != Key1,即三個密鑰各不相同,記做 3TDES,或者3TDEA
2)Key1 != Key2, Key3 = Key1,即第一次和第三次DES加密使用相同的密鑰,第二次DES加密使用另外的密鑰,記做2TDES,或者3TDEA。
或者說,TDES根據密鑰的選擇可以分爲3TDES和2TDES。

對明文做處理的時候,可以三次都是DES加密過程,也可以是加密和解密相間。比較常用的是兩種方式:
1)加密-加密-加密 也被記做EEE模式;
2)加密-解密-加密 也被擠作EDE模式。
其中EDE模式的使用更加廣泛。這裏有個地方要指出的是,如果選擇Key1=Key2=Key3,採用EDE模式處理的話,TDES和DES的工作效果相同。

分組和加密強度:
DES/TDES是分組加密的算法,每個分組大小64bit。
DES的加密密鑰是56bit,外加8bit的校驗位。3TDES和2TDES的加密密鑰分別對應是168bit和112bit。
或者說DES/2TDES/3TDES的加密強度分別是56/112/192bit。

但是針對特定攻擊方式,DES/2TDES/3TDES的抗攻擊性不是那麼好。
DES是可以暴力破解的。
2TDES方面,“兩面夾”(meet-in-middle)攻擊對2TDES特別有效。2TDES對 chosen-plaintext 或者 known-plaintext 攻擊的表現能力也受到懷疑,官方認爲2TDES的加密強度實際只有80bit。
3TDES方面, 目前認爲破解3TDES需要232 known plaintexts, 2113 steps, 290 single DES encryptions, and 288 memory,這個現在認爲實際是完不成的。不過因爲破解算法可以並行完成,倘若攻擊者花費billion-dollor級別的預算和數年時間,通過特定明文攻擊是輕而易舉的事情。

DES/TDES和AES
AES是DES/TDES的“法定繼承人”。相比DES/TDES,AES的分組更大,可以使用的密鑰也更長。由於設計的原因,在軟件環境下,TDES的計算速度要比AES的計算慢6倍。
在實際環境中AES正在逐漸取代TDES。不過TDES的設計在硬件環境下更爲容易實現,例如在VPN應用中就還有使用TDES的。儘管如此,在這些硬件環境下,AES也正在慢慢取代TDES。

SP800-67是NIST對TDES的規範。

在規範的附錄B中給出了一個加解密的實例,可以作爲TDES實現的驗證。
密鑰:
Key1 = 0123456789ABCDEF
Key2 = 23456789ABCDEF01
Key3 = 456789ABCDEF0123

明文 明文16進制 密文16進制
“The quic” 5468652071756663 A826FD8CE53B855F
“k brown ” 6B2062726F776E20 CCE21C8112256FE6
“fox jump” 666F78206A756D70 68D5C05DD9B6B900

不過這裏面有個小小的錯誤,"The quic"中的字符“i”對應的asci碼應該是0x69,該規範中把它處理成了0x66,不過後面的的加密過程看起來是OK的。

我在jdk中,使用"TripleDES/ECB/Nopadding"方式通過了驗證。另外還驗證了此時的加密模式是EDE。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章