1. 程式人生 > >密碼學_AES-加密演算法 詳解

密碼學_AES-加密演算法 詳解

參考文章:

1.高階加密標準AES的工作模式(ECB、CBC、CFB、OFB)

2.分組對稱加密模式:ECB/CBC/CFB/OFB

3.aes加密解密,含 128、192、256位,cbc、cfb、ecb、ofb、pcbc模式

4.AES模式和填充

5.java加密演算法之AES小記

    最近對接某媒體,其部分內容使用了 AES 對稱加密演算法,我對該演算法做了一些大致的研究,

整理如下:

1.什麼是AES加密演算法

2.AES常見的幾種加密模式與填充模式

3.AES演算法的幾種加密模式介紹

4.AES演算法的幾種加密模式優缺點

5.AES演算法的填充模式介紹

6.AES演算法的Java實現

1.什麼是AES加密演算法
    高階加密標準(Advanced Encryption Standard: AES)是美國國家標準與技術研究院(NIST)在2001年建立了電子資料的加密規範。它是一種分組加密標準,每個加密塊大小為128位,允許的金鑰長度為128、192和256位。

2.AES常見的幾種加密模式與填充模式

    AES支援五種模式:CBC,CFB,ECB,OFB,PCBC

    jce中實現了三種補碼方式:NoPadding,PKCS5Padding,ISO10126Padding;

不支援SSL3Padding,不支援“NONE”模式。

    ECB:是一種基礎的加密方式,密文被分割成分組長度相等的塊(不足補齊),然後單獨一個個加密,一個個輸出組成密文。

    CBC:是一種迴圈模式,前一個分組的密文和當前分組的明文異或操作後再加密,這樣做的目的是增強破解難度。

    CFB/OFB實際上是一種反饋模式,目的也是增強破解的難度。

    ECB和CBC的加密結果是不一樣的,兩者的模式不同,而且CBC會在第一個密碼塊運算時加入一個初始化向量。

下面對模式與填充方式的組合做一個總結:

演算法/模式/填充                 位元組加密後資料長度       不滿16位元組加密後長度  
AES/CBC/NoPadding                   16                          不支援  
AES/CBC/PKCS5Padding                32                          16  
AES/CBC/ISO10126Padding             32                          16  
AES/CFB/NoPadding                   16                          原始資料長度  
AES/CFB/PKCS5Padding                32                          16  
AES/CFB/ISO10126Padding             32                          16  
AES/ECB/NoPadding                   16                          不支援  
AES/ECB/PKCS5Padding                32                          16  
AES/ECB/ISO10126Padding             32                          16  
AES/OFB/NoPadding                   16                          原始資料長度  
AES/OFB/PKCS5Padding                32                          16  
AES/OFB/ISO10126Padding             32                          16  
AES/PCBC/NoPadding                  16                          不支援  
AES/PCBC/PKCS5Padding               32                          16  
AES/PCBC/ISO10126Padding            32                          16

AES演算法的幾種加密模式介紹

ECB模式(電子密碼本模式:Electronic codebook)

    ECB是最簡單的塊密碼加密模式,加密前根據加密塊大小(如AES為128位)分成若干塊,

之後將每塊使用相同的金鑰單獨加密,解密同理。

加密流程:


解密流程:


    ECB模式由於每塊資料的加密是獨立的因此加密和解密都可以平行計算,

ECB模式最大的缺點是相同的明文塊會被加密成相同的密文塊,這種方法在某些環境下不能提供嚴格的資料保密性。


CBC模式(密碼分組連結:Cipher-block chaining)

    CBC模式對於每個待加密的密碼塊在加密前會先與前一個密碼塊的密文異或然後再用加密器加密。

第一個明文塊與一個叫初始化向量的資料塊異或。

對於這個初始化向量,我們一般稱呼其為IV

加密流程:

    

解密流程:


    CBC模式相比ECB有更高的保密性,但由於對每個資料塊的加密依賴與前一個數據塊的加密,

