DES算法和DESSede算法統稱DES系列算法,是對稱加密算法領域的經典加密算法。DESSede使用三次迭代,又稱3DES,增加算法安全性。DES算法是衆多對稱加密算法的基礎,很多算法都是基於該算法演變而來。
DES家族發展歷史
- 1973年,美國國家標準計算研究所(NIST)徵求對稱加密算法方案,IBM提交了自己的算法;
- 1977年,IBM的算法(Luciffer算法)被正式採用,成爲數據加密標準:Data Encryption Standard即DES算法;
- DES算法密鑰比較短,只有56位,迭代次數少,很容易受到密碼分析手段的攻擊,因此DES算法半公開,被懷疑是NSA安置的後門,因此被各大密碼學機構強烈質疑;
- 1998年,出現DES算法破譯機,DES算法被攻破,宣告不安全;
- 1999年,NIST版本新標準3DES,也就是DESede(TripleDES),3DES取代DES,DES作爲遺留系統的加密手段被廢棄;
- 目前攻破DES已經很簡單-AES正式替代了DES;
雖然DES被取代了,但是DES的CBC工作模式是基礎性的算法和工作模型,有很強的意義,在遺留系統中也有一些使用的。
大致算法流程
DES的算法是一種分組密碼工作模式,流程比較複雜,大致流程如下:
- 1.將要加密的數據進行分組,56位爲一組;
- 2.以組爲單位進行加密處理,這個時候對每塊的加密操作就有了不同的工作模式;
- 不同的工作模式算法效率和產生的密文差別比較大;
- 3.最後一塊兒不足56位,則需要填充到56位或者不填充,這就是填充模式;
- 不同的填充模式,影響到數據的安全性;
應用場景及算法特點
一般加密性場景,大部分是遺留系統,還有一部分可能是系統沒有支持AES等其他加密手段被迫使用。
JDK 6僅支持56位的密鑰長度(出口限制),密鑰長度越高安全性越高,Bouncy Castle提供了64位密鑰長度的支持。
算法 | 密鑰長度 | 密鑰長度默認值 | 工作模式 | 填充方式 | 實現 |
---|---|---|---|---|---|
DES | 56 | 56 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 | NoPadding、PKCS5Padding、ISO10126Padding | JDK 6實現 |
DES | 64 | 56 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 | PKCS7Padding、ISO10126d2Padding、X932Padding、ISO7816d4Padding、ZeroBytePadding | Boouncy Castle實現 |
DES和3DES的比較
3DES是對DES的一種改良算法,針對DES算法密鑰短,迭代次數少的缺點做了改進。但是3DES算法速度慢,密鑰計算時間長,加密效率不高,實際使用也不多。
DES的3大安全痛點:
- 密鑰短:56位、68位確實不長 ;
- 迭代偏少:16次迭代;
- 半公開性:違反了科克霍夫原則,被懷疑有後門,主要是S盒沒被公佈,因此S盒被懷疑是後門;