天天看點

openSSL AES 加密引擎代碼分析

SSL VPN 2010-01-29 11:12:31 閱讀459 評論0  字号:大中小 訂閱

        本文以openssl-0.9.8l代碼為基礎,對openSSL中AES加密引擎的代碼做一個分析,這裡側重于應用的角度對代碼進行分析,有關aes加密算法的原理等有很多介紹(例如:http://zh.wikipedia.org/zh-cn/AES),不在本文的讨論範圍之内。

AES的區塊長度固定為128 位元,密鑰長度則可以是128,192或256位元;AES加密過程是在一個4×4的位元組矩陣上運作,這個矩陣又稱為“體(state)”,其初值就是一個明文區塊(矩陣中一個元素大小就是明文區塊中的一個Byte)。加密時,各輪AES加密循環(除最後一輪外)均包含4個步驟:

1. AddRoundKey — 矩陣中的每一個位元組都與該次回合金鑰(round key)做XOR運算;每個子密鑰由密鑰生成方案産生。

2. SubBytes — 透過一個非線性的替換函數,用查找表的方式把每個位元組替換成對應的位元組。

3. ShiftRows — 将矩陣中的每個橫列進行循環式移位。

4. MixColumns — 為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉換來混合每行内的四個位元組。

最後一個加密循環中省略MixColumns步驟,而以另一個AddRoundKey取代。

一般的加密通常都是塊加密,如果要加密超過塊大小的資料,就需要涉及填充和鍊加密模式,對于快加密而言,主要有4種加密處理模式,如:

1. 電子密碼本模式       Electronic Code Book(ECB)

2. 加密塊鍊模式          Cipher Block Chaining(CBC)

3. 加密回報模式          Cipher Feedback Mode(CFB)

4. 輸出回報模式          Output Feedback Mode(OFB)

有關四種處理模式的介紹可以參見如下的兩個文檔:

分組對稱加密模式:ECB/CBC/CFB/OFB http://blog.csdn.net/SearchSun/archive/2008/06/06/2516191.aspx.

對稱塊加密算法加密模式詳解 http://dev.csdn.net/article/16/16674.shtm

檔案說明

aes.h             頭檔案,提供給外部調用和包含,openSSL本身通常以庫的形式供外部調用;

aes_core.c     aes加密引擎的基礎和核心檔案,主要實作基于AES的區塊加解密和密鑰設定;

aes_x86core.c 基于x86架構進行優化的核心檔案;

aes_ecb.c         ECB模式加密的實作,将要加密的資料分成固定位元的大小,然後使用密鑰對每一個位元進行加密,位元之間沒有關聯。

aes_cbc.c         CBC模式加密的實作,将要加密的資料分成固定位元的大小并構成一個位元的序列,将前面一個加密塊輸出的密文與下一個要加密的明文塊進行XOR(異或)操作計算,将計算結果再用密鑰進行加密得到密文。第一明文塊加密的時候,因為前面沒有加密的密文,是以需要一個初始化向量(IV);

aes_cfb.c         CFB模式加密的實作;

aes_ofb.c         OFB模式加密的實作;

aes_ctr.c          CTR模式加密的實作;CTR模式是NIST為對稱分組密碼算法新開發的種操作模式。AES—CTR加密機制對于高速網絡,具有許多引人的特性。首先,AES—CTR使用AES分組密碼加密連續的計數分組(CTRBLK:Counter Block)生成密鑰流。資料在加、解密時,明、密文與密鑰流進行異或運算 AES—CTR易于實

現,可以進行流水線和并行處理。多個獨立的AES加密實作可以用于提高效率。例如,AES-CTR加密處理可以進行雙機并行實作,進而達到雙倍效率的吞吐量。AES—CTR支援密鑰流的預計算。預計算處理能夠減少資料包的延遲性。無論對于加密還是解密,AES CTR僅使用AES的加密操作。這使得AES—CTR相較于AES其它模式實作更為精簡。如果AES—CTR得到正确使用,能夠提供很強的保密性;

aes_ige.c         IGE模式加密的實作;

asm                  彙編目錄下放置着不同架構cpu對aes加密的優化實作。

參考文獻:

1. 分組對稱加密模式:ECB/CBC/CFB/OFBhttp://blog.csdn.net/SearchSun/archive/2008/06/06/2516191.aspx.

2. 對稱塊加密算法加密模式詳解 http://dev.csdn.net/article/16/16674.shtm

3. http://zh.wikipedia.org/zh-cn/AES