今天花了一下午的時間學習密碼學的數論部分,下面將學到的內容進行一下總結,也算是加深記憶。我本身對密碼學這方面比較感興趣,而且本節出現了許多數學公式,使用剛剛學習的LaTex公式來呈現出來,練習練習,何樂而不為。
首先給出了群,交換群(阿貝爾群),環,交換環,整環,域的定義,大致如下圖所示:
涉及到的第一個重要的新概念就是有限域$GF(p)$ Galois Fields
有限域的元素個數是一個素數的冪$p^n$,n為正整數,一般記為$GF(p^n)$,我們最為關注的只有兩種情況:n=1即$GF(p)$;p為2即$GF(2^n)$。
$GF(p)$的空間是模p的完全剩余類$Z_p : \left\{0, 1, \cdots, p-1 \right\}$
$GF(2^n)$中的的元素是系數為二進制0和1的多項式,最高不超過n-1次。一個元素可以被表示成一個長度為n的位矢量。例如二進制數$11001_2$在$GF(2^5)$中可以記作$x^4+x^3+1$
這樣來看,$GF(p)$和$GF(2^n)$域中的元素都可以用多項式來表示,一個多項式可以被表示成如下形式:$$f(x)=a_{n}x^n+a_{n-1}x^{n-1}+\cdots+a_{1}x+a_0=\sum^n_{i=0}a_{i}x^i$$
下面是重頭戲,如何計算?針對三種不同的作用域我們定義了三種不同的多項式運算。
1.普通多項式運算。這個不必多說,從小學初中就開始學,就是我們認識的普通多項式。
2.系數在$Z_p$中的多項式運算。和普通多項式運算不同的是,系數要進行模p運算。模可以是任意素數,一般取二,是最簡單的情況。例如:$$f(x)=x^3+x^2+1,\ \ g(x)=x^2+x+1\\f(x)+g(x)=x^3+x,\ \ f(x)\times g(x)=x^5+x+1$$
可見多項式的系數在運算的時候進行了模2處理。
3.有限域$GF(2^n)$上的多項式運算。這種運算和計算機的運作方式很相似,對於一個有限域$GF(2^n)$我們定義如下要求:系數對2取模運算,最高次數小於n,多項式對n次素多項式取模運算。既然是域那就有逆元,可以用拓展歐幾里得算法求逆。
下面分別介紹在$GF(2^n)$上的四則運算:
1.加法(減法)
$GF(2^n)$上的加法即比特串的異或運算,因為是異或,加減其實是一樣的,都是異或而已。$$(x^2+1)+(x^2+x+1)=x\\101_2\oplus 111_2=010_2$$
2.乘法
乘法即比特串的移位和異或運算。實際運算的時候和普通乘法很像,只不過加法變成了異或。下面的運算用了一個小技巧,異或的結果只和參與異或的1的個數有關,奇數則為1,偶數則為0。$$\ \ \ 101\\ \underline{\times011}\\ \ \ \ 101\\ \ \underline{1010}\\ \ 1111$$
或者可以表示為$011_2\times 101_2=(101_2)<<1\oplus (101_2)<<0=1111_2$其中<<為移位符。
3.取模
讀者可能會好奇,為什么沒有除法。這是因為在$GF(2^n)$上取模運算就相當於除法啦。多項式取模有一個簡單的算法,重復用既約多項式剪掉最高次項。下面是一個極其簡單的例子。$$(x^3+x^2+x+1)mod(x^3+x+1)=x^2\\1111_2mod1011_2=1111_2\oplus 1011_2=100_2$$
這個例子過於簡單,如果用$(x^9+x^8+x^6+x^4+x^3+x^2+x+1)mod(x^4+x+1)$即$1101011111mod10011$有兩種做法,一種是在被除數后面補上三個0(除數四位 4-1=3),然后像做除法一樣除掉除數10011,如果最高位是1就添1,是零就直接寫0,最后得到余數0010。還有一種等價做法就是用除數的最高位和被除數的最高位對齊。減(異或)一次,然后繼續這個過程直到產生余數。
