1. 程式人生 > >密碼學,有限域GF(2^8)乘法計算,不可約多項式為P(x)=x^8+x^4+x^3+x+1

密碼學,有限域GF(2^8)乘法計算,不可約多項式為P(x)=x^8+x^4+x^3+x+1

理論基礎:

  • C(x)=A(x)*B(x) mod P(x)
  • 二進位制數轉換為多項式:A(a7,a6,a5,a4,a3,a2,a1,a0)==>A(X)=a7x7+a6x6+a5x5+a4x4+a3x3+a2x2+a1x+a0,GF(28)內的最大值為(11111111)2==> x7+x6+x5+x4+x3+x2+x+1,P(x)=x8+x4+x3+x2+x+1==>(100011011)2=0x11B
  • X8 mod P(x)= x4+x3+x2+x+1——————x8除以P(x)的餘數
  • 異或運算:0⊕0=0,     0⊕1=1,  1⊕1=0
  • 有限域GF(2n)加法:C(x)=A(x)+B(x)=∑cixi(0≤i≤m-1),ci=ai+bi mod 2即ai⊕bi,A(x)=(am-1,…,a3,a2,a1,a0)2,B(x)=(bm-1,…,b3,b2,b1,b0)2
  • 定義xtime()運算:設A(x)∈GF(28),A(x)=a7x7+a6x6+a5x5+a4x4+a3x3+a2x2+a1x+a0對應的二進位制數為(a7,a6,a5,a4,a3,a2,a1,a0)則xtime(A(x))=x*A(x)= a7x8+a6x7+a5x6+a4x5+a3x4+a2x3+a1x2+a0x對應的二進位制數為(a7,a6,a5,a4,a3,a2,a1,a0,0)。將A(x)左移一位(最低位補0,原先的最高位刪除)的結果為(a6,a5,a4,a3,a2,a1,a0,0),如果a7=0,則A(x)左移一位的結果就是xtime(A(x))的值;如果a7=1,則A(x)左移一位的結果與0x1B逐位元異或(異或運算子⊕)即為xtime(A(x))的值。(a7=1時,x*A(x)的值超出GF(28),需要 模P(x),結果為A(x) 左移一位的結果為(a6,a5,a4,a3,a2,a1,a0,0)與0x1B逐位元異或的值)

例題:

例題1:

設0x64∈GF(28),求xtime(0x64)的值?
0x64轉換為二進位制數為(0110 0100)2,最高位a7=0,所以0x64左移一位的結果就是所求值,(0110 0100)2左移一位後的值為(110 01000)2

例題2:

在GF(28)中計算0x57*0x13的結果?
先將166進位制數轉換為二進位制數:0x57=(0101 0111)2,0x13=(0001 0011)2
將二進位制數轉換為多項式:0x13=x4+x+1
0x57*0x13=0x57*(x4+x+1)=0x57*x4+0x57*x+0x57
0x57*x就是xtime(0x57)=(1010 1110)2
0x57*x2就是xtime(0x57*x)=(0101 1100)+(0001 1011)=(0100 0111)2
同理0x57*x3=(10001110)2,,0x57*x4=(0000 0111)2
所以0x57*0x13=(00000111)2+(1010 1110)2+(0101 0111)2