- 0
- 0
- 约2.42千字
- 约 45页
- 2018-08-05 发布于贵州
- 举报
现代密码学第四讲分组密码3课件
分组密码(三);上讲内容回顾;本节主要内容;AES算法的整体结构;AES算法的整体结构;AES算法的轮函数;1) 字节代换(ByteSub)
字节代换是非线形变换,独立地对状态的每个字节进行,代换表(即S-盒)是可逆的.;AES算法的轮函数;AES算法的轮函数;
;AES算法的轮函数;2) 行移位(ShiftRow)
行移位是将状态阵列的各行进行循环移位,不同状态行的位移量不同:
第0行不移动,
第1行循环左移C1个字节,
第2行循环左移C2个字节,
第3行循环左移C3个字节。
位移量C1、C2、C3的取值与Nb有关,由下表给出:
;例:当Nb=4时,具体的操作如下:;3)列混合(MixColumn)
列混合变换中,将状态阵列的每列视为GF((28)4)上的多项式,再与一个固定的多项式c(x)进行模x4+1乘法. Rijndael的设计者给出的c(x)为(系数用十六进制数表示):
c(x)=‘03’x3+‘01’x2+‘01’x+‘02’;列混合运算示意图;列混合运算也可写为矩阵乘法.
设b(x)= c(x)a(x),则;AES算法的轮函数;AES算法的轮函数;AES算法的轮函数;4) 密钥加(AddRoundKey)
密钥加是将轮密钥简单地与状态进行逐比特异或. 轮密钥由种子密钥通过密钥编排算法得到,轮密钥长度等于分组长度Nb.;注. 结尾轮的轮函数与前面各轮不同,将MixColumn这一步去掉.;密钥编排指从种子密钥得到轮密钥的过程,AES的密钥编排由密钥扩展和轮密钥选取两部分组成,其基本原则如下:
1)轮密钥的总比特数等于轮数加1再乘以分组长度;如128比特的明文经过10轮的加密,则总共需要(10+1)*128=1408比特的密钥.
2)种子密钥被扩展成为扩展密钥;
3)轮密钥从扩展密钥中取,其中第1轮轮密钥取扩展密钥的前Nb个字,第2轮轮密钥取接下来的Nb个字,依次类推.;1) 密钥扩展
扩展密钥是以4字节字为元素的一维阵列,表示为W[Nb* (Nr+1)],其中前Nk个字取为种子密钥,以后每个字按递归方式定义.扩展算法根据Nk≤6和Nk6有所不同。;当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;
}
}
; Key[4*Nk]为种子密钥,看作以字为元素的一维阵列;
函数SubByte ( )返回4字节字,其中每一个字节都是用Rijndael的S盒作用到输入字对应的字节得到;
函数RotByte ( ) 也返回4字节字,该字由输入的字循环移位得到,即当输入字为(a, b, c, d)时,输出字为 (b, c, d, a).;当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 ++)
{
temp=W[i -1];
if (i % Nk= =0)
temp=SubByte (RotByte (temp))^Rcon[i /Nk];
else if (i % Nk==4)
temp=SubByte (temp);
W[i]=W[i - Nk]^ temp;
}
};Rcon[i/Nk] 为轮常数,其值与Nk无关,定义为(字节用十六进制表示,同时理解为GF(28)上的元素):
Rcon [i]=(RC[i], ‘00’, ‘00’, ‘00’)
其中RC[i] 是GF(28) 中值为xi-1的元素,因此
RC[1] =1(即‘01’)
RC[2] = x(即‘02’)
RC[i]=x·RC[i-1]= xi-1
;2) 轮密钥选取
原创力文档

文档评论(0)