高并行度的信息加解密算法研究(5)
时间:2017-05-21 15:05 来源:毕业论文 作者:毕业论文 点击:次
图3.1 AES算法轮数 3.2.2 轮函数组成 加密算法中的轮函数由四个面向字节的变换组成: 1、字节替代ByteSubs():将每个字节按查表方式替换为16*16字节大小的S盒子中的值。例如,值为A1h的字节将被置换为S盒中第A行、第1列的值,即为32h。 2、移行ShiftRows():对状态数组的每一行进行循环左移操作,循环左移的为数取决于行号。 3、混列MixColumns(): 将状态逐列进行处理,与固定多项式a(x)进行模x^4+1乘。 4、加轮密钥AddRoundKey():将状态中的每个四字节字与轮密钥 进行异或运算。 3.2.3 密钥扩展 在进行加密变换的时候,需要将状态与轮密钥进行多轮的按位异或,加密操作共需要Nr+1个轮密钥。 获得扩展密钥的伪代码如下[9]: KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk) Begin word temp; i = 0; while (i < Nk) w[i] =f word(key[4*i], key[4*i+1], key[4*i+2], key[4*i+3]); i = i+1; end while i = Nk; while (i < Nb * (Nr+1)) temp = w[i-1]; if (i mod Nk == 0) temp = SubWord(RotWord(temp)) xor Rcon[i/Nk]; else if (Nk > 6 and i mod Nk = 4) temp = SubWord(temp); end if w[i] = w[i-Nk] xor temp; i = i + 1; end while end 其中 1、函数SubWord()对输入的4字节字中的每个字节施加S盒操作; 2、函数RotWord()对输入的4字节字进行一个字节的循环左移; 3、Rcon[i]为轮常数,由4字节组成。Rcon[i] = {xi-1, ’00’, ’00’, ’00’},其中x0为’01’,x1为’02’,x2为’04’,x3为’08’,。 3.2.4 AES加密算法的伪代码[10]: Rijndael(State,Cipherkey) { KeyExpansion(Cipherkey,Expandedkey) Addroundkey(state,Expandedkey) For i=1 step 1 to Nr-1 Subbytes(state) Shiftrows(state) Mixcolumns(state) Addroundkey(state,Expandedkey+Nb*i) End for Subbytes(state) Shiftrows(state) Addroundkey(state,Expandedkey+Nb*Nr) End } 3.3 AES解密算法说明 3.3.1 轮函数 解密部分流程与加密部分是一样的,只有所使用的函数均为加密部分的逆函数: 1、逆字节替代变换InvSubBytes():使用了与加密过程互逆的S盒,置换过程与加密是相同。例如,值为32h的字节将被置换为S盒中第3行、第2列的值,即被置换为a1h,与加密置换前的原值相同。 2、逆移行变换InvShiftRows():对状态数组的每一行进行循环右移操作,循环右移的为数取决于行号,与加密时循环左移的为数相同。 3、逆混列变换InvMixColumns():逆混列变换的过程与混列变换的过程是一样的,只有使用的列混合矩阵是与加密不同的,两个矩阵互逆。 (责任编辑:qin) |