搜索
您的当前位置:首页正文

高级加密标准(AES)算法及安全性探析

来源:尚佳旅游分享网
豳雹蛋蚕潼匿 冒201 1年第1 O卷第1 0期 高级加密标准(AES)算法及安全性探析 口宣克祥 【摘要】高级加密标准(Advanced Encryption Standard,AES)自成为美国联邦政府有效加密标准以来,已经在全世界得到越来越 广泛的应用。AES算法是分组对称式私钥密码机制,本文对AES算法的具体实现过程及安全性进行深入探讨和分析。 【关键词]XES算法;加密标准;信息安全 【作者单位】宣克祥,解放军国际关系学院 随着科技进步,数据加密标准(DES)的安全性受到严重 挑战。为了提高安全强度,美国国家标准与技术研究院(Na- tional Istitute of Stndaards and Technology,MsT)于1998年开始 了新加密标准的征集工作。在提交的15个候选算法中,经严 格分析和测试,2000年10月2日,美国政府正式宣布选中比 利时密码学家Joan Daemen和Vincent Rijmen提出的一种密码 算法mJNDAEL作为新的加密标准,即高级加密标准(Ad. vanced Encryption Stndarad,AES),并于2002年5月26日将其 颁布为有效加密标准。 一unsined gchar state[4][4]; int i,r,c; //第一阶段 for(r=O;r<4;r++) { for(C=0;C<4;c++) { state[r][c]=input[r+4 C]; } } 、AES算法加密过程 AES是旨在取代DES的21世纪加密标准。根据NIsT颁 布的官方文件,AES算法是一种区块对称密钥加密机制,它由 加密(解密)算法和密钥扩展算法两部分组成。加密算法将明 //第二阶段 AddRoundKey(state,w[0]); orf(i=1;i<=10;i++) 文与子密钥进行若干轮迭代,密钥扩展算法将用户主密钥扩 展成若干个子密钥,扩散的密钥与块数据运算后形成密文,以 抵御攻击。AES算法块分组长度为128位,密钥长度可为 128、192、256位,扩充后的密钥组数分别为l1、13、15组,轮循 环次数分别为11、13、l5轮,每轮循环均使用4组密钥,每组密 钥长度均为32位(4字节)。AES加密轮循环:初始轮(Initial Round),转换轮(Transformation Ronds,u除去初始轮和最终轮 { SubBytes(state); ShiftRows(state); if(i!=10)MixCohmm(state); AddRoundKey(state,W[i]); } //第三阶段 外,转换轮数分别为9、l1、13轮,每轮包括SubBytes、 R0ws、 MixColumns、AddRoundKey),最终轮(Final Round,没有MixCol- ulnns)。下表列出了块大小、密钥长度、密钥组数与轮循环次 数的关系: ofr(r=O;r<4;r++) { for(C=0;C<4;c++) { 块大小 密钥长度 扩充后密钥 轮循环次数 组数 input[r+4 C]=state[r][c]; } } return input; 128位(16字节) 128位(16字节) l1组 l1(1+9+1) 128位(16字节) 192位(24字节) 13组 13(1+11+1) } 从上述代码可以看出,AES加密采取了区块(分组)方式, 区块大小为l6字节,区块数据存放在二维数组(阵列)state [4][4]中,加密操作全部都是对state[4][4]中的数据进行操 作,操作过程可以分为以下三个阶段: 第一阶段:明文数据准备阶段。在这一阶段,代码state 128位(16字节) 256位(32字节) 15组 15(1+13+1) 现以16字节(128位)长度的密钥为例,AES加密操作具体实 现代码如下: unsigned char}Cipher(unsined gchar input) { [r][C]=input[r+4}C]将明文数据各字节input[4]按照下 表的方式拷贝到state[4][4]二维数组中: ・60・ Industrial&Science Tribune臣皿衄 豳雹量 潼匿圈201 1年第1 0卷第1 O期 { O 4 8 12 0,0 0,1 0,2 0,3 int r,c; 1 5 9 13 1,0 1,1 1,2 1,3 for(e =0;c<4;e++) I 2 6 10 14 2,0 2,1 2,2 2,3 for(r =O;r<4;r++) 3 7 1l 15 3,0 3,1 3,2 3,3 state[ r][c] =k[r][c]; Input[16] State[4][4] 例如,假设input[16]={32,43,f6,a8,88,5a,3O,8d,3l, 31,98,a2,eo,37,0r7,34}, 则拷贝以后,state[4][4]={32,88,31,e0,43,5a,31,37, 即将经第一阶段排序后的明文数据state[,*][4]与第1组 ,30,98,o7,a8,8d,日2,34}。 密钥进行异或运算,假如第1组密钥k[0][4][4]={2b,28, 第二阶段:加密轮循环阶段。包括初始轮、转换轮和最终 ab,09,7e,ae,1'7,cf,15,d2,15,4f,16,a6,88,3c},那么运算结果 轮。初始轮具体操作由代码AddRoundKey(state,w[0])实现: 如下: void AddRoundKey(unsi char state[][4],unsigned char k[][4]) 32 88 31 e0 2b 28 ab 09 19 aO 9a e9 43 5a 31 37 7e ae f7 cf 3d f4 6'6 f8 state[4][4]= ^ 珩 30 98 07 15 d2 15 4f e3 e2 8d 48 a8 8d a2 34 16 a6 88 3e be 2b 2a 08 转换轮共有9轮循环,每轮包括SubBytes(state)、 O ,0】【83,0x2e,Oxla,0xlb,0x6e,OxSa,OxaO,Ox52,Ox3b, ShiftRows(state)、MixCohmns(state)和AddRoundKey(state,w Oxd6,Oxb3,0x29,Oxe3,0x2f,0x84,/¥4¥/ [i])。字节替换操作SubBytes(state)具体代码为: 0x53,Oxdl,0x0o,Oxed,0】(20,0xfe,Oxbl,0xSb,0x6a,0xcb, void SubBytes(unsinged char state[][4]) 0xbe,0x39,0x4a,0x4c,0】【58,0xcf,/{5 / { 0xd0,Oxef,Oxaa,Oxfb,0x43,Ox4d,0x33,Ox85,0x45,Ox , int r,c: Ox02,0x7f,0x50,0x3e,0x9f,0xa8,/}6}/ ofr(r=0;r<4;r++) 0xS1,Oxa3,Ox40,0x8f,0x92,Ox9d,0x.38,0xf5,Oxbe,Oxb6, { 0xda,0x21,OxlO,0】 ,Oxt3,Oxd2,/}7 / for(c=0;c<4;e++) 0xcd,0x0c,Ox13,Oxec,Ox5f,0x97,0x44,0x17,Oxe4,0xa7, { 0x7e,0x3d,0x64,Ox5d,Ox19,0x73,/}8 / state[r][e]=sBox[state[r][c]]; Ox60,Ox81,Ox4f,0xde,0x22,Ox2a,OxgO,0x88,0x46,Oxee, } Oxb8,0x14,0xde,OxSe,OxOb,Oxdb,/ 9}/ } OxeO,0x32,0x3a,0x0a,0x49,Ox06,0x24,0xSc,Oxc2,0xd3, } 0xae,0x62,O 1,0x95,Oxe4,0x79,/%a{/ 替换表由数组sBox[]定义,sBox[]数组由0x00—0xf共 0xe7,Oxc8,O】【37,0x6d,Ox8d,0xd5,0x4e,Oxa9,0x6c,0x56, 256个元素构成: Oxf4,0xea,0x65,Ox7a,0xae,O)(o8,/}b / unsinged char sBox[]= 0xba,0x78,0x25,Ox2e,0xlc,0xa6,OxM,Oxe6,Oxe8,Oxdd, l/|c 0 1 2 3 4 5 6 7 8 9 a b e d Ox74,0xlf,Ox4b,Oxbd,Ox8b,0x8a,/}c}/ e f ¥/ 0x70,Ox3e,Oxl:6,0x66,0x48,Ox03,Oxf6,0x0e,0x61,0】‘35, 0x63,0x7c,Ox77,Ox7b,Oxt2,Ox6b,0x6f,Oxc5,Ox30,OxO1, 0】【57,Oxb9,0x86,Oxc1,0xld,0xge,/ d}/ 0x67,Ox2b,Oxfe,o】【(r7,Oxab,0x76,/}0¥/ 0xel,0 ,0 8,Oxll,0x69,Oxd9,0x8e,0x94,0xgb,Oxle, 0xca,0x82,Oxc9,Ox7d,0xfa,0x59,0x47,OxfO,Oxad,0xd4, Ox87,Oxe9,0xce,0)【55,O】【28,Oxdf,/}e / 0xa2,Oxaf,Ox9e,Oxa4,0x72,OxcO,/ 1 / 0xSc,0xal,0x89,OxOd,0xbf,Oxe6,0x42,0x68,Ox41,0) , Oxb7,Oxfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5, 0x2d,0x0f,0xb0,0x54,0xbb,0x16/}f{/ 0xe5,0xfl,0xT1,0xd8,0x31,0x15,/ 2}/ }; 0x04,0xc7,0x23,Oxc3,Ox18,0x96,Ox05,O a,0x07,Ox12, 将state[r][c]作为索引,取数组sBox[]中的元素赋值给 Ox80,Oxe2,0xeb,0x27,Oxb2,0x75,/ 3¥/ state[r][c]。例如:如果state[0][0]=Ox19,sBox[state[0] hIdllstrial&science T une圄固嘲匝圈 .61- 豳薯冒匝蠲豳豳201 1年第1 0卷第1 O期 [0]]即为sBox[25],对应值为oxd4,实际上即是替换表第l行 第9列上的元素,如此类推。 19 aO 9a e9 d4 eO b8 1e 3d f4 e6 f8 27 bf b4 41 e3 e2 8d 48 1l 98 5d 52 be 2b 2a 08 d.e f1 e5 30 行字节移位ShiftRows(state)操作具体代码为: void ShiftRows(unsigned char state[][4]) { unsigned char t[4]; int r,c; for(r=1;r<4;r++) { for(c=O;c<4;c++) { t[c]=state[r][(c+r)%4]; } for(c=O;c<4;c++) { state[r][c]=t[c]; 行字节移位操作将state中第1、2,3、4行上的字节向左 (低位)移动0,1、2、3个字节,移出的字节依次放回右边(高 位)。行字节移位操作方式如下图所示: 列混合变换MixColunms(state)操作具体代码为: void MixColunms(unsigned char state[][4]) { umigned char t[4]; int r,c; for(c=0;c<4;c++) ・62・ { for(r=0;r<4;r++) { t[r]=state[r][c]; for(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]); } } } 按照第0.1、2,3列和第0.1、2、3行的顺序,t[r]取每个元 素的值作为函数FFmul的参数,先在函数FFmul中进行有限 域乘法和加法运算,再将结果进行异或运算,以对state中从 state[0][0]至state[3][3]的所有元素进行置换。 e0 b8 1e e0 48 28 b4 41 27 eb 06 52 11 98 19 d3 26 ae n e5 9a 7a 4e t[r]=state[r儿c] state[r][c]=FFmul(0x02,t[r]) Fmul(0x03,t[(r+1)%4]) FFmul(0x01,t[(r+2)%4]) FFmul(0x01,t[(r+3)%4]); 函数FFmul先计算参数b(state中的元素)与0x01、0x02、 0x04、0x08相乘的值,再根据参数a(0x01、0x02、0x03、0x09、 0x0b、0x0d、0x0e)用异或运算求和: unsigned char FFmul(unsigned char a,unsigned char b) { unsigned char bw[4]; unsigned char re¥=0; im i: //计算state中的元素与0x01、0x02、0x04、0x08相乘的值 bw[0]=b; for(i-1;i<4;i++) { bw[i]=bw[i一1]<<1; if(bw[i一1]&0x80) { bw[ii ]=0xlb; //根据参数a(0 ̄01、0x02、0x03、0x09、0x0b、0x0d、0x0e), //用异或运算求和 IIIdIIstrial&science T曲咖e目蜀瞳珏薅固 豳冒重 疆匿盔冒201 1年第1 O卷第1 O期 for(i=0;i<4;i++) 操作与之前均相同,只是异或运算所使用的是最后一组密钥, { if((a>>i)&OxO1) 即第ll组密钥k[10][4][4]。 第三阶段:密文数据输出阶段。这是第一阶段的逆过程, 对本块(组)16字节踢文加密后的数据重新进行排序,并将结 果输出。假设加密后数据为state[4][4]={39,02,dc,19,25, { re8^=bw[i]; } } return re8: dc,11,6a,84,09,85,0b,1d,lb,9r7,32},那么重新排序后输出结 果为input[16]={39,25,84,1d,02,dc,09, ,dc,11,85,97,19, 68,Ob。32}。 , } 前面的f0r循环是进行域乘法运算。如果是与OxOl相乘, 0,0 0.1 0,2 0,3 O 4 8 】2 算法与算术中与1相乘相同,结果bw[0]即是被乘数b本身; 如果是与0x02相乘,结果bw[1]是将被乘数bw[0]向左位移1 位的值;如果是与0x04相乘,结果bw[2]是将被乘数bw[1]再 向左位移1位的值;如果是与Ox08相乘,结果bw[3]是将被乘 数bw[2]再向左位移1位的值。为防止结果出现“域溢出”, 如果位移后所得的值大于或等于OxSO,还要与Oxlb进行异或 运算。后面的f0r循环是进行域加法运算,实际上只是异或运 算。根据参数a(o ̄ol、Ox02、Ox03、Ox09、0x0b、OxOd和OxOe共 七个常数,加密时用前三个常数,解密时用后四个常数)向右 位移i位并与OxO1位与运算的结果确定是否进行异或运算。 假设a为Ox02,即00000010,当i等于0时,if条件为假,res为 O;当i等于1时,if条件为真,er¥与bw【1]进行异或运算,即得 到与Ox02相乘的结果。假设a为Ox03,即00000011,当i等于 O时,if条件为真,res与bw[O]进行异或运算;当i等于1时,if 条件仍为真,res再与bw[1]进行异或运算,两次异或运算得到 的值即为与Ox03相乘的结果。以此类推,七个常数与state中 的元素相乘和相加运算情况见下表: 乘数(a) res =bw[i] 十六进制 十进制 二进制 i=0 i=1 i=2 i=3 O如1 1 O00CO00l bw[0] 无运算 无运算 无运算 0)dD2 2 O0000o1O 无运算 bw[1] 无运算 无运算 0 B 3 0o()oo0l1 bw[0] bw[1] 无运算 无运算 O)【09 9 0o()oloo1 bw[0] 元运算 无运算 bw[3] OxOb 1l 0o0o1011 bw[0] bw[1] 无运算 bw[3] OxOd 13 0Ooo1101 bw[0] 无运算 bw[2] bw[3] OxOe 14 0Oo0l11O 无运算 bw[1] bw[2] bw[3] 转换轮中的AddRoundKey(state,W[i])操作与初始轮相同,只 是取下一组(第2一l0组)密钥与state中的数据进行异或运 算。 最终轮包括SubBytes(state)、ShiftRows(state)和Ad- dRoundKey(state,W[i]),但没有MixColumns(state)。各模块 Industrial&Science Tribune暇皿盈衄 1,0 1,1 1,2 1,3 l 5 9 13 2,0 2,1 2,2 2,3 2 6 10 14 3,0 3,1 3,2 3,3 3 7 11 15 二、KES算法解密过程 AKS算法解密过程是整个加密过程的逆过程。如果密钥 长度为128位,AES对数据的解密过程为:  ̄msigned char}InvCipher(unsigned char input) { unsinged char steel4][4]; inti,r,c; //第一阶段 for(r=0;r<4;r++) { for(c=O;e<4;c++) { state[r][c]=input[r+4 c]; } } //第二阶段 AddRoundKey(state,W[10]); for(i-9;i>=0;i一一) { InvShiftRows(state); InvSubBytes(state); AddRoundKey(state,W[i]); if(i)InvMixColumns(state); } //第三阶段 ofr(r=0;r<4;r+十) { for(C=O;C<4;c++) { input[r+4}C]=state[r][e]; } } renlⅡI input; } 解密过程也可以分为三个阶段:密文数据准备阶段、解密 ・63・ 豳冒重 瞳匿 冒2011年第10卷第10期 轮循环阶段和明文数据输出阶段。解密过程的第一阶段与加 密过程的第三阶段是互逆的,第三阶段与加密过程的第一阶 段是互逆的。在解密过程的第二阶段,密钥的使用顺序是w [1O]..…・wE0],与加密时相反。需要特别注意的是,在解密 轮循环阶段,字节替换操作函数InvSubBytes(state)中所使用 的替换表与加密时不同: unsigned charinvsBox[256]= }/ 0 1 2 3 4 5 6 7 8 9 a b c d e f +/ 0x52,0x09,0x6a,0xd5,0x30,0x36,o】【a5,0x38,Oxbf,0x40, 0xa3,0xge,Ox81,Oxt3,0xd7,0xfb,/}0 / Ox7e,Oxe3,0x39,0x82,0x9b,0x2f,0xff,0x87,0x34,0x8e, 0x43,0x44,Oxc4,0xde,0xe9,0xcb,/}1}/ 0x54,0x7b,0x94,0x32,Oxa6,0xc2,0x23,Ox3d,Oxee,Ox4c, 0x95,OxOb,0x42,0xfa,Oxe3,Oxge,/ 2 / Ox08,Ox2e,Oxal,0x66,0x28,Oxd9,0x24,Oxb2,0x76,0x5b, Oxa2,0x49,0x6d,Ox8b,Oxdl,0x25,/}3 / 0x72,Oxf8,Oxf6,0x64,0x86,0x68,0x98,Ox16,0xd4,0xa4, Ox5e,Oxcc,OxSd,0x65,Oxb6,0x92,/}4}/ Ox6e,OxT0,0x48,0xS0,0xfd,0xed,Oxb9,Oxda,OxSe,Ox15, 0x46,0x57,Oxa7,Ox8d,0xgd,0x84,/¥5 / OxgO,0xd8,0xab,0x00,Ox8e,Oxbe,0xd3,0xOa,O ,0xe4, 0】【58,Ox05,Oxb8,Oxk3,0x45,Ox06,/|c6¥/ 0xdO,Ox2e,Oxle,Ox8f,Oxea,Ox3f,OxOf,Ox02,Oxcl,Oxaf, Oxbd,Ox03,OxO1,o】【13,Ox8a,Ox6b,/ 7女/ Ox3a,Oxgl,0xll,Ox41,0x4f,0x67,Oxdc,Oxea,0x97,Oxf2, Oxef,Oxee,OxfO,Oxb4,Oxe6,0x73,/¥8}/ 0x96,Oxac,0x74,0x22,0xe7,Oxad,0x35,0x85,0xe2,0xt9, 0x37,0xe8,Oxlc,0x75,Oxdf,0x6e,/・9 / 0x47,Oxfl,Oxla,Ox71,0xld,0x29,Oxe5,0x89,Ox6f,Oxb7, 0x62,0xOe,0xsa,Ox18,Oxbe,0xlb,/}a}/ 0xfc,0x56,Ox3e,Ox4b,Oxe6,Oxd2,0x79,Ox20,0xga,Oxdb, Oxe0,Oxfe,Ox78,0xed,0xSa,Oxf4,/}b / Oxlf,Oxdd,Oxa8,0x33,0x88,Ox07,0xe7,Ox31,Oxb1,Ox12, o】【10,0x59,0x27,0xS0,Oxee,Ox5f,/ c}/ Ox60,OxS1,Ox7f,Oxa9,0x19,0xb5,Ox4a,OxOd,Ox2d,Oxe5, Ox7a,0xgf,0x93,Oxe9,Ox9e,Oxd,/ d / OxaO,0xe0,Ox3b,Ox4d,Oxae,Ox2a,0 ,OxbO,0xc8,0xeb, Oxbb,Ox3e,0x83,0x53,0x99,Ox61,/ e}/ Ox17,Ox2b,Ox04,Ox7e,0xba,0x77,0xd6,0x26,Oxel,0x69, 0x14,0】【63,0x55,Ox21,OxOe,0x7d/|cf|E/ }; 将state[r][c]作为索引,取数组invsBox[]中的元素赋值 给state[r][c]。例如:如果state[0][0]=0xd4,sBox[state[O] [O]]即为sBox[212],对应值为0x19,实际上即是替换表第d 行第4列上的元素,正好与加密时相反,如此类推。 另外需要注意的是,列混合变换InvMixColumns(state)操 作中,与加密时不同,FFmul函数的参数为OxOe、OxOb、OxOd和 Ox09,操作结果与加密时相反: ・64・ 墨 ii  e0 b8 1e i i i b4 41 27 i  ll i52 l1 98 i 置 ae n e5 t[r]=state[r][c] satte[r][e]=FFmul(0x0e,t[r]) FFmul(0x0b,t[(r+1)%4]) FFmul(OxOd,t[(r+2)%4]) FFmul(0x09,t[(r+3)%4]); 三、AES算法密钥扩展 在AES算法中,可以使用128位(16字节)、192位(24字 节)或256位(32字节)长度的密钥对数据进行加密,三种长度 的密钥分别被扩展成11组、13组、15组。128位(16字节)长 度的密钥扩展程序如下: void KeyExpansion(unsigned char}key,unsigned char w[] [4][4]) { int i,r,c; nusigned char rcon[]={OxO1,Ox02,Ox04,Ox08,OxlO,Ox20, 0x40,0xS0,0xlb,0x36f; //第1组密钥 f0lr(r=0;r<4;r++) { for(e:0;c<4;c++) { w[O][r][e] =key[r+c}4]; } //第2一l1组密钥 for(i一1;i<=10;i++) { for(e=O;e<4;e++) { //计算t[r]:riO]、t[1]、t[2]、t[3],供每列4行使用 unsinged chart[4]; for(r=0;r<4;r++) { t[r]=e?w[i][r][e一1]:w[i一1][r][3]; } if(c==O) { nusigned chartemp t[o]; for(r=0;r<3;r++) { t[r]=sBox[t[(r+1)%4]]; } t[3]=sBox[temp]; IndllStrial&sdence Trib珊le l嚣日口日匝l衄 豳冒重 疆匿I圈201 1年第1 0卷第1 0期 t[0] =rcon[i一1]; l 位)以上。极大地增加了破解密文的难度。由于KES算法是在 公众广泛参与和专家严密论证的基础上产生的,是一个已经 //第2一l1组密钥:前1组每列4行密钥与t[r]进行异或 公开的算法,因此,AES算法密钥本身特别是密钥长度对保护 运算 for(r=0;r<4;r++) { w[i][r][e]=w[i一1][r][c] t[r]; } } } } 第1组密钥w[O][r][c]直接使用原始密钥,密钥扩展程 序只是将128位(16字节)原始密钥重新进行排序: 腿10】jr]【c , 【0儿O】 【0J c1 J 【0J l2J 【oj【3 J Key【0J Key【4J Key【SJ Key【12】 【l J【O】 【Ij【{】 【I】【2J 【I】【3】 Key【t】 Key c5j Key【9l Keyfl 3】 【2ltol L2l LIl 【2l【2J 【2l【3J Key【2j Key【6J Key【{0】 Key【t4】 【3J【OJ 【3¨I J 【3l【2J I3】【3J Keyt3】 Keyt,j Key【1tl Keytt5j 第2~l1组密钥W[1][r][C]一W[10][r][c]用以下方式 得到:对于第2~II组第1列密钥W[I≤i≤10][r][0],t[r]首 先取前1组第4列密钥w[i一1][r][3],然后再通过sBox对t [r1进行置换;对于第2—11组第2.3、4列密钥W[1≤i≤lO] [r][1≤c≤3],t[r]直接取本组第1、2,3列密钥。之后,将前1 组每列4行密钥W[i一1][r][e]与t[r](t[o]、t[1]、t[2]、t [3])进行异或运算,即得到第2—11组密钥W[1][r][e]一w [10][r儿e]。 四、AES算法安全性分析 数据加密是维护数据安全的重要手段。作为DES的继承 者,AES已经被工业界、银行业和行政部门作为事实上的密码 标准,并逐渐取代DES在IPSec、SSL和ATM中的加密功能。 在这种情况下,除了要求能够高效实现以外,AES算法的安全 性问题显得尤为突出。正如DES算法使输入与输出之间呈现 非线性映射关系一样,AES算法每次以16字节(128位)数据 块State[4][4]为对象,通过将数据与密钥进行异或运算、对数 据进行置换、将数据行列进行变换等操作,最大限度地模糊输 出对输入的依赖,从而有效地保护数据安全。 (一)AES加密算法将密钥的位数提高到l6字节(128 hdlIstrial&sdence Tribune医圊匝同啊 数据安全十分重要。但到目前为止,要强行遍历搜索所有可 能的16字节(128位)以上的密钥,即使最快的计算机系统在 有效时间内也是无法做到的。 (二)AES加密算法除对数据进行普通替代和置换外,还 引入了域乘法和加法远算,以增加加密强度。列混合变换 MixColumns(state)所进行的域乘法和加法运算是基于名为GF (28)有限域理论的。G代表这一数学理论的发明者法国数学 家伽罗华(Galois,公元1811年一公元1832年);F即Field,表 示数学域;28=256,表示有限域范围位于集合{0x00…0xf}之 中。虽然AES算法中的GF(28)域乘法和加法运算仅在state [4][4]中的元素与0x01、0x02、0x03、0x09、0x0b、0x0d和0x0e 七个常数之间进行,乘法和加法也只是移位和异或运算,但是, 将数学原理巧妙地应用于密码分析实践之中,这种加密方式 有效地增加了对数据的加密强度。 (三)AES算法强调通过大量轮数来增加加密数据的复杂 性。根据密钥长度,AES算法对16字节(128位)数据的加密 轮数分另q是ll、13和15轮,当前的密码分析研究表明,迭代型 分组密码抗击密码分析攻击的能力随着加密轮数的增加而增 加。AES算法通过轮变换产生的高扩散性,归功于它在所有 状态比特上的均匀结构,每个状态比特均依赖于两轮之前的 所有状态比特,或者说,一个状态比特的改变均可能对两轮之 后的半数状态比特产生影响。研究表明,捷径攻击比穷尽密 钥搜索攻击更有效。目前,尚未发现能够对具有6轮以上的经 AES算法加密的数据有效的捷径攻击。如果考虑还有4轮以 上的安全余量,捷径攻击AES算法成功的可能性就更小。 虽然到目前为止还没有已知的密码分析攻击可以破解 AES加密的数据,但是,由于AES算法密钥扩展过程中,某一 轮的密钥都是由前一轮的密钥推导而来的,如果我们知道了 某轮密钥的部分字节,就有可能递推出本轮密钥的其它字节。 当泄露的密钥信息达到一定程度时,或许就可以通过穷举法 获得某一轮的密钥,进而获得全部轮子密钥。 【参考文献】 1.Federal Information Processing Standards Publication 197,No— vember26,2001.Announcing the Advanced Eneryption Standard. Http://csrc.nist.gov/publications/tips/tips197/tips一197.pdf. 2.[美]Richard Spi ̄man.经典密码学与现代密码学[M].叶远 健,曹英,张长富译.北京:清华大学出版社,2005 3.[美]David Salomon.数据保密与安全[M].蔡建,梁志敏译. 北京:清华大学出版社,2005 4.[印]Atul Kahate.密码学与网络安全[M].邱仲潘译.北京: 清华大学出版社,2005. ・65・ 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top