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。
到底什麼是 O R Mapper
一次和乙個群裡面的朋友聊天,有人說最近發現了新的設計資料庫方法,就是把資料庫的列和物件屬性一一對應,這樣設計很方便。我說寒,那有這麼容易的,實際情況複雜去了,怎麼能一一對應。原文 http dot junkies.weblog seichert posts 4677.aspx 讓我們從o r開始。字...
到底什麼是webservice
傳統上,我們把計算機後台程式 daemon 提供的功能,稱為 服務 service 比如,讓乙個防毒軟體在後台執行,它會自動監控系統,那麼這種自動監控就是乙個 服務 通俗地說,服務 就是計算機可以提供的某一種功能。舉例來說,我現在有一批,需要把它們的大小縮小一半。那麼,我們可以把 縮放 看成是一種服...
到底什麼是介面
設計模式中有很多地方用到了介面,敲機房的時候也用到了介面,介面到底是幹什麼的呢,為什麼要使用介面?我們真的清楚嗎?今天開會,說到七層,提到介面,問了這樣乙個問題,為什麼要用介面呢?我說介面是用來實現的,介面中沒有具體的方法體,介面為了讓d層實現,同時新增抽象工廠的時候也需要介面,但是到底什麼是介面,...