1、高级加密标准AESAES算法的整体结构 Rijndael 由比利时的Joan Daemen和Vincent Rijmen设计,算法的原型是Square算法,经过修改后确定为高级数据加密标准AES. 典型的典型的SPN结构结构 有较好的数学理论作为基础;结构简单、速度快有较好的数学理论作为基础;结构简单、速度快Key Length(Nk words)Block Size(Nb words)Number of Rounds (Nr)AES-1284410AES-1926412AES-2568414AES算法的整体结构轮密钥加字节替代行移位列混合初始状态矩阵(state)AES算法的分组长度固定为1
2、28比特,以字节为基本单位转换为状态字节,依顺序 a00, a10, a20, a30, a01, a23, a33,前4个字节组成第1列,后四个字节组成第2列,依次类推,AES算法明文分组可以构成一个44的字节矩阵,如图所示3-23,加密结束时,输出也是从状态字节中按相同的顺序提取。AES算法举例学习下面我们以一个128位块为例,开始分别介绍AES加密算法基本变换的具体过程。为了表达简洁,下面的中间结果都用16进制来表示。则128比特二进制示例块用16进制表示则对应为0 x 80 5E 6A 36 53 25 3A 66 63 35 69 03 20 6C 28 06课堂思考题例如“good
3、 good study !day day up !”采用AES算法,明文输入初始状态矩阵?初始密钥实例:设初始密钥(初始子密钥矩阵与明文类似0 x 75 35 6B 99 05 61 39 56 73 62 05 31 00 55 09 32 轮密钥加 =此处轮密钥是初始密钥,轮密钥长度等于分组长度。 字节代替(SubBytes) 字节变换(SubBytes)使用一个S盒,S盒是一个166的矩阵,如表所示。其非线性置换为:输入的列的每个元素用来指定S盒的地址:前4位指定S盒的行,后4位指定S盒的列。行和列所确定S盒位置的元素取代输入矩阵中相应位置的元素,例如“03” ,行0,列3,因此输入“0
4、3” ,输出“7B”。字节替代所用S盒字节替代举例在上面的示例中,第1个基本元素为”F5”,它将被S盒行为第”F行”、列为第”5”列的元素“E6“代替,其余的输出也用相同的方法确定。 行移位(ShiftRows) 状态阵列的4个行循环以字节为基本单位进行左移,而每行循环做移的偏移量是由明文分组的大小和所在行数共同确定,即列数Nb和行号确定。AES的Nb固定为4,下面两行针对Rijndael算法 b0,0b1,0b2,0b3,0b0,1b1,1b3,1b0,2b1,2b2,2b3,2b0,3b1,3b2,3b3,3b2,1b0,0b1,0b2,0b3,0b0,1b1,2b3,1b0,2b1,3b
5、2,2b3,2b0,3b1,1b2,3b3,3b2,1不不移移位位循循环环左左移移1位位循循环环左左移移2位位循循环环左左移移3位位行移位举例3)列混合(MixColumn) 列混合变换中,将状态阵列的每列视为GF(28)4)上的多项式,再与一个固定的多项式c(x)进行模x4+1乘法. Rijndael的设计者给出的c(x)为(系数用十六进制数表示): c(x)=03x3+01x2+01x+02列混合列混合(MixColumns) 列混合是可以表示为矩阵相乘来实现 0011223302030101010203010101020303010102cbcbcbcb列混合举例列混合举例列混合举例GF
6、(28)的多项式乘法,约化多项式为m(x)=x8+x4+x3+x+1 例:57x乘以83x (x6+x4+x2+x+1) (x7+x+1)= (x13+x11+x9+x8+x7) (x7+x5+x3+x2+x) (x6+x4+x2+x+1) = x13+x11+x9+x8+x6+x5+x4+x3+1=x7+x6+1 mod m(x)列混合举例课堂练习课堂练习:列混合运算(128比特分组)轮密钥加(AddRoundKey) 将列混合的状态矩阵与子密钥进行XOR逻辑运算(子密钥是从初始密钥派生而来的),即将轮密钥与状态按比特异或。轮密钥是通过密钥调度过程从密码密钥中得到的,轮密钥长度等于分组长度。
7、 轮密钥加 举例密钥排列AES算法加密和解密过程中密码密钥(Cipher Key)同样以字节为基本单位转换,因而依顺序 k00, k 10, k20, k30, k01,k23, k33,为类似地用一个4行的矩阵阵列来表示,前4个字节组成第1列,后四个字节组成第2列,依次类推,列数记为Nk 。AES算法的密码密钥的列数Nk可以取的值为4,6,8,对应的密钥长度为128,192,256bits,因而密码密钥构成一个44、46、48的密钥字节矩阵。密钥阵列状态 如图所示,192比特密钥的密码密钥矩阵,Nk为6。K5K2K1K0K3K4密钥扩展 (NK=4)初始密钥实例:设初始密钥75 35 6B
8、99 05 61 39 5673 62 05 31 00 55 09 32 求K4(1) 循环将K3按照字节为单位左移1字节,00 55 09 32变成了55 09 32 00 (2) 将55 09 32 00作为S盒的输入,查表得到输出 fc 01 23 63 (3) 计算常量Rconi=(RC(j),00,00,00)异或,RC(j)=20=01=01(十六进制) (4) 将01000000与fc 01 23 63 异或运算得fd 01 23 63K4= 75 35 6B 99 XOR fd 01 23 63 = 88 34 48 fa 在密钥扩展中,函数RotByte(a,b,c,d)=
9、(b,c,d,a),即是输入字的1字节循环 K0,0K0,1K0,2K0,3K1,0K1,1K1,2K1,3K2,0K2,1K2,2K2,3K3,0K3,1K3,2K3,3RotByteK0,0K0,1K0,2K1,3K1,0K1,1K1,2K2,3K2,0K2,1K2,2K3,3K3,0K3,1K3,2K0,3密钥扩展-RotByte密钥扩展程序如下:密钥扩展程序如下:其中:Rconi = (RCi, 00, 00, 00)RC1 = 1(即01)RCi = (02)(i-1);i=2,3,.Rcon的求法RC1=01 (0000 0001) Rcon1=(01,00,00,00)RC2=0
10、2 (0000 0010) Rcon2=(02,00,00,00)RC3=04 (0000 0100) Rcon3=(04,00,00,00)RC4=08 (0000 1000) Rcon4=(08,00,00,00)RC5=10 (0001 0000) Rcon5=(10,00,00,00)RC6=20 (0010 0000) Rcon6=(20,00,00,00)RC7=40 (0100 0000) Rcon7=(40,00,00,00)RCi求K5,K6,K7三个子密钥计算如下: K(5)=K(i-4) XOR K(i-1)=K(1)XOR K(4)= 05613956 XOR 8834
11、48fa =8d5571ac ;K(6)=K(i-4) XOR K(i-1)=K(2)XOR K(5)= 73620531 XOR 8d5571ac =fe37749d ;K(7)=K(i-4) XOR K(i-1)=K(3)XOR K(6)= 00550932 XOR fe37749d =fe627daf ;2) 轮密钥选取 轮密钥i(即第i 个轮密钥)由轮密钥缓冲字WNb* i到WNb*(i+1)给出:AESAES算法的密钥编排算法算法的密钥编排算法Nb=4及Nk=4时的密钥扩展与轮密钥选取AES算法的密钥编排算法Nb=4及Nk=6时的密钥扩展与轮密钥选取Nb=4及Nk=8时的密钥扩展与轮
12、密钥选取192bit and 256bit 的密钥扩展Wi-4Wi-3Wi-2Wi-1WiByteSubstituionByteRotate+Rcons+Key expansion4 = i 4 ( Rnd + 1 )i mod 4 = 0i mod 4 != 0Wi-6Wi-5Wi-4Wi-3Wi-2ByteSubstituionByteRotate+Rcons+Key expansion6 = i 6 ( Rnd + 1 )i mod 6 = 0i mod 6 != 0Wi-1WiNk=6若Nk=6,则有: KeyExpansion(byte Key4*Nk,WNb* (Nr+1)) fo
13、r(i=0;i Nk;i+) Wi=(Key4*i,Key4*i+1,Key4*i+2,Key4*i+3); for(i= Nk;i Nb* (Nr+1);i+) temp=Wi-1; if(i% Nk= =0) temp=SubByte(RotByte(temp)Rconi/ Nk; Wi=Wi- Nktemp;Wi-6Wi-5Wi-4Wi-3Wi-2ByteSubstituion+Key expansion8 = i 8 ( Rnd + 1 )i mod 8 = 0i mod 4 != 0Wi-1WiWi-8Wi-7ByteSubstituionByteRotate+Rconsi mod
14、4 = 0i mod 4 = 0Nk=8时的密钥扩展KeyExpansion(byte Key4*Nk,WNb* (Nr+1)) for(i=0;i Nk;i+) Wi=(Key4*i,Key4*i+1,Key4*i+2,Key4*i+3); for(i= Nk;i Nb* (Nr+1);i+) temp=Wi-1; if(i% Nk= =0) temp=SubByte(RotByte(temp)Rconi/ Nk; else if(i% Nk= =4) temp=SubByte(temp);Wi=Wi- Nktemp;轮数(轮数(Round)的不同取值)的不同取值轮数(轮数(Round)明文
15、分组明文分组加密轮数加密轮数Key Length=12812810Key Length=19212812Key Length=25612814轮数(Round)的不同取值AES 的密钥调度密钥调度包括两个部分:密钥扩展和轮密钥选密钥调度包括两个部分:密钥扩展和轮密钥选取。取。密钥bit的总数分组长度(轮数Round1)例如当分组长度为128bits和轮数Round为10时,轮密钥长度为128(101)1408bits。将密码密钥扩展成一个扩展密钥。从扩展密钥中取出轮密钥:第一个轮密钥由扩展密钥的第一个Nb个字(其实就是Nb 列),第二个轮密钥由接下来的Nb个字组成,以此类推。解密 子密钥子密钥
16、轮密钥加轮密钥加(AddRoundKey)密文块密文块逆字节代替逆字节代替(InvSubBytesSubBytes)逆行移位逆行移位(InvShiftRows)逆列混合逆列混合(InvMixColumns)轮密钥加轮密钥加(AddRoundKey)是否最后一轮是否最后一轮是是否否轮密钥加轮密钥加(AddRoundKey)明文块明文块子密钥子密钥子密钥子密钥逆行移位逆行移位(InvShiftRows)逆字节代替逆字节代替(InvSubBytesSubBytes)轮密钥加与加密时相同逆行移位逆列混合 对于矩阵ABC,如果C=AB,且A可逆,则A-1C=A-1AB=B逆字节替代(逆S盒)作业作业1
17、对于分组长度128比特,密钥长度128比特的AES算法,若已知明文是各自名字组成,密钥是学号,若不够则填充,填充方法为(除最后一个字节外)均以0 x00填充,填充序列的最后一个字节记录填充序列的长度。求第一轮字节代换、行移变换和列变换的输出.例如 王二是“WANG ER”, 学号是“2013122000”W870 x57 A650 x41 N780 x4E G710 x47 space320 x20 E690 x45 R820 x520500 x30 1 500 x31 2 500 x32 3500 x33 明文:0 x57414E47324552000000000000000007; 密钥:
18、0 x32303133313232303030000000000006.后面内容仅供参考基本运算在AES中选择的不可约多项式是p(x) = x8 + x4 + x3 + x + 1,余式的次数至多是7次,共28=256个多项式,这256个余式构成了一个有限域。字节在GF(28)上的表示字节b用二进制表示为b=b7b6b5b4b3b2b1b0为有限域GF(28)上的域元素,若用多项式表示,bi可看作是多项式的系数,bi0,1,则字节b对应多项式为:b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0例如:字节57 (十六进制数)对应的二进制为01010111,为GF(28)上
19、域元素,字节57对应的多项式为x6+x4+x2+x+1。GF(28)上两个域元素的和GF(28)上两个域元素的和对应的多项式仍然是一个次数不超过7的多项式,其多项式系数等于两个元素对应多项式系数的模2加,即域元素对应二进制按位异或运算。例如:57+83= D4,用多项式表示为:(x6+x4+x2+x+1)+(x7+x+1)x7+x6+x4+x2(modp(x)用二进制表示为:01010111 10000011=11010100由于每个元素的加法逆元等于自己,所以有限域减法和加法相同。GF(28)上两个域元素的乘要计算GF(28)上域元素的乘法,必须先确定一个GF(2)上的8次不可约多项式;GF
20、(28)上两个元素的乘积就是这两个多项式的模乘。在Rijndael密码中,这个8次不可约多项式确定为:p(x)= x8+x4+x3+x+1它的十六进制表示为11B。例如,5783=C1可表示为以下的多项式乘法:(x6+x4+x2+x+1)(x7+x+1)x7+x6+1(mod p(x)x乘法 GF(28)上还定义了一个运算,称之为x乘法,其定义为xb(x)b7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0 x(mod p(x) 如果b7=0,求模结果不变,否则为乘积结果减去p(x),即求乘积结果与p(x)的异或。由此得出x(十六进制数02)乘b(x)可以先对b(x)在字
21、节内左移一位(最后一位补0)。若b7=1,则再与1B(其二进制为00011011)做逐比特异或来实现,而任意常数乘法可以通过对中间结果相加实现。b70实例举例02 54 =(0000 0010)(0101 0100)=(x)(x6+x4+x2) =x7+ x5+x3 =x7+ x5+x3 x7+ x5+x3 (mod p(x) =(1010 1000)由上面的规则:相当于把字节(0101 0100)左移一位即得(1010 1000)(最后一位补0)。b71实例举例 02 D4=(0000 0010) (1101 0100) =(x) (x7+x6+x4+x2) (modp(x) =x8+x7+
22、 x5+x3(modp(x) (x4+x3+x+1)+x7+x5+x3(modp(x) x7+x5+x4+x+1(modp(x) 多项式 x7+x5+x4+x+1映射为二进制即为:(1011 0011)由上面的规则:先把(1101 0100) 在字节内左移一位即得(10101000)(最后一位补0),因为b71,故(1010 1000)再与(0001 1011)异或得(1011 0011)5713 5702=AE;5704= AE 02 =47;5708= 47 02 =8E;5710= 8E 02 =07;5713=57(01 02 10) =57 AE 07=FE。 因为13=01 02
23、10=01 +02 +10GF(28)上域元素的乘法逆元在有限域GF(28)中,域元素的乘法满足交换律,且有单位元,并且每个域元素都有乘法逆元。在GF(28)中求乘法逆元可利用多项式的扩展的欧几里得算法计算出来。求次数小于8的非零多项式b(x)的乘法逆元,首先利用多项式的扩展欧几里得算法得出两个多项式a(x)和c(x),使得满足b(x)a(x)+p(x)c(x)=1, 即满足a(x)b(x) 1 mod p(x),因此a(x)是b(x)的乘法逆元。乘法逆元举例求GF(28)上域元素,F5(十六进制)的乘法逆元。(1)F5用对应二进制为11111001,则用多项式表示为b(x)=x7+x6+x5
24、+x4+x2+1,然后计算两个多项式a(x)和c(x)满足(x7+x6+x5+x4+x2+1)a(x)+p(x)c(x)=1 (2) 采用多项式的扩展欧几里得算法按照如下步骤计算:因为:(x8+x4+ x3+x+1)=(x7+x6+x5+x4+x2+1)(x+1)+ x2(x7+x6+x5+x4+x2+1)=x2(x5+x4+x3+x2+ 1)+11=(x7+x6+x5+x4+x2+1)-x2(x5+x4+x3+x2+ 1)=(x7+x6+x5+x4+x2+1)-(x8+x4+x3+x+1)-(x7+x6+x5+x4+x2+1)( x+1)(x5+x4+x3+x2+1)= ( x8+ x4+
25、x3+ x + 1 ) ( x5+ x4+ x3+ x2+ 1 ) -(x7+x6+x5+x4+x2+1)1+(x+1)(x5+x4+x3+x2+1)= x8+ x4+ x3+ x + 1 ) ( x5+ x4+ x3+ x2+ 1 ) -(x7+x6+x5+x4+x2+1)(x6+x2+x)S盒和逆S盒的关系一个表是另一个表的反查S盒详解-SubBytes变换的两个步骤 步一: 把S盒中的每个字节映射为它在有限域GF(28)中的乘法逆 步二:0110001111111000011111000011111000011111100011111100011111100011111100017654
26、321076543210bbbbbbbbbbbbbbbb例子“95”的乘法逆为“8a”,二进制表示为“10001010”结果为“00101010”,十六进制表示为“2a” 0010101001100011010010010110001110001010111110000111110000111110000111111000111111000111111000111111000176543210bbbbbbbb以输入“F5”为示例 1 ) 其 输 入 十 六 进 制 “ F 5 ” 对 应 二 进 制 为“11110101”,多项式为(x7+x6+x5+x4+x2+1),求其模f(x)=x8+x
27、4+x2+x+1的逆,即求b(x):(x7+x6+x5+x4+x2+1)b(x)1(mod f(x)通过多项式欧几里得扩展算法,求解得:( x7+ x6+ x5+ x4+ x2+ 1 ) ( x6+ x2+ x ) 1 mod(x8+x4+x3+x+1) 即:(x7+x6+x5+x4+x2+1)模(x8+x4+x3+x+1)的乘法逆元为x6+x2+x,即 F5的乘法逆元为46实例2)十六进制46其二进制为01000110,进行第2步的仿射变换,代入矩阵运算运行:即二进制结果为11100110,对应十六进制结果为“E6”, Subbyte原理(加密时)输入为m,其modp(x)的逆为m仿射变换y
28、=Am+b(解密时)则Am=y-bA-1Am=m =A-1(y-b)=A-1y-A-1b=A-1y+A-1b再求m modp(x)的逆为m仿射变换中的矩阵A为:0010010110010010010010011010010001010010001010011001010001001010A-1为:b为:1100011010100000A-1b为仿射变换中的两矩阵的关系0010010110010010010010011010010001010010001010011001010001001010=10000000010000000010000000010000000010000000010000
29、00001000000001验证A-1b00100101100100100100100110100100010100100010100110010100010010101010000011000110要想到,这也是在做有限域的乘法列混合中的两个矩阵0011223302030101010203010101020303010102cbcbcbcb验证AA-1=I对于矩阵ABC,如果C=AB,且A可逆,则A-1C=A-1AB=B一起看看标准fips-197DES扩散课堂练习,R0前四个比特全部翻转,一轮加密的扩散情况如何?第一轮扩散第一轮扩散第二轮扩散第二轮扩散DES扩散DES扩散思考:L0的一块数据(4比特)要几轮才能影响所有的数据块?S盒的扩散和混淆情况如何?第一轮扩散第二轮扩散AES扩散轮函数轮函数如果只有一轮,尝试破解!