密碼學中的一些數學基礎

weixin_33809981發表於2018-04-10

宣告:本篇博文的內容摘自於《密碼編碼學與網路安全》這本書。

群、環和域都是數學理論中的一個分支,即抽象代數或稱為近世代數的基本元素。在抽象代數中,我們關心的是其元素能進行代數運算的集合,也就是說,我們可以通過很多種方法,使集合上的兩個元素組合得到集合中的第三個元素。這些運算方法都遵守特殊的規則,而這些規則又能確定集合的性質。根據約定,集合上元素的兩種主要運算子號與普通數字的加法和乘法所使用的符號是相同的。然而,我們必須指出,在抽象代數中,我們並不僅僅限於普通的算術操作。

群G,有時記為{G, . },是定義了一個二元運算的集合,這個二元運算可表示為 . ,G中的每一個序偶(a,b)通過運算生成G中的元素(a.b),並滿足以下公理: (A1)封閉性:如果a和b都屬於G,則a.b也屬於G。 (A2)結合律:對於G中任意a,b,c,都有(a.b).c=a.(b.c)成立。 (A3)單位元:G中存在一個元素e,對於G中任意元素a,都有a.e=e.a=a。 (A4)逆元:對於G中任意元素a,G中都存在一個元素a',使得下式成立:a.a'=a'.a=e 如果一個群的元素是有限的,則該群稱為有限群,並且群的階就等於群中元素的個數。否則,稱該群為無限群。 一個群如果還滿足以下條件,則稱為交換群: (A5)交換律:對於G中任意的元素a,b,都有a.b=b.a成立。

迴圈群

