今天花了一下午的時間學習密碼學的數論部分,下面將學到的內容進行一下總結,也算是加深記憶。我自己對密碼學這方面比較感興趣,並且本節出現了許多數學公式,使用剛剛學習的LaTex公式來呈現出來,練習練習,何樂而不爲。算法
首先給出了羣,交換羣(阿貝爾羣),環,交換環,整環,域的定義,大體以下圖所示:學習
涉及到的第一個重要的新概念就是有限域$GF(p)$ Galois Fieldsblog
有限域的元素個數是一個素數的冪$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$class
這樣來看,$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$$im
可見多項式的係數在運算的時候進行了模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。還有一種等價作法就是用除數的最高位和被除數的最高位對齊。減(異或)一次,而後繼續這個過程直到產生餘數。