- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.2 AES算法——3. 列混合变换MixColumn(State) = C*State 在列混合变换中,将状态阵列的每个列视为GF(28)上的多项式,再与一个固定的多项式c(x)进行模x4+1乘法。当然要求c(x)是模x4+1可逆的多项式,否则列混合变换就是不可逆的。Rijndael的设计者给出的c(x)为: c(x) =3x3+x2+x+2 c(x)是与x4+1互素的,因此是模x4+1可逆的。列混合运算也可写为矩阵乘法。设 b(x)= c(x)⊙a(x),则 a(x) = d(x)⊙b(x) d(x)=Bx3+Dx2+9x+E (系数用十六进制数表示) 4.2 AES算法——3. 列混合MixColumn(State) = C*State(续) 4.2 AES算法——4. 轮密钥加法变换AddRoundKey(State,RoundKey) 轮密钥加是将轮密钥简单地与状态进行逐比特异或。轮密钥由种子密钥通过密钥编排算法得到,其长度等于分组长度。 密钥加运算的逆运算是其自身。 4.2 AES算法——轮变换Round(State,RoundKey) 综上所述,轮变换的伪代码如下: Round (State, RoundKey) { ByteSub (State); ShiftRow (State); MixColumn (State); AddRoundKey (State, RoundKey) } 最后一轮的轮变换与前面各轮不同,将MixColumn这一步去掉。 4.2 AES算法——加密过程 通常,分组密码算法的结构是Feistel网络结构,不过AES算法使用了一种称为宽轨迹策略(WTS)的方法,其加密过程可分为三个步骤,用伪码表示为: ①将轮密钥RoundKey与明文State异或 AddRoundKey(State,RoundKey); ②对前Nr-1轮中的每一轮进行相同的变换 Round(State,RoundKey) { SubBytes(State);(用S盒进行一次变换操作) ShiftRow(State);MixColumn(State); AddRoundKey(State,RoundKey);} ③最后一轮变换:FinalRound(State,RoundKey) { SubBytes(State);ShiftRow(State); AddRoundKey(State,RoundKey);} 最后的State即为密文。解密过程把加密过程完全反过来即可。 4.2 AES算法——轮密钥编排 轮密钥编排包括密钥扩展和密钥选取,其原理如下: ①扩展密钥长度等于分组长度b乘以(轮数加1); ②将密码密钥扩展成扩展密钥; ③从扩展密钥中取出轮密钥:第i个轮密钥由第i个b比特组成。 密钥扩展算法KeyExpansion(key)把密钥key变换成Rn个长整型字(即字长为32 b)。算法根据Nk≤6和Nk6有所不同。算法用到了两个函数: ①循环左移函数RotWord(A,B,C,D) = (B,C,D,A)。 ②置换函数SubBytes(A)使用一个S盒πS对字节A进行变换,其中πS是有限域{0,1}8的一个置换。SubWord(A0,A1,A2,A3) = (B0,B1,B2,B3), A*A-1 mod(x8+x4+x3+x+1)=1 4.2 AES算法——密钥扩展函数KeyExpansion(key) ① 当Nk≤6时,扩展算法如下 KeyExpansion (byteKey[4*Nk] , W[Nb*(Nr+1)]) {for (i =0; i Nk; i ++) W[i]=(Key[4* i],Key[4* i +1], Key[4* i +2],Key[4* i +3] ); for (i =Nk; i Nb*(Nr+1); i ++) { temp=W[i-1]; if (i % Nk= =0) temp=SubByte (RotByte (temp))^Rcon[i /Nk]; W[i]=W[i-Nk]^ temp;}} 4.2 AES算法——密钥扩展函数KeyExpansion(key) ② 当Nk6时,扩展算法如下: KeyExpansion (byte Key[4*Nk] , W[Nb*(Nr+1)]) { for (i=0; i Nk; i ++) W[i]=(Key[4* i], Key[4* i +1], Key[4* i +2], Key[4* i +3] ); for (i =Nk; i Nb*(Nr+1); i ++) {
文档评论(0)