1.有限域GF(2的8次方)
1.AES中的许多运算是按byte定义,一个byte=8个bit,还有是按字,一个4个字节的字=32bit
2.将字节看成有限域的一个元素,一个4个字节的字看程GF(28)中并且次数小于4的多项式
3.有限域的元素在本算法中采用传统的多项式表达式,GF(28)中的所有元素的系数为GF(2)中,且次数小于8的多项式
4.将 b7b6b5b4b3b2b1b0构成的一个字节看成多项式
b7x七次方+b6x六次方+。。。+b1x+b0,其中bi∈GF(2),0≤i≤7
5.例如:十六进制数'57'对应的二进制数为01010111,看成一个字节,对应的多项式为x6+x4+x2+x+1。采用的运算又加法,乘法和X乘运算
加法运算:
有限域GF(28)中的两个元素相加,结果是一个次数不超过7的多项式,其系数等于两个元素对应系数的模2加(比特异或)
有限域GF(28)中的两个元素加法与两个字节的按位模2加是一致的。
例如: 十六进制数表示:'57'+'83'='D4' 多项式表示为:(x6+x4+x2+x+1)=(x7+x+1)=x7+x6+x4+x2 二进制数表示为:01010111+10000011=11010100
乘法运算:
要计算有限域GF(28)上的乘法,必须先确定GF(2)上的八次不可约多项式
GF(28)上两个元素的乘积就是这两个多项式模乘(以此8此不可约多项式为模)。如果一个多项式除了1和自身没有其它因子,则就是不可约的。
对于AES,这个八次不可约多项式确定为m(x)=x8+x4+x3+x+1,十六进制表示为011b,二进制表示为0000000100011011
例如, 十六进制数表示'57'⊗'83' = 'C1' , 多项式表示 (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 (x13+x11+x9+x8+x6+x5+x4+x3+1)modm(x) =x7+x6+1
对于任何系数在二元域GF(2)中并且次数小于8的多项式b(x),可用推广的欧几里得算法得出 b(x)*a(x)+m(x)*c(x) = 1
即 a(x)b(x) = 1 mod m(x)
X乘运算:
(b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0)⨂x=b7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x 将上面的结果模m(x)求余得到x∙b(x)。
1.如果b7=0,则结果就是xb(x)
2.如果b7=1,则乘积结果先减去m(x),结果也为xb(x)
用x乘以一个多项式简称x乘
x(十六进制数表示为02)乘可以用字节内左移一位和紧接着一个1b的按位模2加来实现,该运算几位xtime运算。
2.系数在GF(28)上的多项式
多项式的系数可以定义为GF(28)中的元素,通过这个方法,四个字节构成的字可以表示为系数在GF(28)上的次数小于4的多项式,多项式的加法就是对应系数相加。GF(28)中的加法为按模2加,因此两个字节的加法就是按模2加。
乘法比较复杂,规定多项式的乘法运算必须要取模M(x)=x4+1,这样使得次数小于4的多项式的乘积仍然是一个次数小于4的多项式,将多项式的模乘运算计为⨂
例如:
设a(x)=a3x3+a2x2+a1x+a0和b(x)=b3x3+b2x2+b1x+b0为GF(28)上的两个多项式,
有 c(x)=a(x)⨂b(x)=c3x3+c2x2+c1x+c0 则 c0=a0∙b0⨁a3∙b1⨁a2∙b2⨁a1∙b3 c1=a1∙b0⨁a0∙b1⨁a3∙b2⨁a2∙b3
c2=a2∙b0⨁a1∙b1⨁a0∙b2⨁a3∙b3
c3=a3∙b0⨁a2∙b1⨁a1∙b2⨁a0∙b3
M(x)不是GF(28)中的不可约多项式