對稱數據加密技術

對稱數據加密技術是當前應用最廣泛、使用頻率最高的加密技術,對稱加密算法是雙向可逆的,加密密鑰和解密密鑰相同是最大的特點。對稱加密算法由古典加密算法演變而來,大部分加密算法的解密算法是逆運算。

特點

對稱加密算法有20多種,對稱加密算法有如下特點:

  • 加密和解密密鑰是一致的;
  • 安全程度依賴於密鑰長度;
  • 每種算法對密鑰的長度是有一定要求的;
  • 大部分是分組加密算法,所以算法需要指定工作模式、填充類型。

一般對稱加密算法的加密流程

一般對稱加密算法的加密流程大概如下:

  • 1.將要加密的數據進行分組,按照N位爲一組這就是分組過程,也就是分組加密的由來;
  • 2.以組爲單位進行加密處理,這個時候對每塊的加密操作就有了不同的工作模式
    • 不同的工作模式算法效率和產生的密文差別比較大;
  • 3.最後一塊兒不足N位,則需要填充到N位,這就是填充模式
    • 不同的填充模式,影響到數據的安全性;

由上可知,對稱加密算法中,非常重要的幾個概念如下:

  • 密鑰:不是隨意指定的,是需要計算機計算出來的;
  • 算法:選擇哪種算法極大程度的決定了加密安全級別;
  • 工作模式:算法的工作模式決定了算法的效率和算法安全性;
  • 填充模式:使用哪種填充方式,能一定程度上干擾數據的破譯工作;

1.密鑰長度

對稱加密算法的安全程度依賴於密鑰長度,而密鑰長度不是說變就變得,這需要算法能支持。密碼長度越長則加密級別越高,數據內容越安全,JAVA僅僅支持56位長度的DES加密。

2.工作模式

加密算法應用的場景比較複雜,有的強調效率,有的強調安全,有的強調容錯,這就出現了不同的工作模式。根據加密時每個密碼塊兒之間的關聯方式分爲:

  • ECB:電子密碼本,最基本、最易理解的工作模式,每次加密都產生獨立的密碼組,每組的加密結果不影響,相同的組產生的密文相同;
    • 優點:易於理解,簡單一些,沒有誤差傳遞,便於實現並行操作;
    • 缺點:不能因此明文模式,有規律可尋
    • 用途:時候加密碼密碼,隨機數,也就是明文重複小的數據;
  • CBC:密文鏈接模式,目前應用最廣泛的模式,每組之間互相影響,加密前,明文數據與前一組的密文進行異或運算,需要選擇初始化向量;
    • 優點:加密後的密文上下文關聯,不會有重複密文,攻擊性低;
    • 缺點:加密效率低,不利於並行計算,有誤差傳遞問題。
    • 用途:可加密任意長度的數據。
  • CFB:密文反饋模式,比較複雜,也是上下文關聯的,按8位分組將密文和明文進行異或運算;
    • 優點:隱藏了明文模式,可以按字節諸葛進行加解密;
    • 缺點:不利於並行計算,錯誤會擴散,需要初始化向量;
    • 用途:可用於檢測發現密文的篡改。
  • OFB:輸出反饋模式,和CFB類似,不過OFB用前N位密碼進行異或運算;
    • 優點:隱藏明文模式,無誤差傳遞;
    • 缺點:不利於並行計算;比CFB安全性差;
    • 用途:使用與加密冗餘性較大的數據,比如語言、圖像數據。
  • CRT:計數模式,AES中經常使用CRT和CBC模式,上下文無關聯的;
    • 優點:可並行計算,與CBC模式一樣的安全性;
    • 缺點:沒有錯誤傳播,不易確保數據的完整性;
    • 用途:各種加密用途。

一般如果數據重複性不高選擇CBC模式,重複性高選擇CFB或者OFB模式,AES經常用CRT模式。

3.填充模式

DES的分組過程中,最後一塊兒不足56位的時候,需要對最後一塊進行填充,這個時候就用到了填充模式:

  • NoPadding:不填充;
  • PKCS5Padding:常用的填充模式。

應用

廣泛的應用在各種需要數據加密的場景下,如很多Token則採用這種加密手段加密數據內容。只要需要加密的地方可以優先考慮使用對稱加密技術。

算法家族

目前Java中對稱加密算法大約有20多種,比較有代表性的算法有5種:

  • DES:數據加密標準,經典加密算法,由IBM創建提交給美國國家標準局,是對稱加密算法的基礎;
  • DESede:俗稱3DES,又稱Triple DES,是對DES的改良,採用多重迭代的方式加密;
  • AES:DES的替代者,更安全,密鑰設置快,效率高,支持的密鑰長(128、192、256);
  • PBE:基於口令的加密,算是對稱加密的特例,屬於信息摘要算法和對稱加密算法的融合;
  • IDEA:國際數據加密標準,這是脫離了美國政府的限定產生的標準,強加密算法,常用在電子郵件加密中,比如PGP的核心算法。
  • 其他:Blowfish、Twofish、Serpent、IDEA

算法供應商

信息摘要算法很多受美國出口的限制,對稱加密更是如此,尤其是能支持長密鑰加密的對稱加密算法,JDK 6僅支持一些密鑰長度比較短的加密算法,如56位密鑰的DES,112位的3DES,128位的AES。

對於高級的加密算法,可以考慮使用Bouncy Castle的開源Jar包。

算法選擇

目前DES已經不安全了,優先考慮使用AES加密,IDEA要根據自己的場景考慮,不建議一般應用,PBE要看和哪種算法融合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章