AES CFB/OFB/ECB/CBC/CTR優缺點
摘自:http://www.metsky.com/archives/418.html
AES常見加密模式有CFB/OFB/ECB/CBC/CTR,本文概述這些算法特點,讓大家更快的了解AES,當然天緣也不是專業做算法的,工作中也只是使用到才會學習一點,如有錯誤,歡迎指出。
一、Cipher feedback(CFB)
CFB算法優點:
同明文不同密文,分組密鑰轉換為流密碼。
CFB算法缺點:
串行運算不利並行,傳輸錯誤可能導致后續傳輸塊錯誤。
二、Output feedback(OFB)
OFB算法優點:
同明文不同密文,分組密鑰轉換為流密碼。
OFB算法缺點:
串行運算不利並行,傳輸錯誤可能導致后續傳輸塊錯誤。
三、Electronic codebook(ECB)
ECB算法優點:
簡單、孤立,每個塊單獨運算。適合並行運算。傳輸錯誤一般只影響當前塊。
ECB算法缺點:
同明文輸出同密文,可能導致明文攻擊。我們平時用的AES加密很多都是ECB模式的,此模式加密不需要向量IV。
四、Cipher-block chaining(CBC)
CBC算法優點:
串行化運算,相同明文不同密文
CBC算法缺點:
需要初始向量,不過這其實不算缺點,下文的CTR也是需要隨機數的。如果出現傳輸錯誤,那么后續結果解密后可能全部錯誤。
此外,還有Propagating cipher-block chaining(PCBC)加密模式,
五、Counter mode(CTR)
CTR算法優點:
無填充,同明文不同密文,每個塊單獨運算,適合並行運算。
CTR算法缺點:
可能導致明文攻擊。
補充:
關於Padding補位問題,上文加密模式中,比如CBC等對輸入塊是有要求的,必須是塊的整數倍,對不是整塊的數據,要求進行填充,填充的方法有很多種,常見的有PKCS5和PKCS7、ISO10126等。
例如按照16字節分組的話:
- 對不足16字節部分(假設差n個滿16字節),填充n個字節(n范圍(1,15]),且每字節值均為n。
- 對正好16字節部分,則填充一個block,也就是補16個字節,每字節值為16
參考1:PKCS #7: Cryptographic Message Syntax
參考2:PKCS #5: Password-Based Cryptography Specification
所以上述算法中,默認:
需要Padding的有:CBC(,PCBC也需要,本文未涉及該加密模式)、ECB。
不需要Padding的有:CFB、OFB、CTR。
參考資料:
http://hi.baidu.com/doomsword/blog/item/ec73eb2b18f95435d52af120.html