素域和擴域

素域(prime field)

有限域也叫伽羅瓦域(galois field),指的是由有限個元素組成的集合,在這個集合內可以執行加、減、乘和逆運算。

而在密碼學中,我們只研究擁有有限個元素的域,也就是有限域。

  • 域中包含元素的個數稱爲域的階

  • 只有當\(m\)是一個素數冪時,即\(m=p^n\)(其中\(n\)爲正整數是\(p\)的次數,\(p\)爲素數),階爲\(m\)的域才存,\(p\)稱爲這個域的特徵

也就是說,有限域中元素的個數可以是11(p=11是一個素數,n=1)、可以是81(p=3是一個素數,n=4)、也可以是256(p=2是一個素數,n=8).....但有限域的中不可能擁有12個元素,因爲\(12=2·2·3\),因此12也不是一個素數冪。

有限域中最直觀的例子就是階爲素數的域,即\(m=p^n,(n=1)\)的域,域中的元素可以用整數\(\left \{0、1、...、p-1 \right \}\) 來表示。

域的兩種操作就是整數加法(模p)整數乘法(模p)\(p\)是一個素數,整數環\(Z\)表示爲\(GF(p)\),也成爲擁有素數個元素的素數域或者伽羅瓦域。

所以總結:素域就是有素數個元素的有限域,即階爲素數的有限域。

  • \(GF(p)\)中所有的非零元素都存在逆元

  • \(GF(p)\)內所有的運算都是模\(p\)實現的。

素域內的算數運算規則如下:

  • 加法和乘法都是通過模\(p\)實現的;

  • 任何一個元素\(a\)的加法逆元都是由\(a+(a的逆元)=0(mod p)\)得到的;

  • 任何一個非零元素\(a\)的乘法逆元定義爲\(a·a的逆元=1(mod p)\)

例:在素域\(GF(5)=\left \{0、1、2、3、4 \right \}\)中,2的加法逆元爲3,這是因爲\(2+(3)=5,5mod5=0\),所以\(2+3=5mod5=0\);2的乘法逆元爲3,這是因爲\(2·3=6,6mod5=1\),所以\(2·3=6mod5=1\)

在很多地方a的加法逆元用\(-a\)表示,a的乘法逆元用\(a^{-1}\)表示

注:\(GF(2)\)是一個非常重要的素域,也是存在的最小的有限域,由於\(GF(2)\)的加法,即模2加法與異或(XOR)門等價,\(GF(2)\)的乘法與邏輯與(AND)門等價。

加法:\(0+1=1;1+1=0;0+0=0\)

乘法:\(1\times 0=0;1\times 1=1;0\times 0=0\)

擴域(extension field)

如果有限域的階不是素數,則這樣的有限域內的加法和乘法運算就不能用模整數加法整數乘法模p表示。

階數不是素數,且大於1的有限域被稱爲擴展域

爲了處理擴展域,我們就要使用不同的符號表示擴展域內的元素,使用不同的規則執行擴展域內元素的算術運算。

例如在擴展域\(GF(2^m)\)中,元素並不是用整數表示的,而是用係數爲域\(GF(2)\)中元素的多項式表示,這個多項式最大階數(degree)爲m-1,所以每個元素共有m個係數。比如在AES算法使用的域\(GF(2^8)\)中,每個元素\(A\in GF(2^8)\)都可以表示爲:\(A(x)=a_7x^7+a_6x^6+...+a_1x+a_0,a_i\in GF(2)\)

注意:在域\(GF(2^8)\)中這樣的多項式共有256個,這256個多項式組成的集合就是擴展域\(GF(2^8)\),每個多項式都可以按一個8位向量的數值形式存儲:\(A=(a_7,a_6,...,a_1,a_0)\),像\(x^7,x^6,…x\)等因子都無需存儲,因爲從位的位置就可以清楚地判斷出每個係數對應的冪。

擴域\(GF(2^m)\)內的算數運算規則如下:

  • 加減法

例如在AES算法中的密鑰加法層中就使用了這部分的知識,但是不是很明顯,因爲我們通常把擴展域中的加法當作異或運算進行處理了,因爲在擴展域\(GF(2^m)\)中的加減法處理都是在底層域\(GF(2)\)內完成的,與按位異或運算等價。假設\(A(x)、B(x)∈GF(2^m)\),計算兩個元素之和的方法就是:

\(C(x)=A(x)+B(x)=\sum_{i=0}^{m-1}c_ix^i\),其中$c_i=(a_i+b_i)mod 2 $

兩個元素之差的計算公式就是:

\(C(x)=A(x)-B(x)=\sum_{i=0}^{m-1}C_ix^i\),其中$c_i=(a_i-b_i)mod 2=(a_i+b_i)mod 2 $

注:在減法運算中減號之所以變成加號,這就和二進制減法的性質有關了,從上述兩個公式中我們發現在擴展域中加法和減法等價,並且與XOR等價(異或運算也被稱作二進制加法)

二進制減法:\((0-1)mod 2=(0+1)mod 2=1;(1-1)mod2=(1+1)mod 2=0\)

  • 乘法

例如擴展域的乘法主要運用在AES算法的列混淆層(Mix Column)中,也是列混淆層中最重要的操作。

我們想將擴展域中的兩個元素用多項式形式展開,然後使用標準的多項式乘法規則將兩個多項式相乘:\(C(x)=A(x).B(x)=(a_{m-1}x^{m-1}+...+a_0).(b_{m-1}x^{m-1}+...+b_0)=c_{2m-2}x^{2m-2}+...+c_0\),其中\(c_0=(a_0.b_0)mod 2,c_1=(a_1.b_0+a_0.b_1)mod 2,...,c_{2m-2}=(a_{m-1}.b_{m-1})mod 2\)

注:通常在多項式乘法中\(C(x)\)的級數會大於\(m-1\),因此需要對此進行化簡,而化簡的基本思想與素域內乘法情況相似:在素域\(GF(p)\)中,將兩個整數相乘得到的結果除以一個素數,化簡後的結果就是最後的餘數。而在擴展域中進行的操作就是:將兩個多項式相乘的結果除以一個不可約多項式,最後的結果就是最後的餘數。(這裏的不可約多項式大致可以看作一個素數)

這裏是不是和多項式環\(R_q=Z_q[x]/(x^n+1)\)很像,留一個疑問:有什麼區別?

img

舉例:

img

參考

https://www.cnblogs.com/chenshikun/p/11667438.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章