XML作为一种描述数据的标记语言,它具有可扩展性好、所占存储空间小等特点,大大降低了数据管理和交换的成本,作为一种表示和存储数据的标准,广泛应用于移动数据存储领域,实现数据交换、数据共享等。但由于移动终端基本是使用通过无线数据通信技术,利用开放的无线信道,具有很大的安全隐患。而且移动终端设备通常软硬件资源有限,不能够进行过于复杂的加密和解密运算,因此需要一种在移动终端实现高可靠性、高效率对XML数据加密和解密的方法是很有必要的。
一、XML加密
XML加密是W3C中的一个加密标准,定义了一个对明文加密产生密文以及对密文解密恢复明文数据的过程。XML数据加密有四种不同的加密力度:整个XML文件的加密、基于XML文件中元素的加密、XML文件元素内容的加密和对加密后的元素或元素内容再加密。在W3C规范中使用EncryptedData元素作为XML加密文件的主要语法组件,EncryptedData元素包含着一些用于描述算法的子元素的列,原始数据经过加密后嵌入到其子元素<CipherValue>中,密钥信息存放在EncryptedData元素中。
二、AES加密算法
AES是美国国家标准与技术研究所(NIST)提出的高级加密标准。它是一种可变分组长度和密钥长度的迭代型对称密钥分组密码,它的分组长度和密钥长度均可独立地指定为128位、192位或256位。AES具有密钥灵活性及较高的可实现性,具有较高的安全性能及实现效率,其密钥建立时间极短,且灵敏性良好,对硬件资源的极低需求使其适合于在移动终端等环境下使用。
AES加密算法将一个128位的数据分组编排为一个称作状态阵列的4×4字节的矩阵state[r][c],该状态阵列在每一轮次加密时都进行修改。在最后阶段,这个状态阵列被返回为128位的线性串,128位密钥类似地被变为字节矩阵。AES加密经过10轮次数据循环处理后,得到加密密文。每一轮次加密处理都经过ByteSub(字节代替)、RowShift(行移位)、MixColumns(列混合)和AddRoundKey(轮密钥加)四个阶段。
三、AES加密算法的改进及c++代码的实现
AES加密算法的主要工作是对State矩阵循环执行Byte Sub(字节代替)、RowShift(行移位)、MixColumns(列混合)和AddRoundKey(轮密钥加)四个阶段的操作。由于在AES算法中置换表、逆置换表是之前计算出的,因此S-盒、逆S-盒、轮常量r[]都是固定不变的,所以本文在字节代替、行移位阶段中对算法进行改进。
1、字节替换
AES加密算法是基于置换和代替的,置换是数据的重新排列,而代替是用一个单元数据替换另一个。字节替换是一个代替操作,它将State矩阵中的每个字节替换成一个由S盒所生成的新字节,通过根据State[]的值查找S盒来实现。
例如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是一个置换操作,它使State矩阵中的第i行被循环左移i+1个Byte,即循环左移i+1个位置,对于加密时的行移位使用以下代码实现:
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、列混合运算
列混合运算是一个代替操作,它基于字节的变换,用State字节列的值进行数学域加和域乘的结果代替每个字节。
MixColumns()列混合运算代码片段如下:
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语言在移动终端上实现一种基于AES算法对XML文件加密的方案。该方案可以在移动终端高效运行,占用较少的硬件资源对XML数据文件加密处理。该优化方案只是修改了AES算法实现中的部分代码,并没有修改算法的结构,所以不会影响算法的安全性,从而有效保证了XML数据的安全性。
小知识之W3C
中国万维网联盟(W3CHINA)是一个致力于研究、传播、讨论W3C标准的开放组织,成立于二零零三年六月二十日。它致力于推广XML及其相关技术在中国的普及和应用。