簡析無線網(wǎng)絡加密算法之CCMP加密算法

無線網(wǎng)絡產品因其靈活、便捷、無線等特點,正在被越來越多的人所使用。但是在我們享受無線網(wǎng)絡帶給我們諸多好處的同時,安全問題也給我們帶來了巨大困惑。為局域網(wǎng)/城域網(wǎng)標準委員會先后給無線網(wǎng)絡提出了3個標準的加密算法,即WEP、TKIP、CCMP加密算法,用來保護我們的無線網(wǎng)絡。由于CCMP加密算法采用了比TKIP更高級的加密標準CCMP加密算法,CCMP被認為是目前無線網(wǎng)絡比較安全和可靠的加密算法。在這里我將對這個加密算法給大家簡單介紹一下。

在我們分析CCMP的加密解密過程之前,我們先說明一下CCMP核心加密算法AES,因為MIC和文件加密解密都需要使用該算法。

一、AES加密算法 

AES加密算法其目的是開發(fā)一種新的能保證政府信息安全的編碼算法。密鑰長度可為128、192、256bit。它的輸出更具有隨機性,對該密文破解需要幾乎整個密碼本及相關的不知道密鑰的密文,加解密的密碼本分開。安全性很高。

AES加密算法的具體算法說明可以從NIST的FIPS _PUB 197 _nAd—vanced _encry ption standard文檔得到的。

∥加密
Cipher(byte in(4*Nbj, byte out[4*Nb], word w[Nb*(Nr+lyyfm)]為原文out[]為密文
Begin// _ _ _ _ _ w[]是由密鑰擴展的密鑰串
byte state[4,Nb]
state=m
AddRoundKey(srate, w[0, Nb-1D//與第一行密鑰串異或
for round=lstepl to Nr?
SubBytes(state)//state的S盒置換
ShiftRows(state)//接行移位
MixColumns(state)//按列變換
AddRoundKey(state, w[round*Nb, (round+ lyNb -1])//與第round行密鑰串異或
end for
SubBytes(state)

ShiIIRows(state)
AddRoundKey(slaLe, w[NPNb, (Nr+l)*Nb-ll)
out= sLate
end
∥解密
InvCipher(bytc m[4*Nb], byte out[4*Nb], wordw[Nb*
(Nr+I)D
begin
byte swe[4,Nb]
state= in
AddRoundKey(state, w[Nr*Nb, (Nr+l)*Nb-lD
for round - Nr-1 step -l downt01
InvStuftRows(staLe)//按行移位的逆變換
InvSubBytes(state)//S盒置換的逆變換
AddRourtd Key(state,w[round*Nb, (round+I)*Nb-1])
InvMixColumns(sWe),,按列變換的逆變換
end for
InvShitIRows(staLe)
InvSubBytes(state)
AddRoundKey(state, w[0, Nb-1])
out= state
end

目前廣泛使用的是rijndnal編寫的AES加密算法,這個可以很輕松的從網(wǎng)上得到。

二、CCMP加密算法

了解了AES的加密和解密過程,接下來我們就開始說明CCMP的加密解密以及MIC的生成過程。CCMP的加密:首先我們從mpdu的MAC _Header提取結構AAD以及Nonce。如圖1所示。AAD和Nonce提取辦法如下:

然后我們計算出MIC,把它加入到數(shù)據(jù)域后面。生成8字節(jié)的CCMP Header與MAC Header組成加密幀的驗證部分,這部分不需要加密。然后對數(shù)據(jù)域和MIC進行CTR( counter)模式的AES加密,量后加上FCS校驗就生成了加密幀。

1、 MIC計算

CCMP的MIC計算是MPDUlevel的,與TKIP的MSDUlevel區(qū)射,提供更好的完疊性校驗。首先把(Nonce,AAD,P(數(shù)據(jù)域原文))從左剄右組成一個序列,然后再補上一些D字節(jié),使之成為16字節(jié)倍數(shù)的序列。然后把它分隔成n個16字節(jié)塊,用BO,B1,…,Bn表示。接著使用CBC-MAC計算出MIC使用的T(MAC值),按照下列的算法計算:

x:= AES(k1 b0)
—k.|- AES(x,x? Bi) fori=l.,.,,n
T:= first-M-bytes( X~.)
其中AES(K,B)為密鑰K的AES加密。T取X序列的低M個字節(jié)。M為MIC的長度。

特別的.B0,B1一......Bn序列中.B0是由Nonee組成的MIC IV.Bl.B2是由MAC Header也即AAD組成的MIC HEADERI,2;B3從開始就是數(shù)據(jù)域原文分翻成的16字節(jié)塊。

Adata位當AAD長度大千0時置l,否列為0。后面3bit為NUC長度域,值為(M-2),2。最后為信息的長度域,值為1-1.2為信息長度的范圍。一般M=8.L=2,列Flag為Ox59.量終的MIC值還需要將個值與后續(xù)CTR加密的so值【前M個字節(jié))異或。表示如下:

MIC=T? _flrsL-M-bytes(SO).

2、CTR加密

取得7 MiC之后,就可以對數(shù)據(jù)域和MIC進行CTR加密.首先把數(shù)據(jù)城分鈉成16個字節(jié)塊,量后囊余的字節(jié)不用樸零.用Ai表示.MIC部分是單獨CTR計算的。

Si= AES(K,CTR_PRELOAD(i)); //i從O剄m Ei=Si? Ai;UEi為加密好的16字節(jié)塊

特別的對于數(shù)據(jù)域量后一個16字節(jié)塊,可能不滿16個字節(jié),只有x(O<x<16)個字節(jié),郝異或時,只要取Si中的前x個字節(jié)。

對予MIC部分
E(MIC)= S0:? MLC
CTR_PRELOAD(i)的結構如下:
Counter從i=0開始不斷自增1
1個字節(jié)的Flag域:

只有最后3個bir的信息長度城。當L-2時,F(xiàn)lag值

為Ox01.

3、CCMP的解密

從加密的MPDU中得到CCMP Header與MACHeader.然后計算出AAD.Nonce.算出每個CTR PRELOAD.從而通過ctrR解密得到數(shù)據(jù)域原文以及rvnc.使用前一節(jié)MIC的計算方法算出當前的MIC.與解密后的rvnc比較,進行校驗.在這里我們給出CTR解密的過程。

CTRN解密

對加密的數(shù)據(jù)城進行16字節(jié)分割,用EI表示。加密的rvnc.FCS前的8個字節(jié),用E(MIC)表示,單獨取出進行CTR解密,數(shù)據(jù)域的原文16宇節(jié)塊,用Ai表示。
則解密過程如下:

si= AES(K,CTI乙PRELOAD(i》;仇從0到m
Ai=Si7 Ei=Si? Si? Ai;

特別的對于加密的數(shù)據(jù)域最后一個16字節(jié)塊.可能不滿16個字節(jié),只有y(O<y<16)個字節(jié),鄢異或時,只要取Si中的前y個字節(jié)。

對于MJC部分
MIC=S0?E(MIC)

通過上面的表述,你基本可以知道CCMP如何操作的。

CCMP的計算還是比較復雜,一方面可能增加了成本,一方面卻大大加強了無線網(wǎng)絡的安全.目前,它一般會和身份驗證服務RADIUS以及密鋼管理一起提供一個安全、可靠、可以信賴的無線環(huán)境。

小知識之CCMP :

CCMP(Counter CBC-MAC Protocol) 計數(shù)器模式密碼塊鏈消息完整碼協(xié)議。