我們在群中定義求冪運算為重複運用群中的運算,如a3=a.a.a。而且,我們定義a0=e作為單位元;並且a-n=(a')n,其中a'是a在群內的逆元算。如果群G中的每一個元素都是一個固定元素a(a屬於G)的冪ak(k為整數),則稱群G是迴圈群。我們認為元素a生成了群G,或者說a是群G的生成元。迴圈群總是交換群,它可能是有限群或無限群。

環R,有時記為{R,+,x},是一個有兩個二元運算的集合,這兩個二元運算分別稱為加法和乘法,且對於R中的任意元素a,b,c滿足以下公理。 (A1~A5)R關於加法是一個交換群;也就是說,R滿足從A1到A5的所有原則。對於此種情況下的加法群,我們用0表示其單位元,-a表示a的逆元。 (M1)乘法的封閉性:如果a和b都屬於R,則ab也屬於R。 (M2)乘法的結合律:對於R中的任意元素a,b,c,有a(bc)=(ab)c成立。 (M3)分配律:對於R中的任意元素a,b,c,下面兩個式子總成立: a(b+c)=ab+ac (a+b)c=ac+bc 本質上說,環就是一個集合,我們可以在其上進行加法、減法[a-b=a+(-b)]和乘法而不脫離該集合。 環如果還滿足以下條件,則稱為交換環。 (M4)乘法的交換律:對於R中任意元素a,b,有ab=ba成立。 下面,我們定義整環,它是滿足以下公理的交換環: (M5)乘法單位元:在R中存在元素1,使得對於R中的任意元素a,有a1=1a=a成立。 (M6)無零因子:如果有R中元素a,b,且ab=0,則必有a=0或b=0。

這裡簡單總結一下,群是定義了一個二元運算的集合而環是定義了兩個二元運算的集合。迴圈群是由一個元素生成的集合。

域F,有時記為{F,+,x},是有兩個二元運算的集合,這兩個二元運算分別稱為加法和乘法,且對於F中的任意元素a,b,c 滿足以下公理: (A1~M6)F是一個整環;也就是說F滿足從A1到A5以及從M1到M6的所有原則。 (M7)乘法逆元:對於F中的任意元素a(除0以外),F中都存在一個元素a-1使得下式成立: aa-1=(a-1)a=1;

注意:乘法逆元是域中的概念。 本質上說,域就是一個集合,我們可以在其上進行加法、減法、乘法和除法而不脫離該集合。除法又按以下規則來定義:a/b=a(b-1)。

有限域GF( p )

無限域在密碼學中沒有特別的意義,然而,有限域卻在許多密碼學演算法中扮演著重要的角色。有限域的階(元素的個數)必須是一個素數的冪pn,n為正整數。階為pn的有限域一般記為GF(pn),GF代表Galois域,以第一位研究有限域的數學家的名字命名。我們在此要關注兩種特殊的情形:n=1時的有限域GF(p),它和n>1的有限域相比有著不同的結構。

階為p的有限域

模算術是一種整數算術,它將所有整數約減為一個固定的集合[0,1,... ,n-1],其中n為某個整數。任何這個集合外的整數通過除以n取餘數的方式約減到這個範圍內。 在此之前先複習一下模運算:

模數

如果a是整數,n是正整數,則我們定義a模n是a除以n所得的餘數。整數n稱為模數。因此,對於任意整數a,我們總可以寫出 a=qn+r 0<=r<n ; q=[a/n] a=[a/n]*n+(a mod n)

11 mod 7=4; -11 mod 7=3

如果(a mod n)=(b mod n),則我們稱整數a和b是模n同餘的。可以表示為a同餘b

同餘的性質

模運算有如下性質: (1)如果n|(a-b),那麼a與b模n同餘。 (2)a與b模n同餘隱含b與a模n同餘。 (3)a與b模n同餘並且b與c模n同餘,那麼隱含a與c模n同餘。

運算(mod n)將所有的整數對映到集合{0,1,...,(n-1)}

模運算的性質

定義比n小的非負整數集合為Zn: Zn={0,1,...,(n-1)}這個集合被稱為剩餘類集,或模n的剩餘類。更準確地說,Zn中每一個整數都代表一個剩餘類,我們可以將模n的剩餘類表示為[0],[1],[2],...,[n-1],其中 [r]={a:a是一個整數,a同餘r(mod n)}

比如模4的剩餘類為: [0]={...,-16,-12,-8,-4,0,4,8,12,16,....} [1]={...,-15,-11,-7,-3,1,5,9,13,17,...} 在剩餘類的所有整數中,我們通常用最小非負整數來代表這個剩餘類。尋找與k是模n同餘的最小非負整數的過程,稱為模n的k約化。

Zn(是有乘法單位元的交換環)中整數運算的性質: 交換律:(w+x)mod n =(x+w) mod n (w * x) mod n =(x * w) mod n 結合律:[(w+x)+y] mod n=[w+(x+y)] mod n [(wx)y] mod n=[w(xy)] mod n 分配律:[w*(x+y)] mod n=[(wx)+(wy)] mod n 單位元:(0+w) mod n =w mod n (1*w) mod n=w mod n 加法逆元(-w):對於Zn中的任意w,存在一個z使得w+z同餘0 mod n。

令a與n互素,如果(ab)同餘(ac)(mod n),那麼b同餘c (mod n) 。

對於任何一般的模數n,如果a和n有任何公因子的話,用乘數a依次作用於0到n-1的所有整數將不會產生一個完整剩餘類集。一般來說,如果一個整數與n互素,那麼它在Zn中有一個乘法逆元。 給定一個素數p,元素個數為p的有限域GF(p)被定義為整數{0,1,...,p-1}的集合Zp,其運算為模p的算術運算。

在GF(p)中求乘法逆元

當p值較小時,求GF(p)中元素的乘法逆元很容易。你只需構造一個乘法表,所要的結果可以從中直接讀出。但是,當p值比較大時,這種方法是不切實際的。

如果a和b互素,則b有模a的乘法逆元。也就是說,如果gcd(a,b)=1,那麼b有模a的乘法逆元。即對於正整數b<a,存在b-1<a使bb-1=1 mod a。如果a是素數並且b<a,則顯然a和b互素,且其最大公因子為1。運用擴充套件的Euclid演算法容易計算b-1

更一般地,對於任意的n,擴充套件Euclid演算法可以用於求取Zn內的乘法逆元。如果運用擴充套件Euclid演算法於方程nx+by=d,並且得到d=1,則在Zn內有y=b-1

在本節中,我們說明了如何構造階為p的有限域,其中p為素數。特別地,我們定義GF(p)具有如下性質: (1)GF(p)由p個元素組成 (2)集合上定義了二元運算子+和x。加、減、乘、除可以在集合內進行。除了0外,集合內的其他元素都有乘法逆。 我們說明了GF(p)的元素是整數{0,1,...,p-1},算術運算是模p的加法和乘法。

多項式運算

單變元多項式運算分為三種: 1.使用代數基本規則的普通多項式運算。 2.係數運算是模p運算的多項式運算,即係數在GF(p)中。 3.係數在GF(p)中,且多項式被定義為模一個n次多項式m(x)的多項式運算。

普通多項式運算

一個n次多項式(n>=0)的表達形式如下: f(x)=anxn+an-1xn-1+....+aixi+a1x+a0 其中ai是某個指定數集S中的元素,該數集稱為係數集,且an!=0。我們稱f(x)是定義在係數集S上的多項式。

零次多項式稱為常數多項式,僅僅是係數集裡的一個元素。如果an=1,那麼對應的n次多項式就被稱為首1多項式。

多項式運算包含加法、減法和乘法,這些運算是把變數x當做集合S中的一個元素來定義的。除法也以類似的方式定義,但這時要求S是域。這些域包括 實數域、有理數域和素數p的域Zn。注意整數集並不是域,也不支援多項式除法運算。

係數在Zp中的多項式運算

現在我們考慮這樣的多項式,它的係數是域F的元素。我們稱其為域F上的多項式。這種情況下,容易看出這樣的多項式集合是一個環,稱為多項式環。也 就是說,如果我們把每個不同的多項式視為集合中的元素,這個集合是一個環。 對域上的多項式進行多項式運算時,除法運算是可能的。注意這並不是說能進行整除。這裡要注意不同的域上的除法的運算規則不同。如果試圖在非域係數集 上進行多項式除法,我們會發現除法運算並不總是有定義的。即使係數集是一個域,多項式除法也不一定是整除。一般說來,除法會產生一個商式和一個餘式。 對於域上的多項式,給定n次多項式f(x)和m(m<=n)次多項式g(x),如果用g(x)除f(x),我們得到一個商q(x)和一個餘數r(x),滿足如下關係式: f(x)=q(x)g(x)+r(x) 各多項式的次數為: Degree f(x)=n Degree g(x)=m Degree q(x)=n-m Degree r(x)<=m-1. 如果允許餘數,我們說域上多項式除法是可以的。

域F上的多項式f(x)被稱為不可約的(既約的)當且僅當f(x)不能表示為兩個多項式的積[兩個多項式都在F上,次數都低於f(x)的次數]。與整數相似,一個不可約多項式也被稱為素多項式。約的時候注意多項式整除的意義,在不同的域上運算是不一樣的。

求最大公因式

我們可以通過定義最大公因式來擴充套件域上的多項式運算和整數運算之間的相似性。如果 (1)c(x)能同時整除a(x)和b(x) (2)a(x)和b(x)的任何公共因式都是c(x)的因式。 就稱多項式c(x)為a(x)和b(x)的最大公因式。

本節我們討論了一般多項式的算術。在一般多項式算術裡,變數不予賦值,即我們不給多項式的變數賦值。相反,運用代數的一般規則對多項式進行算術操作(加、減、乘、除)。除非係數是域的元素,否則多項式除法是不行的。

有限域 GF(2n)

有限域的元素個數必須為pn,其中p為素數,n為正整數。注意到,當n>1時,pn上的多項式在模pn運算時並不能產生一個域。

實際上所有的加密演算法(包括對稱金鑰和公開密碼演算法)都涉及整數集上的算術運算。如果某種演算法使用的運算之一是除法,那麼我們就必須使用定義在域上的運算。為了方便使用和提高效率,我們希望這個整數集中的數與給定的二進位制位數所能表達的資訊一一對應而不出現浪費。也就是說,我們希望這個整數集的範圍從0到2n-1,這樣正好對應一個n位的字。

我們要尋找一個包含2n個元素的集合,其上定義了加法和乘法使之成為一個域。我們給集合的每一個元素賦值為0~2n-1之間的唯一整數。請記住我們不會用模算術,因為那樣不能構成域。我們將會用多項式算術來構造我們需要的域。

多項式模運算

設集合S由域Zp上次數小於等於n-1的所有多項式組成。每一個多項式具有如下形式: f(x)=an-1xn-1+an-2xn-2+.....+a1x+a0 其中,ai在集合{0,1,...,p-1}上取值。S中共有pn個不同的多項式。如果定義了合適的運算,那麼每一個這樣的集合S都是一個 有限域。定義由如下幾條組成: (1)該運算遵循代數基本規則中的普通多項式運算規則及如下兩條限制。 (2)係數運算以p為模,即遵循有限域Zp上的運算規則。 (3)如果乘法運算的結果是次數大於n-1的多項式,那麼必須將其除以某個次數為n的既約多項式m(x)並取餘式。對於多項式f(x),這個餘數 可表示為r(x)=f(x) mod m(x)。 高階加密標準(AES)使用有限域GF(28)上的運算,其中既約多項式m(x)=x8+x4+x3+x+1. 和簡單模運算類似,多項式模運算中也有剩餘類集合的概念。設m(x)為n次多項式,則模m(x)剩餘類集合有pn個元素,其中每個元素 都可以表示成一個m次多項式( m<n)。

以n次既約多項式m(x)為模的所有多項式組成的集合是一個有限域,所有具有相同階的有限域都是同構的,即任意兩個具有相同階的有限域具有相同 的結構,但是元素的表示和標記可能不同。

求乘法逆元

正如Euclid演算法可以用來求兩個多項式的最大公因式,擴充套件Euclid演算法則可以用來求一個多項式的乘法逆元。如果多項式b(x)的次數小於a(x)的次數 且gcd[a(x),b(x)]=1,那麼該演算法能求出b(x)以a(x)為模的乘法逆元。若a(x)為既約多項式,即除了本身與1之外沒有其他因式,則始終有gcd[a(x),b(x)]=1. 演算法的描述方式和整數情形的擴充套件Euclid演算法一樣。給定兩個多項式a(x)和b(x),其中a(x)的次數大於b(x)的次數。我們希望解如下方程獲得v(x),w(x)以及 d(x),其中d(x)=gcd[a(x),b(x)] : a(x)v(x)+b(x)w(x)=d(x) 如果d(x)=1,則w(x)是b(x)模a(x)的乘法逆。

計算上的考慮

GF(2n)中的多項式 f(x)=an-1xn-1+an-2xn-2+...+a1x+a0 可以由它的n個二進位制係數(an-1an-2...a0) 唯一地表示。因此GF(2n)中的每個多項式都可以表示成 一個n位的二進位制整數。

加法

我們發現這裡的多項式加法是將相應的係數分別相加,而對於Z2上的多項式,加法其實就是異或(XOR)運算。所以,GF(2n)中的 兩個多項式加法等同於按位異或運算。

乘法

簡單的異或運算不能完成GF(2n)上的乘法。但是可以使用一種相當直觀且容易實現的技巧。 一般地,在GF(2n)上對於n次多項式p(x),有xn mod p(x) =p(x)-xn

在GF(2)中,模2的加法和減法是等價的,加法等價於XOR運算,乘法等價於邏輯與運算。

現在考慮GF(28)上的多項式f(x)=b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0,將它乘以x,可得 xf(x)=(b7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x) mod m(x) 如果b7=0,那麼結果就是一個次數小於8的多項式,已經是約化後的形式,不需要進一步計算。如果b7=1,那麼可以使用xn mod p(x) =p(x)-xn進行模m(x)的約化: xf(x)=(b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x) +(x4+x3+x+1) 這表明乘以x(即00000010)的運算可以通過左移一位後再根據條件按位異或(00011011)來實現。總結為如下的公式:

乘以x的更高次冪可以通過重複使用上式來實現。這樣一來,GF(28)上的乘法可以用多箇中間結果相加的方法實現。

使用生成元

定義有限域GF(2n)的另一種等價方式有時更方便,它使用相同的不可約多項式。首先,我們需要兩個定義:階為q的有限域F的生成元是一個元素,記為g,該元素的前q-1個冪構成了F的所有非零元素,即域F的元素為0,g0, .... ,gq-2。 考慮由多項式f(x)定義的域F,如果F內的一個元素b滿足f(b)=0,則稱b為多項式的f(x)的根。(這裡注意不是要求這個方程的數值解,只是處理多項式算術) 最後,可以證明一個不可約多項式的根g是這個不可約多項式定義的有限域的生成元。

通常,對於由不可約多項式f(x)生成的域GF(2n),有gn=f(g)-gn。計算gn+1 到g2n-2的值。域的元素對應g的方冪:g0到g2n-2,另外再加上0元素。域元素的乘法用等式gk=gk mod (2n-1)進行,k為任意整數。

寫在最後

這篇文章的內容摘自《密碼編碼學與網路安全》這本書,最後,我要強調的是GF(28)有限域的運算一定要搞懂,因為在寫AES演算法以及除錯AES演算法時我們會用到。

相關文章