1.GF(2)域上的多項(xiàng)式
在有限域GF(28)中的元素操作運(yùn)算可采用幾種不同的方法來(lái)表示,AES算法主要選擇傳統(tǒng)的多項(xiàng)式表示法進(jìn)行的。因?yàn)椴煌谋硎緦?duì)GF(28)的運(yùn)算復(fù)雜度是有影響的。
一個(gè)由b7b6b5b4b3b2b1b0組成的字節(jié)b可表示成系數(shù)為[0, 1]的二進(jìn)制多項(xiàng)式
b7x7 + b6x6 + b5x5 + b4x4 + b3x3 + b2x2 + b1x1 + b0
例如:十六進(jìn)制數(shù)“6B”對(duì)應(yīng)的二進(jìn)數(shù)為01101011,作為一個(gè)字節(jié)對(duì)應(yīng)于多項(xiàng)式為:
x6 + x5 + x3 + x + 1
1.1.多項(xiàng)式加法
在GF(28)上的加法定義為二進(jìn)制多項(xiàng)式的加法,其系數(shù)滿足模2加(即異或)。例如:“6B”和“71”的和為:6B + 71 = 1A,或采用多項(xiàng)式記法:
(x6 + x5 + x3 + x + 1) + (x6 + x5 + x4 +1) = x4 + x3 + x
顯然,多項(xiàng)式加法與以字節(jié)為單位的比特異或結(jié)果是一致的。
1.2.多項(xiàng)式的乘法
在GF(28)上的乘法(用符節(jié)“.”表示)定義為二進(jìn)制多項(xiàng)式的乘積以8次不可約多項(xiàng)式為模的積,此8次不可約多項(xiàng)式為:
m(x) = x8 + x4 + x3 + x + 1
十六進(jìn)制為“11B”,二進(jìn)制表示為100011011,此乘法在GF(28)上滿足結(jié)合律,且有一個(gè)本原元(“01”),例如:
(x6 + x5 + x3 + x + 1)·(x6 + x5 + x4 + 1)
= x12 + x8 + x6 + x5 + x4 + x + 1(mod m(x))
= x7 + x6 + x + 1
或者:6B·71 = C3
顯而易見,模的結(jié)果是一個(gè)低于8階的多項(xiàng)式,與加法不同的是,乘法并不是在字節(jié)上的簡(jiǎn)單運(yùn)算。
1.3.函數(shù)xtime()
函數(shù)xtime()定義為GF(28)上的x·b(x),若b7 = 0,則字節(jié)b左移一位;若b7 = 1,則字節(jié)b左移一位,再異或“1B”。
設(shè)b(x)為GF(28)域中次數(shù)小于8的多項(xiàng)式,由歐幾里德擴(kuò)充算法知,存在a(x)和c(x),滿足:
a(x)b(x) + c(x)m(x) = 1 ( 2 – 1 )
因此有: a(x)b(x)mod m(x) = 1 ( 2 – 2 )
或: a(x)b(x) = 1 mod(m(x)) ( 2 – 3 )
由此,我們可以獲得b(x)的逆元:b-1(x) = a(x) mod m(x)
假設(shè):b(x) = b7x7 + b6x6 + x5b5 + b4x4 + b3x3 + b2x2 + b1x1 + b0
若把b(x)乘上x,得到:x·b(x) = b7x8+ b6x7 + x5b6 + b4x5 + b3x4 + b2x3 + b1x2 + b0x
相乘的結(jié)果再與m(x)相模的結(jié)果有如下規(guī)律性:
若b7 = 0, 則(b(x)·x) mod m(x) = b(x) · x
若b7 = 0, 則(b(x)·x) mod m(x) = (b(x)·x) ⊕m(x)
由此,(b(x)·x) mod m(x)可以被認(rèn)為是先進(jìn)行字節(jié)的左移操作,根據(jù)移位結(jié)果對(duì)該字節(jié)與“1B”(m(x))進(jìn)行條件異或運(yùn)算不了。 這種類型的操作記為:b = xtime()。
例如:計(jì)算63·17 = 58
計(jì)算步驟如下:
63·17 = 63·(01 + 02 + 04 + 10)= 63·01 + 63·02 + 63 ·04 + 63·10
63·01 = xtime(63) = C6;(01100011, b7=0, 左移一位)
63·02 = xtime(C6) = 97;(11000110,b7=1,左移一位,異或1B)
63·04 = xtime(97) = 35;(10010111,b7=1,左移一位,異或1B)
63·10 = xtime(35) = 6A;(00110101,b7=0,左移一位)
所以,63·17 = 63·01 + 63·02 + 63 ·04 + 63·10
= 63 + C6 + 97 + 6A
=58
這樣,通過(guò)分解可將復(fù)雜的相乘操作轉(zhuǎn)化為簡(jiǎn)單的移位和異或操作。
2.GF(28)域上的多項(xiàng)式
在有限域GF(28)上的多項(xiàng)式系統(tǒng)定義為取自GF(28)元素的多項(xiàng)式,則一個(gè)4字節(jié)的字對(duì)應(yīng)于一個(gè)次數(shù)小于4的多項(xiàng)式。
2.1.加法運(yùn)算
GF(28)上的多項(xiàng)式的加法定義為對(duì)應(yīng)項(xiàng)系數(shù)相加,即兩個(gè)帶有系數(shù)的多項(xiàng)式之各等于相應(yīng)系數(shù)之和的多項(xiàng)式,在GF(28)上的和運(yùn)算等于異或運(yùn)算。
2.2.乘法運(yùn)算
帶有系數(shù)的多項(xiàng)式相乘與不帶系數(shù)的多項(xiàng)式相乘相比,稍為復(fù)雜一些。設(shè)在GF(28)上有兩個(gè)多項(xiàng)式:
a(x) = a3x3 + a2x2 + a1x + a0
b(x) = b3x3 + b2x2+ b1x + b0
兩者關(guān)于模x4+1的乘積為:c(x) = a(x) ⊕ b(x) = c3x3 + c2x2 + c1x + c0
其中系數(shù)由下面4個(gè)式子得到:
c0 = a0b0⊕a3b1⊕a2b2⊕a1b3
c1 = a1b0⊕a0b1⊕a3b2⊕a2b3
c2 = a2b0⊕a1b1⊕a0b2⊕a3b3
c3 = a3b0⊕a2b1⊕a1a2⊕a0b3
很顯然,一個(gè)固定多項(xiàng)式a(x)與多項(xiàng)式b(x)相乘所構(gòu)成的運(yùn)算可以用矩陣乘法表述:
c0 a0 a3 a2 a1 b0
c1 a1 a0 a3 a2 b1
c2 = a2 a1 a0 a3 b2
c3 a3 a2 a1 a0 b3
其中的矩陣是一個(gè)循環(huán)矩陣。應(yīng)當(dāng)注意,M(x) = x4 + 1 不是GF(28)上的不可約多項(xiàng)式(也不是GF(2)上的不可約多項(xiàng)式),因?yàn)閤4 + 1 = (x +1)(x3 + x2 + x +1)。所以,被一個(gè)固定多項(xiàng)式相乘的乘法不一定是可逆的。在AES算法中,乘法算法只限于乘一個(gè)固定的有逆元的多項(xiàng)式a3x3 +b2x2 +b1x + b0才能進(jìn)行乘法,從而保證乘法的可逆性。
在有限域GF(28)中的元素操作運(yùn)算可采用幾種不同的方法來(lái)表示,AES算法主要選擇傳統(tǒng)的多項(xiàng)式表示法進(jìn)行的。因?yàn)椴煌谋硎緦?duì)GF(28)的運(yùn)算復(fù)雜度是有影響的。
一個(gè)由b7b6b5b4b3b2b1b0組成的字節(jié)b可表示成系數(shù)為[0, 1]的二進(jìn)制多項(xiàng)式
b7x7 + b6x6 + b5x5 + b4x4 + b3x3 + b2x2 + b1x1 + b0
例如:十六進(jìn)制數(shù)“6B”對(duì)應(yīng)的二進(jìn)數(shù)為01101011,作為一個(gè)字節(jié)對(duì)應(yīng)于多項(xiàng)式為:
x6 + x5 + x3 + x + 1
1.1.多項(xiàng)式加法
在GF(28)上的加法定義為二進(jìn)制多項(xiàng)式的加法,其系數(shù)滿足模2加(即異或)。例如:“6B”和“71”的和為:6B + 71 = 1A,或采用多項(xiàng)式記法:
(x6 + x5 + x3 + x + 1) + (x6 + x5 + x4 +1) = x4 + x3 + x
顯然,多項(xiàng)式加法與以字節(jié)為單位的比特異或結(jié)果是一致的。
1.2.多項(xiàng)式的乘法
在GF(28)上的乘法(用符節(jié)“.”表示)定義為二進(jìn)制多項(xiàng)式的乘積以8次不可約多項(xiàng)式為模的積,此8次不可約多項(xiàng)式為:
m(x) = x8 + x4 + x3 + x + 1
十六進(jìn)制為“11B”,二進(jìn)制表示為100011011,此乘法在GF(28)上滿足結(jié)合律,且有一個(gè)本原元(“01”),例如:
(x6 + x5 + x3 + x + 1)·(x6 + x5 + x4 + 1)
= x12 + x8 + x6 + x5 + x4 + x + 1(mod m(x))
= x7 + x6 + x + 1
或者:6B·71 = C3
顯而易見,模的結(jié)果是一個(gè)低于8階的多項(xiàng)式,與加法不同的是,乘法并不是在字節(jié)上的簡(jiǎn)單運(yùn)算。
1.3.函數(shù)xtime()
函數(shù)xtime()定義為GF(28)上的x·b(x),若b7 = 0,則字節(jié)b左移一位;若b7 = 1,則字節(jié)b左移一位,再異或“1B”。
設(shè)b(x)為GF(28)域中次數(shù)小于8的多項(xiàng)式,由歐幾里德擴(kuò)充算法知,存在a(x)和c(x),滿足:
a(x)b(x) + c(x)m(x) = 1 ( 2 – 1 )
因此有: a(x)b(x)mod m(x) = 1 ( 2 – 2 )
或: a(x)b(x) = 1 mod(m(x)) ( 2 – 3 )
由此,我們可以獲得b(x)的逆元:b-1(x) = a(x) mod m(x)
假設(shè):b(x) = b7x7 + b6x6 + x5b5 + b4x4 + b3x3 + b2x2 + b1x1 + b0
若把b(x)乘上x,得到:x·b(x) = b7x8+ b6x7 + x5b6 + b4x5 + b3x4 + b2x3 + b1x2 + b0x
相乘的結(jié)果再與m(x)相模的結(jié)果有如下規(guī)律性:
若b7 = 0, 則(b(x)·x) mod m(x) = b(x) · x
若b7 = 0, 則(b(x)·x) mod m(x) = (b(x)·x) ⊕m(x)
由此,(b(x)·x) mod m(x)可以被認(rèn)為是先進(jìn)行字節(jié)的左移操作,根據(jù)移位結(jié)果對(duì)該字節(jié)與“1B”(m(x))進(jìn)行條件異或運(yùn)算不了。 這種類型的操作記為:b = xtime()。
例如:計(jì)算63·17 = 58
計(jì)算步驟如下:
63·17 = 63·(01 + 02 + 04 + 10)= 63·01 + 63·02 + 63 ·04 + 63·10
63·01 = xtime(63) = C6;(01100011, b7=0, 左移一位)
63·02 = xtime(C6) = 97;(11000110,b7=1,左移一位,異或1B)
63·04 = xtime(97) = 35;(10010111,b7=1,左移一位,異或1B)
63·10 = xtime(35) = 6A;(00110101,b7=0,左移一位)
所以,63·17 = 63·01 + 63·02 + 63 ·04 + 63·10
= 63 + C6 + 97 + 6A
=58
這樣,通過(guò)分解可將復(fù)雜的相乘操作轉(zhuǎn)化為簡(jiǎn)單的移位和異或操作。
2.GF(28)域上的多項(xiàng)式
在有限域GF(28)上的多項(xiàng)式系統(tǒng)定義為取自GF(28)元素的多項(xiàng)式,則一個(gè)4字節(jié)的字對(duì)應(yīng)于一個(gè)次數(shù)小于4的多項(xiàng)式。
2.1.加法運(yùn)算
GF(28)上的多項(xiàng)式的加法定義為對(duì)應(yīng)項(xiàng)系數(shù)相加,即兩個(gè)帶有系數(shù)的多項(xiàng)式之各等于相應(yīng)系數(shù)之和的多項(xiàng)式,在GF(28)上的和運(yùn)算等于異或運(yùn)算。
2.2.乘法運(yùn)算
帶有系數(shù)的多項(xiàng)式相乘與不帶系數(shù)的多項(xiàng)式相乘相比,稍為復(fù)雜一些。設(shè)在GF(28)上有兩個(gè)多項(xiàng)式:
a(x) = a3x3 + a2x2 + a1x + a0
b(x) = b3x3 + b2x2+ b1x + b0
兩者關(guān)于模x4+1的乘積為:c(x) = a(x) ⊕ b(x) = c3x3 + c2x2 + c1x + c0
其中系數(shù)由下面4個(gè)式子得到:
c0 = a0b0⊕a3b1⊕a2b2⊕a1b3
c1 = a1b0⊕a0b1⊕a3b2⊕a2b3
c2 = a2b0⊕a1b1⊕a0b2⊕a3b3
c3 = a3b0⊕a2b1⊕a1a2⊕a0b3
很顯然,一個(gè)固定多項(xiàng)式a(x)與多項(xiàng)式b(x)相乘所構(gòu)成的運(yùn)算可以用矩陣乘法表述:
c0 a0 a3 a2 a1 b0
c1 a1 a0 a3 a2 b1
c2 = a2 a1 a0 a3 b2
c3 a3 a2 a1 a0 b3
其中的矩陣是一個(gè)循環(huán)矩陣。應(yīng)當(dāng)注意,M(x) = x4 + 1 不是GF(28)上的不可約多項(xiàng)式(也不是GF(2)上的不可約多項(xiàng)式),因?yàn)閤4 + 1 = (x +1)(x3 + x2 + x +1)。所以,被一個(gè)固定多項(xiàng)式相乘的乘法不一定是可逆的。在AES算法中,乘法算法只限于乘一個(gè)固定的有逆元的多項(xiàng)式a3x3 +b2x2 +b1x + b0才能進(jìn)行乘法,從而保證乘法的可逆性。