分組密碼及AES算法初識

對稱密碼算法

常用對稱密碼算法AES、Blowfish、DES、RC5等,DES目前認爲已不安全,當前使用最多的是AES加密算法,因其應用的廣泛,目前主流CPU已經實現了AES-NI(全稱是:Advanced Encryption Standard New Instructions),這是針對AES加密算法的硬件加解密CPU指令集。通過硬件加速,能實現吞吐量成倍的提升。所以這裏重點學習AES加密算法。

這裏還需要列出常見的輕量級分組密碼算法:LET、GOST、TWINE等,這類算法主要應用在對硬件資源要求比較敏感的情況,比如物聯網等。

分組密碼算法

分組密碼算法只能加密固定長度的分組,但是需要加密的明文長度通常會超過分組密碼的分組長度,這時候就需要對分組密碼算法進行迭代,才能把所有的明文進行加密,而迭代的方法就稱爲分組密碼的模式。分組密碼有很多模式,比較常見的有下面五種:

  • ECB模式:Electronic CodeBook mode(電子密碼本模式)
  • CBC模式:Cipher Block Chainiing mode(密碼分組鏈接模式)
  • CFB模式:Cipher FeedBack mode(密文反饋模式)
  • OFB模式:Output FeedBack mode(輸出反饋模式)
  • CTR模式:CounTeR mode (計數器模式)

ECB模式

ECB模式最簡單,可以快速理解分組密碼是怎麼回事,但最不推薦使用。
image
image
可以看到就是將非常長的原文分割成一組組128bit塊,對每塊進行加密,再按順序將加密後的分組密文組裝在一起,形成最終密文。這裏最大的問題是相同的原文片段產生相同的密文,這是很危險的,所以這種模式不推薦使用。

CBC模式

這種模式克服了ECB模式的缺點,加密過程爲將當前分組明文與上一分組密文異或後再塊加密得到當前分組密文,解密過程爲將當前分組密文塊解密後與上一分組密文異火得到當前分組明文。
image
image

CFB模式

CFB模式與CBC模式有點類似,加密過程爲將上一分組密文塊加密後與當前分組明文異或生成當前分組密文,解密過程爲上一分組密文塊加密後與當前分組密文異或後解密爲當前分組明文。

image image

OFB模式

加解密過程直接看下面圖吧
image
image

CTR模式

這個模式推薦使用,該模式的一個非常大的優點是加解密過程皆可以並行,可以使用GPU進行加速。(可以用CUDA編寫AES加速)

通過Nonce隨機數(等同於上面的IV)確定計數器的基數,之後每個分組計數器Counter加1。CTR模式中加解密都是對每個分組的計數器Counter進行塊加密,之後,加密過程爲與該分組明文異或得到該分組的密文,解密過程爲與該分組密文異火得到該分組明文,非常好理解(需要注意的是這裏解密過程中用的是塊加密而不是塊解密)。
image
image

更多可參考Block cipher mode of operation

AES算法測試

爲了加深對AES的理解即相關性能的認識,對AES進行了不嚴格的測試,測試中算法引用的是Rust語言實現的rust-crypto密碼庫,所以,需要注意,這裏測試的絕對值結果僅適用於本庫的情況,相對值能一定程度的代表算法的一般情況。

測試用的環境: Ubuntu16.04LTS 4核8G Intel® Core™ i7-6700 CPU @ 3.40GHz

這裏測試了AES-128、AES-256,經過測試,AES-128的性能是AES-256的30%~40%左右,也較爲符合理論計算,AES密鑰長度每增加64位,算法就增加2輪,128位輪數爲10輪、192位輪數爲12輪、256位輪數爲14輪。

對10M數據進行加密,AES-128耗時500ms左右,AES-256耗時700ms左右。可以估算出這裏AES-128的吞吐量大概爲20M/s,AES-256的吞吐量大概爲15M/s,與其他資料50~60M/s的數據有出入,可能是測試用的環境不同,是否支持AES-NI,引用的算法庫不同等原因造成的。

一般情況下,AES-128的安全強度已經足夠,平衡安全性與性能建議使用AES-128,對安全要求非常高的情況下使用AES-256。

另外測試了硬件加速情況下加解密性能,目前主流CPU已經實現了AES-NI(全稱是:Advanced Encryption Standard New Instructions),這是針對AES加密算法的硬件加解密CPU指令集。

對比AES-NI對比沒有用硬件加速快8 ~ 10倍左右,10M耗時70~100ms左右,使用硬件加深情況下,祕鑰長度對性能影響不明顯。

補充一下,這裏測試使用的是CTR模式,相比其它分組模式,這種模式是應用中較爲推薦的。


參考資料:
Advanced Encryption Standard
Intel® Advanced Encryption Standard Instructions (AES-NI)

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