所以加密無法並行。

與ECB一樣在加密前需要對資料進行填充,不是很適合對流資料進行加密。

CFB模式(密文反饋:Cipher feedback)

    與ECB和CBC模式只能夠加密塊資料不同,CFB能夠將塊密文(Block Cipher)轉換為流密文(Stream Cipher)。

加密流程:


解密流程:


注意:CFB、OFB和CTR模式中解密也都是用的加密器而非解密器。

CFB的加密工作分為兩部分:
  1. 將一前段加密得到的密文再加密;
  2. 將第1步加密得到的資料與當前段的明文異或。

    由於加密流程和解密流程中被塊加密器加密的資料是前一段密文,因此即使明文資料的長度不是加密塊大小的整數倍

也是不需要填充的,這保證了資料長度在加密前後是相同的。

    128位的CFB是對前一段資料的密文用塊加密器加密後儲存在IV中,之後用這128位資料與後面到來的128位資料異或,

CFB 的其他擴充套件

     CFB128是每處理128位資料呼叫一次加密器,

    此外還有兩種常用的CFB是CFB8和CFB1,前者每處理8位呼叫一次加密器,後者每處理1位呼叫1次加密器,

就運算量來講CFB1是CFB8的8倍,是CFB128的128倍。對於CFB8和CFB1需要將IV作為移位暫存器。

CFB8的加密流程

  1. 使用加密器加密IV的資料;
  2. 將明文的最高8位與IV的最高8位異或得到8位密文;
  3. 將IV資料左移8位,最低8位用剛剛計算得到的8位密文補上。

重複1到3。

CFB1的加密流程

  1. 使用加密器加密IV的資料;
  2. 將明文的最高1位與IV的最高1位異或得到1位密文;
  3. 將IV資料左移1位,最低1位用剛剛計算得到的1位密文補上。

重複1到3。

OFB模式(輸出反饋:Output feedback)

OFB是先用塊加密器生成金鑰流(Keystream),然後再將金鑰流與明文流異或得到密文流,

    解密是先用塊加密器生成金鑰流,再將金鑰流與密文流異或得到明文,由於異或操作的對稱性,

所以加密和解密的流程是完全一樣的。

加密流程:


解密流程:


OFB與CFB一樣都非常適合對流資料的加密,OFB由於加密和解密都依賴與前一段資料,所以加密和解密都不能並行。

4.AES演算法的幾種加密模式優缺點

ECB模式

優點:

1.簡單; 

2.有利於平行計算; 

3.誤差不會被傳送; 

缺點: 

1.不能隱藏明文的模式; 

2.可能對明文進行主動攻擊; 

================================

CBC模式

優點: 

1.不容易主動攻擊,安全性好於ECB,適合傳輸長度長的報文,是SSL、IPSec的標準。 

缺點:

1.不利於平行計算; 

2.誤差傳遞; 

3.需要初始化向量IV 

===============================

CFB模式

優點:

1.隱藏了明文模式; 

2.分組密碼轉化為流模式; 

3.可以及時加密傳送小於分組的資料; 

缺點: 

1.不利於平行計算; 

2.誤差傳送:一個明文單元損壞影響多個單元; 

3.唯一的IV; 

===================================

OFB模式 

優點:

1.隱藏了明文模式; 

2.分組密碼轉化為流模式; 

3.可以及時加密傳送小於分組的資料; 

缺點: 

1.不利於平行計算; 

2.對明文的主動攻擊是可能的; 

3.誤差傳送:一個明文單元損壞影響多個單元; 

5.AES演算法的填充模式介紹

        這塊我單獨整理了一個模組,請直接參考我另一篇文章。

密碼學_填充演算法-Java支援的幾種填充演算法與其實現原理

6.AES演算法的Java實現

    這部分我單獨寫了一篇文章,有需要的請參考我的另一篇文章。