扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共9页)
ShiftRow变换
在ShiftRow变换中,状态的后3行以不同的移位值循环右移,行1移C1字节,行2移C2字节,行3移C3字节。
移位值C1,C2和C3与加密块长Nb有关,具体列在表2-5中:
表3-3 不同块长的移位值
Nb
C1
C2
C3
4
1
2
3
MixColumn变换
在MixColumn变换中,把状态中的每一列看作GF(28)上的多项式与一固定多项式c(x)相乘然后模多项式x4+1,其中c(x)为:
c(x) =‘03’x3 + ‘01’x2 + ‘01’x + ‘02’
圈密钥加法
在这个操作中,圈密钥被简单地使用异或操作按位应用到状态中。圈密钥通过密钥编制得到,圈密钥长等于数据块长Nb。
在这个表示法中,“函数”(Round, ByteSub, ShiftRow,...) 对那些被提供指针 (State, RoundKey) 的数组进行操作。ByteSub 变换是非线性字节交换,各自作用于每个 State 字节上。在 ShiftRow 中,State 的行按不同的偏移量循环移位。在 MixColumn 中,将 State 的列视为GF(28) 多项式,然后乘以固定多项式 c( x ) 并模除 x4 + 1,其中 c( x ) = '03' x3 + '01' x2+ '01' x + '02'。这个多项式与 x4 + 1 互质,因此是可逆的。
轮回密钥通过密钥计划方式从密码密钥 (Cipher Key) 派生而出。它有两个组件:密钥扩展 (Key Expansion) 和轮回密钥选择 (Round Key Selection)。轮回密钥的总位数等于块长度乘以轮回次数加 1(例如,块长度等于 128 位,10 次轮回,那么就需要 1408 个轮回密钥位)。
密码密钥扩充成扩展密钥 (Expanded Key)。轮回密钥是通过以下方法从这个扩展密钥中派生的:第一个轮回密钥由前 Nb(Nb = 块长度)个字组成,第二个由接着的 Nb 个字组成,以此类推。
加密算法由以下部分组成:初始轮回密钥加法、Nr-1 个轮回和最后一个轮回。在伪 C 代码中:
Rijndael(State,CipherKey){KeyExpansion(CipherKey,ExpandedKey);AddRoundKey(State,ExpandedKey);For( i=1 ; i<Nr ; i++ ) Round
(State,ExpandedKey + Nb*i);FinalRound(State,ExpandedKey + Nb*Nr).}
如果已经预先执行了密钥扩展,则可以根据扩展密钥指定加密算法。
Rijndael(State,ExpandedKey){AddRoundKey(State,ExpandedKey);For( i=1 ; i<Nr ; i++ ) Round(State,ExpandedKey +
Nb*i);FinalRound(State,ExpandedKey + Nb*Nr);}
由于 Rijndael 是可逆的,解密过程只是颠倒上述的步骤。
最后,开发者将仔细考虑如何集成这种安全性进展,使之成为继 Rijndael 之后又一个得到广泛使用的加密算法。AES 将很快应一般商业团体
的要求取代 DES 成为标准,而该领域的发展进步无疑将追随其后。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。