美国制定数据加密标准简况DES算法分组长度为64bits8bytes.ppt

美国制定数据加密标准简况DES算法分组长度为64bits8bytes.ppt

* * * * * * * c(x)是与x4+1互素的,因此是模x4+1可逆的。列混合运算也可写为矩阵乘法。设b(x)= c(x) a(x),则 图5.21 列混合运算示意图 逆列混合InvMixColumns() 逆列混合变换是列混合变换的逆,它将状态矩阵中的每一列视为系数在 上的次数小于4的多项式与同一个固定的多项式 d(x)相乘。 d(x)满足 (‘03’x3+‘01’x2+‘01’x+‘02’) d(x)=‘01’ 由此可得 d(x)=‘0B’x3+‘0D’x2+‘09’x+‘0E’ 同样,逆列混合可以写成矩阵乘法形式 密钥加 轮密钥与状态进行逐比特异或。 轮密钥由种子密钥通过密钥编排算法得到 轮密钥长度与分组密钥长度相同 表示为AddRoundKey(State,RoundKey) AES加密过程的伪代码 Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*Nr+1]) begin byte state[4,Nb] state = in AddRoundKey(state, w[0, Nb-1]) for round = 1 step 1 to Nr-1 SubBytes(state) ShiftRows(state) MixColumns(state) AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) end for SubBytes(state) ShiftRows(state) AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) Out = state end 轮函数的伪C代码 Round(State,RoundKey) { ByteSub(State); ShiftRow(State); MixColumn(State); AddRoundKey(State,Roundkey); } 结尾轮的轮函数 Round(State,RoundKey) { ByteSub(State); ShiftRow(State); AddRoundKey(State,Roundkey); } AES解密过程的伪代码 InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*Nr+1]) begin byte state[4,Nb] state = in AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) for round = Nr-1 step -1 downto 1 InvShiftRows(state) InvSubBytes(state) AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) InvMixColumns(state) end for SubBytes(state) ShiftRows(state) AddRoundKey(state, w[0, Nb-1]) Out = state end 解密算法的轮函数 InvRound (State, RoundKey) { InvByteSub (State); InvShiftRow (State); InvMixColumn (State); AddRoundKey (State, RoundKey) } 密钥编排 轮密钥的比特数等于分组长度乘以轮数加1 种子密钥被扩展为扩展密钥 轮密钥从扩展密钥中按顺序选取 字替代函数SubWord()的输入为一个4字节的字,对每一个字节应用S盒得到输出字。 函数RotWord()接受字 作为输入,执行循环移位后返回字 轮常数字数组Rcon[i]的值为 ,其中i从1开始,而不是0, 是有限域GF(28)上x(x记为{02})的指数幂。 5.4 分组码的运行模式 填充(Padding) 给定加密消息的长度是随机的,按64 bit分组时,最后一组消息长度可能不足64 bit。可以填充一些数字,通常用最后1字节作为填充指示符(PI)。它所表示的十进制数字就是填充占有的字节数。数据尾部、填充字符和填充指示符一起作为一组进行加密。 数据 填 充 PI 主要工作

文档评论(0)

1亿VIP精品文档

相关文档