AES算法在PVR機(jī)頂盒中的應(yīng)用研究
1 引 言
AES算法是由美國國家標(biāo)準(zhǔn)和技術(shù)研究所(NIST)用時3年,歷經(jīng)2輪評估,選出的高級加密算法。AES的所有設(shè)計原則都是公開的,沒有專利權(quán)方面的問題,任何人都可以通過正常渠道得到并使用這種算法。作為新一代的數(shù)據(jù)加密標(biāo)準(zhǔn),AES匯聚了強(qiáng)安全性、高性能、高效率、易用和靈活等優(yōu)點,加密速度快,對內(nèi)存要求低,非常適合應(yīng)用在嵌入式平臺上。本文在分析AES加密算法原理的基礎(chǔ)上,著重說明算法的實現(xiàn)步驟,用C語言完整地實現(xiàn)了AES算法的加/解密操作,并在PVR機(jī)頂盒中實現(xiàn)應(yīng)用。
2 AES加密/解密算法原理簡介
AES算法屬于分組密碼算法,它的輸入分組、輸出分組及加/解密的中間分組長度都是128 b。密鑰長度有3種:128,192和256 b。
AES算法基于置換和代換運算。置換是對數(shù)據(jù)重新進(jìn)行排列,代換是將一個數(shù)據(jù)單元替換為另一個。本文采用的AES-128算法輸入為128位數(shù)據(jù),密鑰長度也是128位。每一輪都需要1個與輸入分組具有相同長度的擴(kuò)展密鑰參與。
AES算法主要由3部分組成:輪變化、圈數(shù)和密鑰擴(kuò)展。本文詳細(xì)介紹AES加/解密算法中各部分的實現(xiàn)步驟;結(jié)合C語言,實現(xiàn)高級加密算法AES在PVR數(shù)字電視機(jī)頂盒中的應(yīng)用。所采用的AES-128算法的加/解密模塊程序流程圖如圖1所示。
2.1 加密變換
AES加密算法的每一輪加密都使用代替和混疊并行地處理整個數(shù)據(jù)分組狀態(tài)。主要是通過對5個子模塊SubBytes,ShiftRows,MixColumns,AddRounke和GetNewEncrypt的循環(huán)調(diào)用實現(xiàn)。
Subbyte變換即s盒置換,是AES算法中是惟一的非線性變換。它對狀態(tài)中的每個字節(jié)用S-box做一個置換。每個字節(jié)的前4位指定s盒的行值,后4位指定了S盒的列值,然后取出S盒中對應(yīng)行和列的元素作為輸出代替該字節(jié)。
ShiftRow完成基于行的循環(huán)移位操作。它將狀態(tài)中的行按照不同的偏移量進(jìn)行循環(huán)移位,一般情況下,第0行不動,第1行循環(huán)左移1個字節(jié),第2行循環(huán)左移2個字節(jié),第3行循環(huán)左移3個字節(jié)。
MixColumn對狀態(tài)列進(jìn)行混淆變換。將ShiftRow的變換結(jié)果看作GF(28)域上的多項式,乘以c(x)=03x3+01x2+01x+02,然后模上不可約多項式x8+x4+x3+x+1。本文根據(jù)GF(28)有限域的運算規(guī)則,將列變換改進(jìn)為簡單的移位和異或操作。設(shè)1個字節(jié)為(b7b6b5b4b3b2b1b0),則:
AddRounkey是將列混合后的結(jié)果與子密鑰進(jìn)行簡單的按字節(jié)異或邏輯運算。
GetNewEncrypt生成下一輪變換所需密鑰,它是按矩陣的列進(jìn)行分組的,產(chǎn)生方法如下:如果第i列不是4的倍數(shù),即(i%4==1),那么i列由如下等式確定:
W(i)=W(i-4)XORW(i-1)。
如果第i列是4的倍數(shù),即(i%4==0),則i列由如下等式確定:
W(i)=W(i-+4)XOR T[W(i-1)]
其中T[W(i-1)]是w(i-1)的一種轉(zhuǎn)換形式,設(shè)W(i-1)=[a,b,c,d]。實現(xiàn)方式如下:
將W(i-1)的元素左移一位,即[b,C,d,a]。將這4個字節(jié)輸入到S盒,得到新的4個字節(jié)[e,f,g,h]。計算新一輪的常量r(i)=2(i-4)/4。生成轉(zhuǎn)換后的列[e XOR r(i),f,g,h]。
第i輪的密鑰生成列W(4i),W(4i+1),W(4i+2),W(4i+3),于是得到第i+1輪的密鑰矩陣。
在計算輪常量時,當(dāng)加密輪數(shù)大于或等于9時,8位不足以表示其值,此時將mod(x8+x4+x3+x+1),值為0x1b,之后的值就是0x1b得倍數(shù)。即r(i)大于等于256時,r(i)的值為0x1b*(turn-8)。
AddRounkey變換將MixColumn變換的結(jié)果和GetNewEncrypt變換的結(jié)果按對應(yīng)字節(jié)異或,所得結(jié)果作為下一輪變換的輸入。
上述的5個步驟完成了一輪AES加密變換,根據(jù)加密輪數(shù)重復(fù)上述過程,直到最后一輪變換。最后一輪變換的不同之處在于沒有進(jìn)行列混疊變換MixCol-umn,AddRounkey變換直接將ShiftRow變換后的結(jié)果和GetNewEncrypt變換的結(jié)果按對應(yīng)字節(jié)異或,結(jié)果作為AES變換的輸出,即得到密文。
評論