1,且KiPC2CiDi,LSi表示循环左移两个或一个位置具
体地如果i12916就移一个位置,否则就移两个位置PC2是另一个固定的置换。
DES的解密与加密使用一样的算法,以密文y作为输入,以相反顺序使用密钥编排
K16K15…K1,输出的是明文X
DES算法的扩散
两轮扩散:
三轮扩散:从LO的一块数据影响开始
AES算法
128位(16个字)输入明文,128位密钥长度,第一次迭代前明文密钥
AES算法整体结构:
AES算法的轮函数Rij
dael轮函数
1)字节代换(SubByte)2)行移位(ShiftRow)
f3)列混合(MixColum
)4)密钥加(AddRou
dKey)①字节代换:字节代换是非线形变换,独立地对状态的每个字节进行,代换表(即
S盒)是可逆的
S盒可以由以下两步运算得到:求输入元素在mxx8x4x3x1上的逆元;对上步中所求得的逆元进行如下运算
②行移位:行移位是将状态阵列的各行进行循环移位,不同状态行的位移量不同;第0行不移动;第1行左移1字节;第2行左移2字节;第3行左移3字节列混合
其中:(00000010)a7a6a5a4a3a2a1a0a6a5a4a3a2a1a00a7为0
a6a5a4a3a2a1a0000011011a7为1
(00000001)a7a6a5a4a3a2a1a0a7a6a5a4a3a2a1a0
(00000011)a7a6a5a4a3a2a1a0(00000010)a7a6a5a4a3a2a1a0
密钥加密钥加是将轮密钥简单地与状态进行逐比特异或;
轮密钥由种子密钥通过密钥编排算法得到
注:结尾轮函数将列混合这一步骤去掉
AES算法的密钥编排算法
a7a6a5a4a3a2a1a0
f密钥编排指从种子密钥得到轮密钥的过程,AES的密钥编排由密钥扩展和轮密钥选取两部分组成基本原则如下轮密钥的总比特数等于轮数加1再乘以分组长度;((101)1281408)种子密钥被扩展成为扩展密钥轮密钥从扩展密钥中取,第1轮轮密钥取扩展密钥的前Nb个字,第2轮轮密钥取
接下来的Nb个字密钥扩展:
每一列的4个字节组成一个字对w数组扩充40个新列,构成总共44列扩展密钥数组,如下产生
(1)如果i不是4的倍数,那么wiwi4wi1
(2)若果i是4的倍数,那么wiwi4Twi1T为一个复杂的函数
T函数由三个部分组成:字循环,字节代换和轮常量异或字循环:将1个字中的4个字节循环左移1个字节。即b0b1b2b3变换成
b1b2b3b4字节代换:对自循环的结果使用S盒(书上P112表415)将前两步的结果同轮常量Rco
j进行异或,其中j表示轮数轮密钥的选取
W0W1W2W3W4W5W6W7
。。。
WWWW40
41
42
43
轮密钥0
轮密钥1
。。。
轮密钥10
AES的解密变换
ByteSub的逆变换由代换表的逆表做字节代换
行r