无线网络产品因其灵活、便捷、无线等特点,正在被越来越多的人所使用。但是在我们享受无线网络带给我们诸多好处的同时,安全问题也给我们带来了巨大困惑。为局域网/城域网标准委员会先后给无线网络提出了3个标准的加密算法,即WEP、TKIP、CCMP加密算法,用来保护我们的无线网络。由于CCMP加密算法采用了比TKIP更高级的加密标准CCMP加密算法,CCMP被认为是目前无线网络比较安全和可靠的加密算法。在这里我将对这个加密算法给大家简单介绍一下。
在我们分析CCMP的加密解密过程之前,我们先说明一下CCMP核心加密算法AES,因为MIC和文件加密解密都需要使用该算法。
一、AES加密算法
AES加密算法的具体算法说明可以从NIST的FIPS_PUB197_nAd—vanced_encryptionstandard文档得到的。
∥加密Cipher(bytein(4*Nbj,byteout[4*Nb],wordw[Nb*(Nr+lyyfm)]为原文out[]为密文Begin//_____w[]是由密钥扩展的密钥串bytestate[4,Nb]state=mAddRoundKey(srate,w[0,Nb-1D//与第一行密钥串异或forround=lstepltoNrSubBytes(state)//state的S盒置换ShiftRows(state)//接行移位MixColumns(state)//按列变换AddRoundKey(state,w[round*Nb,(round+lyNb-1])//与第round行密钥串异或endforSubBytes(state)
ShiIIRows(state)AddRoundKey(slaLe,w[NPNb,(Nr+l)*Nb-ll)out=sLateend∥解密InvCipher(bytcm[4*Nb],byteout[4*Nb],wordw[Nb*(Nr+I)Dbeginbyteswe[4,Nb]state=inAddRoundKey(state,w[Nr*Nb,(Nr+l)*Nb-lDforround-Nr-1step-ldownt01InvStuftRows(staLe)//按行移位的逆变换InvSubBytes(state)//S盒置换的逆变换AddRourtdKey(state,w[round*Nb,(round+I)*Nb-1])InvMixColumns(sWe),,按列变换的逆变换endforInvShitIRows(staLe)InvSubBytes(state)AddRoundKey(state,w[0,Nb-1])out=stateend
目前广泛使用的是rijndnal编写的AES加密算法,这个可以很轻松的从网上得到。
二、CCMP加密算法
了解了AES的加密和解密过程,接下来我们就开始说明CCMP的加密解密以及MIC的生成过程。CCMP的加密:首先我们从mpdu的MAC_Header提取结构AAD以及Nonce。如图1所示。AAD和Nonce提取办法如下:
然后我们计算出MIC,把它加入到数据域后面。生成8字节的CCMPHeader与MACHeader组成加密帧的验证部分,这部分不需要加密。然后对数据域和MIC进行CTR(counter)模式的AES加密,量后加上FCS校验就生成了加密帧。
1、MIC计算
CCMP的MIC计算是MPDUlevel的,与TKIP的MSDUlevel区射,提供更好的完叠性校验。首先把(Nonce,AAD,P(数据域原文))从左刭右组成一个序列,然后再补上一些D字节,使之成为16字节倍数的序列。然后把它分隔成n个16字节块,用BO,B1,…,Bn表示。接着使用CBC-MAC计算出MIC使用的T(MAC值),按照下列的算法计算:
x:=AES(k1b0)—k.|-AES(x,xBi)fori=l.,.,,nT:=first-M-bytes(X~.)其中AES(K,B)为密钥K的AES加密。T取X序列的低M个字节。M为MIC的长度。
特别的.B0,B1一......Bn序列中.B0是由Nonee组成的MICIV.Bl.B2是由MACHeader也即AAD组成的MICHEADERI,2;B3从开始就是数据域原文分翻成的16字节块。
Adata位当AAD长度大千0时置l,否列为0。后面3bit为NUC长度域,值为(M-2),2。最后为信息的长度域,值为1-1.2为信息长度的范围。一般M=8.L=2,列Flag为Ox59.量终的MIC值还需要将个值与后续CTR加密的so值【前M个字节)异或。表示如下:
MIC=T_flrsL-M-bytes(SO).
2、CTR加密取得7MiC之后,就可以对数据域和MIC进行CTR加密.首先把数据城分钠成16个字节块,量后囊余的字节不用朴零.用Ai表示.MIC部分是单独CTR计算的。
Si=AES(K,CTR_PRELOAD(i));//i从O刭mEi=SiAi;UEi为加密好的16字节块
特别的对于数据域量后一个16字节块,可能不满16个字节,只有x(O 对予MIC部分E(MIC)=S0:MLCCTR_PRELOAD(i)的结构如下:Counter从i=0开始不断自增11个字节的Flag域: 只有最后3个bir的信息长度城。当L-2时,Flag值 为Ox01. 3、CCMP的解密从加密的MPDU中得到CCMPHeader与MACHeader.然后计算出AAD.Nonce.算出每个CTRPRELOAD.从而通过ctrR解密得到数据域原文以及rvnc.使用前一节MIC的计算方法算出当前的MIC.与解密后的rvnc比较,进行校验.在这里我们给出CTR解密的过程。 CTRN解密对加密的数据城进行16字节分割,用EI表示。加密的rvnc.FCS前的8个字节,用E(MIC)表示,单独取出进行CTR解密,数据域的原文16宇节块,用Ai表示。则解密过程如下: si=AES(K,CTI乙PRELOAD(i》;仇从0到mAi=Si7Ei=SiSiAi; 特别的对于加密的数据域最后一个16字节块.可能不满16个字节,只有y(O 对于MJC部分MIC=S0?E(MIC) 通过上面的表述,你基本可以知道CCMP如何操作的。 CCMP的计算还是比较复杂,一方面可能增加了成本,一方面却大大加强了无线网络的安全.目前,它一般会和身份验证服务RADIUS以及密钢管理一起提供一个安全、可靠、可以信赖的无线环境。 小知识之CCMP: CCMP(CounterCBC-MACProtocol)计数器模式密码块链消息完整码协议。 欢迎访问夏冰加密软件技术博客,您的数据安全知识库和加密技术资讯平台。我们致力于提供最新的加密技术动态、深入的行业资讯以及实用的软件使用技巧,帮助您在数字时代中保护好每一比特的数据。