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)中的不可約多項式



