尤紫云,劉曉東
(1.武漢郵電科學(xué)研究院,湖北武漢 430070;2.武漢虹旭信息技術(shù)有限責(zé)任公司,湖北 武漢 430070)
由于網(wǎng)絡(luò)的廣泛應(yīng)用,信息安全[1]已成為保障網(wǎng)絡(luò)環(huán)境的關(guān)鍵因素。在網(wǎng)絡(luò)上有效地安全傳輸數(shù)據(jù)信息,保證信息的真實性、完整性和不可抵賴性是數(shù)據(jù)加密技術(shù)[2]的重中之重。
在對稱加密算法中,如AES 算法,具有速度快、加密強(qiáng)度高、便于實現(xiàn)的優(yōu)點,但是依然存在局限性,此算法的密鑰分配與管理[3]比較困難。而非對稱加密算法的密鑰分發(fā)與管理簡單并且有更高的加密強(qiáng)度,但是運算速度較慢。因此,將對稱加密算法和非對稱加密算法相結(jié)合,彌補(bǔ)各自算法的局限。因此文中提出基于AES 算法和ECC 算法的混合加密方案[4],采用AES 算法對明文加密,而ECC 算法加密管理密鑰實現(xiàn)數(shù)字簽名。該方案能有效地提高信息傳輸?shù)陌踩院托?,使網(wǎng)絡(luò)傳輸變得更加安全可靠。
AES(Advanced Encryption Standard)可稱為高級數(shù)據(jù)加密標(biāo)準(zhǔn),屬于對稱加密算法[5],它也是一種基于分組迭代的加密算法。AES 算法的密鑰長度可獨立指定為128 bits,192 bits 或256 bits,在AES 數(shù)據(jù)加密標(biāo)準(zhǔn)中規(guī)范了明文分組長度為128 bits。
在AES 算法中數(shù)據(jù)塊要經(jīng)過多次數(shù)據(jù)變換,每一次變換產(chǎn)生一個中間結(jié)果,這個中間結(jié)果為狀態(tài)。此狀態(tài)可以用二維字節(jié)數(shù)組來表示,也就是一個狀態(tài)矩陣,該矩陣的行數(shù)為4,列數(shù)Nb=分組長度/32。種子密鑰也可以類似地用一個狀態(tài)矩陣表示,同樣以字節(jié)為元素,行數(shù)為4,列數(shù)Nk=密鑰長度/32。Nb和Nk共同決定了算法的迭代輪數(shù)Nr,由于在AES 算法中分組長度固定128 bits,因此迭代的輪數(shù)可以由密鑰長度推得。
AES 算法的輪函數(shù)采用的是SP(替代、置換)結(jié)構(gòu),每一輪由3 個層組成,每個層都是可逆并均勻變換的。1)非線性層:并行使用最優(yōu)的S 盒,起到混淆作用,防止攻擊者分析出密鑰;2)線性混合層:通過行移變換和列混淆變換,以保證經(jīng)過多輪變換之后能達(dá)到高度擴(kuò)散,以防止統(tǒng)計分析的攻擊;3)密鑰加層:通過進(jìn)行輪密鑰加變換,將圈密鑰異或到中間狀態(tài)上,從而實現(xiàn)密鑰的加密控制作用。
AES 加密算法中的輪變換[6]由4 個部分組成,分別是字節(jié)代換(ByteSub)、行移變換(ShiftRow)、列混淆變換(MixColumn)、輪密鑰加(AddRoundKey)。
每一輪都依次進(jìn)行字節(jié)代換(S 盒變換)、行移變換、列混淆變換和輪密鑰加。值得注意的是,加密算法的最后一輪沒有列混淆變換。其中輪變換總體框架如圖1 所示。
圖1 AES輪變換框架圖
1)字節(jié)代換
字節(jié)代換是將每個字節(jié)進(jìn)行S 盒轉(zhuǎn)換,達(dá)到非線性變換。它通過S 盒獨立地對狀態(tài)的每個字節(jié)進(jìn)行變換,使字節(jié)高度混淆,步驟如下:1)將字節(jié)作為GF(28)上的元素映射到自己的逆元,實現(xiàn)有限域上的乘法逆;2)將每個字節(jié)作GF(2)上的仿射變換[7],即:y=Ax-1+B如式(1)所示,其中A是一個GF(2)上8×8的可逆矩陣,B是GF(2)上一個8 位列向量。
2)行移變換
行移變換是一種線性變換,它與列混淆變換結(jié)合使加密數(shù)據(jù)達(dá)到充分的混淆,它將狀態(tài)矩陣中的各行循環(huán)移位若干位,移位量根據(jù)行數(shù)不同而改變。第0 行不需要移動,第1、2、3 行分別循環(huán)左移C1、C2、C3個字節(jié)。逆行移位變換是行移位變換的逆變換,它對狀態(tài)的每一行進(jìn)行循環(huán)右移。表1 為左移量與分組大小Nb的關(guān)系。
表1 左移量與分組大小Nb的關(guān)系
3)列混淆變換
列混淆變換為對狀態(tài)矩陣中列的線性變換。將狀態(tài)矩陣每列的4 個字節(jié)表示為GF(28)上多項式,再將該多項式與固定的多項式c(x)進(jìn)行模x4+1 乘法,其中要求c(x)模x4+1 可逆。定義如下:
令b(x)=c(x)?a(x)mod(x4+1),列混淆變換過程如圖2 所示。
圖2 列混淆變化示意圖
4)輪密鑰加
輪密鑰加運算就是每輪的狀態(tài)與對應(yīng)的128 bits輪密鑰進(jìn)行逐比特異或。
在AES 算法中實現(xiàn)數(shù)據(jù)的非線性置換[8]S 盒起到重要的作用,S 盒的設(shè)計有嚴(yán)格的數(shù)學(xué)計算,整個密碼算法的安全性直接依賴于S 盒的安全性。
AES 算法S 盒的循環(huán)迭代周期比較短,遍歷性有待提高,它的擴(kuò)散性和表達(dá)式的復(fù)雜度并不能保證AES 算法在代數(shù)計算攻擊中的安全性?,F(xiàn)針對于上述S 盒性能的不足,將S 盒算法進(jìn)行優(yōu)化。
1)在有限域中對輸入的字節(jié)元素求逆元。若兩個元素相乘滿足a(x)?b(x)modm(x)=1,就稱b(x) 是a(x)的逆元,其中m(x)=x8+1 不變;
即取了一組新的仿射變換對(155,62);
3)運用新的仿射變換對,將字節(jié)作GF(2)上的仿射變換[9];
4)做乘法逆運算。
運用了新的仿射變換對使S 盒的循環(huán)迭代周期為256,GF(28)中所有元素只屬于一個迭代循環(huán)。并將乘法逆運算和仿射變換的順序交換,使得表達(dá)式長度增加到255 項,增加了代數(shù)計算復(fù)雜度,從而提高了算法的安全性。該文對原S 盒與提出的新S 盒的各項性能進(jìn)行了比較,結(jié)果如表2 所示。
表2 兩種S盒的對比分析指標(biāo)
KOBLITZ 和MILLER 在1985年提出ECC(Elliptic Curve Crypto-system),稱為橢圓曲線密碼體制。與其他的公鑰密碼[10]如RSA[11]相比,在相同密鑰長度下,橢圓曲線密碼安全性更高,同時橢圓曲線密碼更節(jié)約存儲空間和算力。這主要得益于在橢圓曲線上離散對數(shù)問題[12]比有限域上的離散對數(shù)問題更難解。像一般的非對稱加密算法原理那樣,橢圓曲線密碼也是基于“從a推導(dǎo)出b很難,從b推導(dǎo)出a容易”這樣的模式實現(xiàn)了非對稱加密。
橢圓曲線通常是指Weierstrass 方程所確定的曲線,它是由方程y2+axy+by=x3+cx2+dy+e的全體解再加上一個無窮遠(yuǎn)點O構(gòu)成的集合。
在有限域GF(p)上,可以將上述曲線方程轉(zhuǎn)化為y3≡x3+ax+b(modp),常記為Ep(a,b),簡記為E。其中a,b,x和y均在有限域GF(p)上取值,p是素數(shù),且滿足4a3+27b2(modp)≠0。該橢圓曲線只有有限個點數(shù)n,表示為橢圓曲線的階[13],其中n越大安全性越高。
當(dāng)4a3+27b2(modp)≠0 時,稱Ep(a,b)是一條非奇異橢圓曲線[14]。對于非奇異橢圓曲線上點得集合Ep(a,b)定義的加法規(guī)則構(gòu)成一個群稱為Abel 群[15]。規(guī)則如下:
1)單位元。O為加法的單位元,對于橢圓曲線上的任何一點P,有P+O=O+P=P。
2)逆元。對于橢圓曲線上的一點P=(x,y),它的逆元為-P=(x,-y),注意到P+(-P)=P-P=O。
3)點加。設(shè)P和Q是橢圓曲線上x坐標(biāo)不同的兩點,P+Q的定義如下:過點P和Q作直線l,直線l與橢圓曲線相交于唯一的點R,然后過R點作y軸的平行線l′,l′與橢圓曲線相交的另一點S就是P+Q,如圖3 所示。
圖3 橢圓曲線上點的加法的幾何解釋
4)倍點。為計算點Q的兩倍,在Q點作一條切線并找到與橢圓曲線的另一個交點T,則Q+Q=2Q=-T。
1)由橢圓曲線參數(shù)p,a,b來確定一條橢圓曲線,記為Ep(a,b);
2)在Ep(a,b)上選取基點G(x,y),且滿足nG=0,其中n為G的階(n為一個大素數(shù));
3)選取一個整數(shù)Ks∈[1,n-1],通過計算Kp=Ks G,可以得到密鑰對(Ks,Kp),其中Ks、Kp分別是私鑰和公鑰。
明文使用AES 加密算法對其進(jìn)行加密。AES 密鑰加密采用ECC 加密算法對其加密生成密鑰密文。其過程如下:
1)發(fā)送者選取一個隨機(jī)整數(shù)r(r 2)將密鑰明文用編碼函數(shù)嵌入橢圓曲線Ep(a,b)上一點M=(mx,my); 3)計算C1=rG,C2=M+rKp; 4)向接收者發(fā)送(C1,C2)。 AES 密鑰的解密過程如下; 1)接收者收到(C1,C2); 2)計算C2-KsC1=M+rKp-KsrG=M+rKsG-KsrG=M,可以得到點M; 3)再對M進(jìn)行解碼,得到AES 密鑰。再結(jié)合AES 解密算法得到相應(yīng)的明文。 1)數(shù)字簽名的生成 假設(shè)發(fā)送者向接收者發(fā)送消息M并進(jìn)行簽名,發(fā)送者需執(zhí)行以下步驟: ①任取一個整數(shù)k∈[1,n-1]; ②根據(jù)kG=(x1,y1),計算r=x1modn,若r=0,則回到步驟①; ③根據(jù)t=k-1modn,計算t的值; ④用Hash 函數(shù)SHA-1 計算Hash 值e=SHA(M); ⑤計算s=k-1(e+Ksr)modn,若s=0,則回到步驟①; ⑥發(fā)送消息M和它的簽名(r,s)。 2)數(shù)字簽名的驗證 接收者接收到消息M和簽名(r,s)后,接收者需執(zhí)行以下步驟進(jìn)行驗證: ①驗證r和s,需滿足r、s∈[1,n-1]; ②計算e=SHA(M); ③計算w=s-1modn; ④計算u1=ewmodn和u2=rwmodn; ⑤計算U=u1G+u2Kp=(x2,y2); ⑥若U=0,則拒絕簽名;若U≠0,計算v=x2modn; ⑦若v=r,則接收簽名;若v≠r,則拒絕簽名。 發(fā)送方: ①明文消息通過AES 加密算法的輪變換等進(jìn)行加密,從而得到密文; ②再通過利用ECC 加密算法對AES 的密鑰進(jìn)行加密,從而得到AES 的密鑰塊; ③用發(fā)送者私鑰在明文中提取消息摘要生成簽名塊; ④最后將密文、AES密鑰和簽名塊傳送給接收方。 數(shù)據(jù)加密具體流程圖如圖4 所示。 圖4 數(shù)據(jù)加密流程 接收方: ①首先將AES 的密鑰塊通過ECC 解密算法進(jìn)行解密,可以得到AES 密鑰; ②然后將密文通過AES 密鑰進(jìn)行解密,從而得到明文消息,再進(jìn)行SHA-1 算法[16]獲得其信息摘要; ③用發(fā)送者公鑰解密簽名塊生成摘要結(jié)果; ④比較兩個摘要結(jié)果,若相等,則簽名成功。 數(shù)據(jù)解密具體流程圖如圖5 所示。 圖5 數(shù)據(jù)解密流程 由于互聯(lián)網(wǎng)越來越被大眾接受和使用,人們對信息安全保護(hù)的需求越來越迫切,該文提出一種基于AES 和ECC 的混合密碼技術(shù),具備了兩種算法的優(yōu)點:儲存空間小、運算速度快、密鑰管理方便等。從而可以高效地實現(xiàn)了互聯(lián)網(wǎng)中的信息加密、數(shù)字簽名和身份認(rèn)證,解決了密碼體制中速度和安全性不能兼顧的問題。同時重新設(shè)計了AES 算法中的S盒,改進(jìn)的S 盒的循環(huán)迭代周期擴(kuò)大到256,提高了遍歷性,表達(dá)式長度增加到255 項,增加了代數(shù)計算復(fù)雜度,從而提高了算法的安全性。4.3 解密過程
4.4 數(shù)字簽名的生成和驗證
4.5 混合算法流程圖
5 結(jié)束語