基于AES加密算法的XML數(shù)據(jù)加密在移動(dòng)終端的研究與應(yīng)用

XML作為一種描述數(shù)據(jù)的標(biāo)記語言,它具有可擴(kuò)展性好、所占存儲(chǔ)空間小等特點(diǎn),大大降低了數(shù)據(jù)管理和交換的成本,作為一種表示和存儲(chǔ)數(shù)據(jù)的標(biāo)準(zhǔn),廣泛應(yīng)用于移動(dòng)數(shù)據(jù)存儲(chǔ)領(lǐng)域,實(shí)現(xiàn)數(shù)據(jù)交換、數(shù)據(jù)共享等。但由于移動(dòng)終端基本是使用通過無線數(shù)據(jù)通信技術(shù),利用開放的無線信道,具有很大的安全隱患。而且移動(dòng)終端設(shè)備通常軟硬件資源有限,不能夠進(jìn)行過于復(fù)雜的加密和解密運(yùn)算,因此需要一種在移動(dòng)終端實(shí)現(xiàn)高可靠性、高效率對(duì)XML數(shù)據(jù)加密和解密的方法是很有必要的。

一、XML加密

XML加密是W3C中的一個(gè)加密標(biāo)準(zhǔn),定義了一個(gè)對(duì)明文加密產(chǎn)生密文以及對(duì)密文解密恢復(fù)明文數(shù)據(jù)的過程。XML數(shù)據(jù)加密有四種不同的加密力度:整個(gè)XML文件的加密、基于XML文件中元素的加密、XML文件元素內(nèi)容的加密和對(duì)加密后的元素或元素內(nèi)容再加密。在W3C規(guī)范中使用EncryptedData元素作為XML加密文件的主要語法組件,EncryptedData元素包含著一些用于描述算法的子元素的列,原始數(shù)據(jù)經(jīng)過加密后嵌入到其子元素<CipherValue>中,密鑰信息存放在EncryptedData元素中。

二、AES加密算法

AES是美國國家標(biāo)準(zhǔn)與技術(shù)研究所(NIST)提出的高級(jí)加密標(biāo)準(zhǔn)。它是一種可變分組長度和密鑰長度的迭代型對(duì)稱密鑰分組密碼,它的分組長度和密鑰長度均可獨(dú)立地指定為128位、192位或256位。AES具有密鑰靈活性及較高的可實(shí)現(xiàn)性,具有較高的安全性能及實(shí)現(xiàn)效率,其密鑰建立時(shí)間極短,且靈敏性良好,對(duì)硬件資源的極低需求使其適合于在移動(dòng)終端等環(huán)境下使用。

AES加密算法將一個(gè)128位的數(shù)據(jù)分組編排為一個(gè)稱作狀態(tài)陣列的4×4字節(jié)的矩陣state[r][c],該狀態(tài)陣列在每一輪次加密時(shí)都進(jìn)行修改。在最后階段,這個(gè)狀態(tài)陣列被返回為128位的線性串,128位密鑰類似地被變?yōu)樽止?jié)矩陣。AES加密經(jīng)過10輪次數(shù)據(jù)循環(huán)處理后,得到加密密文。每一輪次加密處理都經(jīng)過ByteSub(字節(jié)代替)、RowShift(行移位)、MixColumns(列混合)和AddRoundKey(輪密鑰加)四個(gè)階段。

三、AES加密算法的改進(jìn)及c++代碼的實(shí)現(xiàn)

AES加密算法的主要工作是對(duì)State矩陣循環(huán)執(zhí)行Byte Sub(字節(jié)代替)、RowShift(行移位)、MixColumns(列混合)和AddRoundKey(輪密鑰加)四個(gè)階段的操作。由于在AES算法中置換表、逆置換表是之前計(jì)算出的,因此S-盒、逆S-盒、輪常量r[]都是固定不變的,所以本文在字節(jié)代替、行移位階段中對(duì)算法進(jìn)行改進(jìn)。

1、字節(jié)替換

AES加密算法是基于置換和代替的,置換是數(shù)據(jù)的重新排列,而代替是用一個(gè)單元數(shù)據(jù)替換另一個(gè)。字節(jié)替換是一個(gè)代替操作,它將State矩陣中的每個(gè)字節(jié)替換成一個(gè)由S盒所生成的新字節(jié),通過根據(jù)State[]的值查找S盒來實(shí)現(xiàn)。

例如State[a,b]的值是0xij,使用i和j作為索引在Sbox表中查找State[a,b]代替值,即:Sbox[i,j]。

SubBytes()部分代碼片段如下:

//State[a,b]代替值

State[r][c] =Sbox[16*(State[r][c] >> 4)+ ( State[r][c]& 0x0f) ];

2、行移位

ShiftRows是一個(gè)置換操作,它使State矩陣中的第i行被循環(huán)左移i+1個(gè)Byte,即循環(huán)左移i+1個(gè)位置,對(duì)于加密時(shí)的行移位使用以下代碼實(shí)現(xiàn):

ShiftRows()行位移變換代碼片段:

for (r = 1; r < 4; r++) _// shift temp into State

{

for (c = 0; c < 4; c++)

{

State[r][c] = temp[ 4*r+ (c + r) % 4];

// 分組長度和密鑰長度均為128位,Nr為4

}

}

3、列混合運(yùn)算

列混合運(yùn)算是一個(gè)代替操作,它基于字節(jié)的變換,用State字節(jié)列的值進(jìn)行數(shù)學(xué)域加和域乘的結(jié)果代替每個(gè)字節(jié)。

MixColumns()列混合運(yùn)算代碼片段如下:

for(c=0; c< 4; c++)

{

for(r=0; r<4; r++)

{

t[r] = state[r][c];

}

for(r=0; r<4; r++)

{

state[r][c]=FFmul(0x02, t[r])^ FFmul(0x03, t[(r+1)% 4])^ FFmul(0x01, t[(r+2)%4])^ FFmul(0x01, t[(r+3)%4]);

}

}

本文使用VC++2005語言在移動(dòng)終端上實(shí)現(xiàn)一種基于AES算法對(duì)XML文件加密的方案。該方案可以在移動(dòng)終端高效運(yùn)行,占用較少的硬件資源對(duì)XML數(shù)據(jù)文件加密處理。該優(yōu)化方案只是修改了AES算法實(shí)現(xiàn)中的部分代碼,并沒有修改算法的結(jié)構(gòu),所以不會(huì)影響算法的安全性,從而有效保證了XML數(shù)據(jù)的安全性。

小知識(shí)之W3C

中國萬維網(wǎng)聯(lián)盟(W3CHINA)是一個(gè)致力于研究、傳播、討論W3C標(biāo)準(zhǔn)的開放組織,成立于二零零三年六月二十日。它致力于推廣XML及其相關(guān)技術(shù)在中國的普及和應(yīng)用。