【密码学基础】05 有限域

  近世代数,也称抽象代数,是研究各种抽象的公理化代数系统的数学学科。群、环、域是近世代数中的基本元素,而有限域即为域代数结构的一种。有限域是密码学中十分重要的一种数学工具,高级加密标准AES和椭圆曲线加密算法就利用了有限域良好的性质。下面就介绍一下有限域中的一些基本概念。

更新历史:

  • 2021年08月02日完成初稿

1. 代数基本概念

1.1 代数系统

  代数是数学的其中一门分支,主要由初等代数和抽象代数组成,初等代数学主要研究方程组,而抽象代数则是研究代数系统上的运算和公理。代数系统主要有两部分组成:

  • 成分:运算及其载体,即运算和运算的对象
  • 公理:运算性质,即交换律、结合律等算律

  举例而言,小学中学习的1+2=3,其中运算就是加法(这里用+表示),加法运算的对象是1、2,由于加法运算需要两个运算对象,因此加法也是一种二元运算。很明显,1+2=2+1,因此运算对象可以交换在运算中的位置,因此满足交换律,这就是加法运算的基本算律。

  其中公理是很好理解的,但代数系统的成分容易理解但不好表达,下面从中抽象出一些共性,并用数学语言进行概况有:

  • 运算对象:用集合表示运算对象和运算的结果,比如集合A、B、X、Y等
  • 运算:用 + , − , × , ⋅ , ∘ +, -,\times, \cdot, \circ +,,×,,等运算符号表示运算,它们不具有任何一种运算,仅仅是一种符号表示。

  因此我们可以给出一些运算的定义:

  • n元运算的数学定义:给定集合 A 1 , A 2 , . . . , A n A_1, A_2, ..., A_n A1,A2,...,An和集合 B B B,那么映射 f : A 1 × A 2 × . . . × A n → B f:A_1\times A_2\times ...\times A_n\rightarrow B f:A1×A2×...×AnB即表示一个n元运算。

笛卡尔乘积
  上述的 A 1 × A 2 × . . . × A n A_1\times A_2\times ...\times A_n A1×A2×...×An称为笛卡尔乘积,其是由基本集合 A 1 , A 2 , . . . , A n A_1, A_2, ..., A_n A1,A2,...,An共同构成的集合,该集合中的任意元素是一个n元组 ( a 1 , a 2 , . . . , a n ) , ∀ a i ∈ A i (a_1, a_2, ..., a_n), \forall a_i \in A_i (a1,a2,...,an),aiAi。典型地,直角坐标系 ( x , y ) (x,y) (x,y)就是一个二元组。

   根据运算所需的运算对象的个数,运算称为0元运算、一元运算、二元运算等。

集合 二元运算 一元运算 0元运算
整数 Z Z Z,有理数 Q Q Q,实数 R R R + , × +, \times +,× − - (取相反数) 0 , 1 0,1 0,1
n阶实数矩阵 M n ( R ) M_n(R) Mn(R) + , × +, \times +,× A T A^T AT(取转置矩阵) 单位矩阵 E E E
集合组成的集合 P ( B ) P(B) P(B) ∪ , ∩ \cup, \cap , S c S^c Sc(取补集) 取空集 ⊘ \oslash

  而讨论最多的就是下面的一种二元运算:

  • 集合A上的运算:设A为集合,称二元运算 f : A × A → A f:A\times A \rightarrow A f:A×AA为集合A上的二元运算。进一步地,若A​中任何元素都可参与运算,且结果属于集合A,那么称运算 f f f是封闭的

  设 + , × +, \times +,×是集合A上的二元运算,称为加法和乘法,那么有下面的运算规律和特异元素(指单位元和逆元):

  • 交换律:若 ∀ a , b ∈ A \forall a, b\in A a,bA a + b = b + a a+b=b+a a+b=b+a,则称有加法交换律,同理有乘法交换律
  • 结合律:若 ∀ a , b , c ∈ A \forall a, b, c\in A a,b,cA a + ( b + c ) = ( a + b ) + c a+(b+c)=(a+b)+c a+(b+c)=(a+b)+c,则称有加法结合律,同理有乘法结合律
  • 消去律:若 ∀ a , b , c ∈ A \forall a, b, c\in A a,b,cA a + b = a + c ⇒ b = c a+b=a+c\Rightarrow b=c a+b=a+cb=c,则称有加法消去律,同理有乘法消去律
  • 乘法对加法的分配律:若 ∀ a , b , c ∈ A \forall a, b, c\in A a,b,cA a × ( b + c ) = a × b + a × c a\times (b+c)=a\times b+a\times c a×(b+c)=a×b+a×c,则称乘法对加法具有分配律
  • 单位元:单位元 e e e满足 e ∈ A ,    ∀ a ∈ A e\in A,\;\forall a\in A eA,aA a + e = e + a = a a+e=e+a=a a+e=e+a=a,则称有加法单位元,同理有乘法单位元
  • 逆元:对于 x ∈ A x\in A xA ∃ y ∈ A \exists y \in A yA使得 x + y = e x+y=e x+y=e,则称有 x x x有加法逆元 y y y y y y的加法逆元为 x x x),同理有乘法逆元

  值得注意的是,算律、单位元和逆元是针对运算来说的,如果代数结构中有多种运算,那么对于不同的运算可能就有不同的运算规律和单位元和逆元。

加法和乘法
  理解文章中提及的加法和乘法不是通常意义上的加减乘除中的加法和乘法,而是一般性的算术符号,用 + , × +, \times +,×表示只是为了方便,用 ⋅ , ∘ \cdot, \circ ,等符号表示同样没有问题。在近世代数的学习中切忌利用熟知的数学知识来思考群环域的构成,在群环域中的运算符仅仅是一些满足一些算律的符号,而不是特定的算术符号。

  下面就基于上述概念介绍群环域等基本概念。

1.2 群、环、域基本概念

1.2.1 群

  群(Groups)是一种具有一个二元运算的代数系统,通常记作 < G , ∘ > <G, \circ> <G,>,简记为 G G G,其满足以下条件:

  • 封闭性 ∀ a , b ∈ G \forall a, b \in G a,bG,都有 a ∘ b ∈ G a\circ b\in G abG
  • 结合律 ∀ a , b , c ∈ G \forall a, b, c \in G a,b,cG,都有 a ∘ ( b ∘ c ) = ( a ∘ b ) ∘ c a\circ (b\circ c) = (a\circ b)\circ c a(bc)=(ab)c
  • 单位元 ∃ e ∈ G \exists e\in G eG使得 a ∈ G a\in G aG,有 a ∘ e = e ∘ a = a a\circ e=e\circ a=a ae=ea=a,单位元也称幺元
  • 逆元 ∀ a ∈ G \forall a\in G aG a a a都存在一个逆元 a − 1 a^{-1} a1使得 a ∘ a − 1 = e a\circ a^{-1}=e aa1=e

  由于有逆元,因此群也满足消去律。举个例子,整数集合上的加法运算构成的代数系统 < Z , + > <Z, +> <Z,+>就是一个群,因为整数和整数相加也是整数,整数加法满足结合律,其单位元为0,任意元素的逆元是其相反数。

  进一步地,在群的基础上,如果增加一些条件那么就可以形成具有更多良好性质的群。

  • 半群:若 < G , ∘ > <G, \circ> <G,>只满足封闭性和结合律,那么 < G , ∘ > <G, \circ> <G,>是一个半群
  • 含幺半群:若 < G , ∘ > <G, \circ> <G,>只满足封闭性、结合律和单位元,那么 < G , ∘ > <G, \circ> <G,>是一个含幺半群(也称幺半群)
  • 有限群和无限群:若一个群的元素是有限的,则该群称为有限群,并且群的阶等于群中元素的个数,否则称该群为无限群。
  • 交换群:若对于群中任意运算还满足交换律,那么该群称为交换群
  • 循环群:记群中的幂运算 a n = a ∘ a ∘ . . . ∘ a a^n=a\circ a\circ ...\circ a an=aa...a(n个a相乘),且有 a 0 = e , a − n = ( a − 1 ) n a^0=e, a^{-n}=(a^{-1})^n a0=e,an=(a1)n,那么如果群G中的每个元素都是有一个固定元素 a ∈ G a\in G aG的幂,那么称群G​是循环群

  显然循环群是交换群,但循环群可能是有限群,也可能是无限群。

1.2.2 环

  环(Rings)是一个具有两个二元运算(通常称为加法和乘法)的代数系统,常记作 < R , + , × > <R, +, \times> <R,+,×>,简记为 R R R,其满足以下条件:

  • < R , + > <R, +> <R,+>是加法交换群,此时用 0 0 0表示其加法单位元, − a -a a表示环中元素 a a a的加法逆元
  • < R , × > <R, \times> <R,×>是半群
  • 乘法对加法具有分配律: ∀ a , b , c ∈ R \forall a, b, c\in R a,b,cR a × ( b + c ) = a × b + a × c a\times (b+c)=a\times b+a\times c a×(b+c)=a×b+a×c

  由于加法一定有逆元,因此通过加法可以定义减法: a − b = a + ( − b ) a-b=a+(-b) ab=a+(b),同时若不会引起歧义,那么环中的乘法 a × b a\times b a×b也可记为 a b ab ab。进一步地,如果环还满足其他性质,那么可以形成具有更多性质的环:

  • 交换环:若环R中的乘法满足交换律,那么环R是一个交换环
  • 整环:如果环R满足下面两个条件,那么环R称为整环:
    • 乘法单位元:环中的乘法有单位元,即 < R , × > <R, \times> <R,×>是含幺半群,此时其单位元记作 1 1 1
    • 无零因子:环中元素 a , b a,b a,b称为零因子当且仅当 a , b ≠ 0 a,b\ne 0 a,b=0 a b = 0 ab=0 ab=0,因此环中无零因子则有 ∀ a , b ∈ R \forall a, b \in R a,bR,若 a b = 0 ab=0 ab=0,那么必有 a = 0 a=0 a=0或者 b = 0 b=0 b=0(此处的 0 0 0是加法的单位元)

1.2.3 域

  域(Fields)也是一个具有两个二元运算(通常称为加法和乘法)的代数系统,常记作 < F , + , × > <F, +, \times> <F,+,×>,简记为 F F F,其满足以下条件:

  • < F , + > <F, +> <F,+>是加法交换群,此时用 0 0 0表示其加法单位元, − a -a a表示环中元素 a a a的加法逆元
  • < F ∗ , × > <F^*, \times> <F,×>是乘法交换群,其中 F ∗ F^* F包括 F F F中的所有非零元素, F ∗ = F − { 0 } F^*=F-\{0\} F=F{ 0},此时用 1 1 1表示乘法单位元, a − 1 a^{-1} a1表示元素 a ( a ≠ 0 ) a(a\ne0) a(a=0)的乘法逆元
  • 乘法对加法具有分配律: ∀ a , b , c ∈ R \forall a, b, c\in R a,b,cR a × ( b + c ) = a × b + a × c a\times (b+c)=a\times b+a\times c a×(b+c)=a×b+a×c

  有理数集、无理数集以及复数集是我们熟悉的代数系统,它们在普通的加法和乘法两种运算下都构成域。

1.2.4 小结

  可以看到群是最基础的代数结构,而环是由加法交换群和乘法半群构成的,进一步地,域是由加法交换群和乘法交换群(除0以外)构成的。

  读者可能会问,群、环和域有什么用?下面举一个简单的例子来说明。假如在研究下表所示的集合 S = { a , b } S=\{a, b\} S={ a,b}上的代数结构,其加法和乘法的定义如下(用算术表表示):


  如果在集合S上可不可以用减法,加法和乘法有没有交换律等是需要的回答的问题,那么此时如果发现 < S , + , × > <S, +, \times> <S,+,×>是环,那么一切都迎刃而解了。

  另外,由于不是所有常见的运算都可以有加、减、乘、除、乘方、开方等运算,那么在遇到一个新的结构时,如果赋予它们一些好的性质是很重要的,比如学习矩阵运算时,加法是需要自己定义的,乘法是自己定义的,由此会发现矩阵加法满足交换律,但是矩阵乘法不满足,实际上会发现n阶实数矩阵对于加法和乘法构成环,那么n阶实数矩阵上的运算就可以利用许多环的运算了。

  由此得出一个结论:

  • 群环域没有定义哪一种代数结构,而是定义了一类代数结构,数学工作者只需要研究这一类代数结构的共性。当某种特定的代数结构满足群、环、域的条件时,那么该代数结构自然而然地具备群、环、域的良好性质。

  下图1.1总结了群、环、域的基本性质,这里是按照群、环、域满足的条件来介绍的。

图1.1 群、环和域的性质

2. 有限域

  清楚群、环、域的一些基本概念之后,下面着重讨论有限域的性质。

  • 有限域:若域中元素个数(称为域的阶)有限,则称该域为有限域,否则称为无限域

  由于计算机只能表示有限个元素的集合,因此更多地在密码学中会考虑有限域的情况,可以证明有限域的阶必须是一个素数的幂 p n p^n pn(n为正整数),因此有限域通常记作 G F ( p n ) GF(p^n) GF(pn),符号G是为了纪念群论的创立者Galois,符号F是域Fields,因此有限域称为Galois域。

  自然地,需要考虑如何构造一个域。考虑集合 Z n = { 0 , 1 , 2 , . . . , n − 1 } Z_n=\{0, 1, 2, ..., n-1\} Zn={ 0,1,2,...,n1},并考察在该集合上的两个模n运算:

  • 模n加法:通常用 ⊕ n \oplus_n n表示, a ⊕ n b = ( a + b )    m o d    n a\oplus_n b=(a+b)\;mod\;n anb=(a+b)modn
  • 模n乘法:通常用 ⊗ n \otimes_n n表示, a ⊗ n b = ( a × b )    m o d    n a\otimes_n b=(a\times b)\;mod\;n anb=(a×b)modn

  可以证明(这里不证)下面两个结论:

  • 对于任意的正整数n, < Z n , ⊕ n , ⊗ n > <Z_n, \oplus_n, \otimes_n> <Zn,n,n>构成了交换环
  • 对于任意的正整数n,若n是素数,那么 < Z n , ⊕ n , ⊗ n > <Z_n, \oplus_n, \otimes_n> <Zn,n,n>构成了域

  因此并不是对于所有的正整数n,都可以找到阶为n的有限域。但在后续讨论中,需要构造下面两种特殊的有限域:

  • n = 1 n=1 n=1时的有限域 G F ( p ) GF(p) GF(p),由上面的讨论可以很容易构造该有限域
  • n > 1 n>1 n>1时的有限域 G F ( p n ) GF(p^n) GF(pn),其中 G F ( 2 n ) GF(2^n) GF(2n)在密码学中有重要的应用

构造有限域
  域是一种具有很多良好性质的代数结构,除了判断一种已知的代数结构是否构成域以外,还可能需要构造域以基于域进行一些运算。上述证明了对于任意的素数p,都可以找到阶为p的有限域,其构造方法也很简单,但想构造阶为 p n p^n pn的有限域,就不是那么容易了,但并非不可能,最重要的是找到能够构造该有限域的运算,因为同一个集合基于不同的运算可能会构成不同代数结构。

2.1 有限域GF(p)​

  给定一个素数p,元素个数为p​的有限域GF(p)​被定义为整数 { 0 , 1 , . . . . , p − 1 } \{0, 1, ...., p-1\} { 0,1,....,p1}的集合 Z p Z_p Zp,其运算是模​p​加法和模​p乘法,常记作 < Z p , ⊕ p , ⊗ p > <Z_p, \oplus_p, \otimes_p> <Zp,p,p>,由于有限域GF(p)​是指定的,因此也常常简记为 < Z p , + , × > <Z_p, +, \times> <Zp,+,×>

  有限域GF(p)中有一个很好的性质,那就是域中任何元素(除0以外)都有乘法逆元,利用扩展的欧几里得算法便可求解一个元素的乘法逆元,这里的内容详见数论基础

  有限域GF(p)​是十分熟悉的,不过真正的困难时构造有限域 G F ( p n ) GF(p^n) GF(pn)(后面最多的是 G F ( 2 n ) GF(2^n) GF(2n)),但是由上面的讨论知道 < Z p n , ⊕ n , ⊗ n > <Z_{p^n}, \oplus_n, \otimes_n> <Zpn,n,n>构成了交换环,而不是有限域,因此使用模p加法和模p​乘法是不能构造有限域 G F ( p n ) GF(p^n) GF(pn)的,因此找到一种合适的运算至关重要,下面介绍的域上的多项式就是为了找到这样一种运算,可能刚看上去有些不理解,但跟随这一思路进行思考是很重要的。

2.2 域上多项式

  有限域GF(p)​还是十分简单的,下面则要开始讨论基于有限域GF(p)​的多项式。在之前的数学框架中,大多数人理解的n次多项式即为:
f ( x ) = a n x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 = ∑ i = 0 n a i x i f(x)=a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0=\sum_{i=0}^n{a_ix^i} f(x)=anxn+an1xn1+...+a1x+a0=i=0naixi
  对于普通的多项式而言,其加法、减法和乘法都是十分熟悉的,因此不再赘述。下面要讨论的多项式有以下两种:

  • 系数运算是模p运算的多项式运算,即系数在有限域GF(p)​的集合中(2.2节讨论)
  • 系数在有限域GF(p)中,且多项式被定义为模一个n次多项式的多项式运算(2.3节讨论)

  对于n次多项式 f ( x ) = a n x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 f(x)=a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0 f(x)=anxn+an1xn1+...+a1x+a0,显然 a n ≠ 0 a_n\ne 0 an=0。若

  • ∀ i ∈ { 0 , 1 , . . . , n } \forall i\in \{0, 1, ..., n\} i{ 0,1,...,n} a i ∈ S a_i\in S aiS,那么称多项式 f ( x ) f(x) f(x)是定义在系数集 S S S上的多项式
  • a n = 1 a_n=1 an=1,则称多项式 f ( x ) f(x) f(x)是首一多项式

  在抽象代数中,需要讨论的就是系数在有限域GF(p)中的多项式(实际上是系数 a i ∈ Z p a_i\in Z_p aiZp),仍然关注多项式的运算,多项式的加法、减法和乘法都是容易理解的,只需将普通的加法、减法和乘法换成域中的加法、减法和乘法就可以了,下面以GF(7)上的两个多项式为例介绍一下:
f ( x ) = 2 x 2 + 3 x + 4 ,    g ( x ) = 3 x 2 + 5 x + 2 f ( x ) + g ( x ) = ( ( 2 + 3 )    m o d    7 ) x 2 + ( ( 3 + 5 )    m o d    7 ) x + ( ( 4 + 2 )    m o d    7 ) = 5 x 2 + x + 6 f ( x ) − g ( x ) = ( ( 2 − 3 )    m o d    7 ) x 2 + ( ( 3 − 5 )    m o d    7 ) x + ( ( 4 − 2 )    m o d    7 ) = 6 x 2 + 5 x + 2 f ( x ) ∗ g ( x ) = ( 6    m o d    7 ) x 4 + ( 19    m o d    7 ) x 3 + ( 31    m o d    7 ) x 2 + ( 26    m o d    7 ) x + ( 8    m o d    7 ) = 6 x 4 + 5 x 3 + 3 x 2 + 5 x + 1 f(x)=2x^2+3x+4,\;g(x)=3x^2+5x+2 \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\quad\\ f(x)+g(x)=((2+3)\;mod\;7)x^2+((3+5)\;mod\;7)x+((4+2)\;mod\;7)=5x^2+x+6\\ f(x)-g(x)=((2-3)\;mod\;7)x^2+((3-5)\;mod\;7)x+((4-2)\;mod\;7)=6x^2+5x+2\\ f(x)*g(x)=(6\;mod\;7)x^4+(19\;mod\;7)x^3+(31\;mod\;7)x^2+(26\;mod\;7)x+(8\;mod\;7)\\ =6x^4+5x^3+3x^2+5x+1 \qquad\qquad\qquad\qquad\qquad\qquad\qquad\quad f(x)=2x2+3x+4,g(x)=3x2+5x+2f(x)+g(x)=((2+3)mod7)x2+((3+5)mod7)x+((4+2)mod7)=5x2+x+6f(x)g(x)=((23)mod7)x2+((35)mod7)x+((42)mod7)=6x2+5x+2f(x)g(x)=(6mod7)x4+(19mod7)x3+(31mod7)x2+(26mod7)x+(8mod7)=6x4+5x3+3x2+5x+1
  但是由于域中有除法,因此在域中的多项式可以定义除法,比如对于域GF(7)上的多项式则有:
3 x × 4 x = 5 x 2 ⇒ 5 x 2 / 3 x = 4 x 3x\times 4x=5x^2\Rightarrow 5x^2/3x=4x 3x×4x=5x25x2/3x=4x
  很难想象 5 x 2 / 3 x = 4 x 5x^2/3x=4x 5x2/3x=4x是成立的,但对于域GF(7)上的多项式确实是成立的,这是整数的情况,但是对于上面的两个多项式 f ( x ) = 2 x 2 + 3 x + 4 ,    g ( x ) = 3 x 2 + 5 x + 2 f(x)=2x^2+3x+4,\;g(x)=3x^2+5x+2 f(x)=2x2+3x+4,g(x)=3x2+5x+2而言,就不一定能够整除,因此就有余数,比如就有:
f ( x ) / g ( x ) ⇒ f ( x ) = q ( x ) g ( x ) + r ( x ) ⇒ ( 2 x 2 + 3 x + 4 ) = 3 ( 3 x 2 + 5 x + 2 ) + ( 2 x + 5 ) f(x)/g(x)\Rightarrow f(x)=q(x)g(x)+r(x)\Rightarrow (2x^2+3x+4)=3(3x^2+5x+2)+(2x+5) f(x)/g(x)f(x)=q(x)g(x)+r(x)(2x2+3x+4)=3(3x2+5x+2)+(2x+5)
  上式十分类似于整数中的带余除法,可以验证上式是正确的,因此下面定义多项式的带余除法:

  • 域F上的多项式带余除法:对于域F中的n次多项式 f ( x ) f(x) f(x)和m次多项式 g ( x ) g(x) g(x) m ≤ n m\le n mn),则用 g ( x ) g(x) g(x) f ( x ) f(x) f(x)会得到一个商式 q ( x ) q(x) q(x)和一个余式 r ( x ) r(x) r(x),其满足
    f ( x ) = q ( x ) g ( x ) + r ( x ) ∂ ( f ( x ) ) = n , ∂ ( g ( x ) ) = m , ∂ ( q ( x ) ) = n − m , 0 ≤ ∂ ( r ( x ) ) ≤ m − 1 f(x)=q(x)g(x)+r(x)\\ \partial(f(x))=n, \partial(g(x))=m, \partial(q(x))=n-m,0\le \partial(r(x))\le m-1 f(x)=q(x)g(x)+r(x)(f(x))=n,(g(x))=m,(q(x))=nm0(r(x))m1

  其中 ∂ ( f ( x ) ) = n \partial(f(x))=n (f(x))=n表示 f ( x ) f(x) f(x)的最高次数为 n n n(即 f ( x ) f(x) f(x) x x x的最高次幂为n)。通常将余式 r ( x ) r(x) r(x)记作 r ( x ) = f ( x )    m o d    g ( x ) r(x)=f(x)\;mod\;g(x) r(x)=f(x)modg(x),若余式为0则称 g ( x ) g(x) g(x)整除 f ( x ) f(x) f(x)

  在数论中,其核心概念是素数,在多项式也有类似的概念:

  • 既约多项式(不可约多项式、素多项式):若域F中多项式 f ( x ) f(x) f(x)不能表示域F上任两个多项式 g 1 ( x ) g_1(x) g1(x) g 2 ( x ) g_2(x) g2(x)的乘积( g 1 ( x ) g_1(x) g1(x) g 2 ( x ) g_2(x) g2(x)在域F中,且次数都小于 f ( x ) f(x) f(x)的次数),那么称多项式 f ( x ) f(x) f(x)为既约多项式,也称不可约多项式、素多项式

  一般而言,有限域GF(2)上的多项式是最有意义的,因为模2运算十分简单,其有下面的运算表。其加法和减法是一样的,类似于异或操作,而乘法类似于逻辑与操作。

图2.1 有限元GF(2)]]的加法、减法和乘法的运算表

  至此,读者还是不理解域上多项式的作用,但是下面就要开始讨论如果运用域上多项式来构造一种合适的运算,这种运算可以用来构造有限域 G F ( 2 n ) GF(2^n) GF(2n)

2.3 有限域GF(2n)

  有限域 G F ( 2 n ) GF(2^n) GF(2n)在密码学中十分重要,如果试图构造一种加密算法,而该加密算法需要利用除法,那么就需要用到域。而又对于计算机而言,n个比特能够表示 2 n 2^n 2n个数,因此自然希望能够找到一个集合,该集合刚好有 2 n 2^n 2n个元素,然后基于这个集合还可以构造一个有限域 G F ( 2 n ) GF(2^n) GF(2n)以利用有限域中许多良好的性质。

  不过读者自然会想到,找到一个“差不多”的集合,该集合的元素个数即为素数就好了。比如n=8时,构造有限域 G F ( 2 8 ) GF(2^8) GF(28)不那么容易,而构造GF(251)可以基于模运算就可以构造有限域(251是小于 2 8 2^8 28的最大素数),不过人们总是试图追求完美,而不喜欢一点点的缺憾。

为什么要用域
  如果构造加密算法时需要用到除法,那么就可以考虑使用域。但是,即使不打算使用除法,比如只打算使用加法和乘法,那么可以不使用域,不过观察一下下面的环 < Z 8 , ⊕ 8 , ⊗ 8 > <Z_8, \oplus_8, \otimes_8> <Z8,8,8>的运算表

图2.2 模8运算

  可以发现, < Z 8 , ⊕ 8 , ⊗ 8 > <Z_8, \oplus_8, \otimes_8> <Z8,8,8>中各个非零元素出现的次数是不同的(模8乘法),因此使用该加密算法时容易受到攻击者针对这一点进行的攻击。

  总而言之,需要找到包含2^n个元素的集合,并在其上定义两个二元运算:加法和乘法,使之构成域。显然普通模算术是不可以的,那么下面考虑一下多项式的模运算

2.3.1 多项式的模运算

  设有有限域GF(p),其上有集合 Z p = { 0 , 1 , 2 , . . . , p − 1 } Z_p=\{0, 1, 2, ..., p-1\} Zp={ 0,1,2,...,p1},定义在 Z p Z_p Zp上的多项式有
f ( x ) = a n − 1 x n − 1 + . . . + a 1 x + a 0 = ∑ i = 0 n a i x i ∀ i ∈ { 0 , 1 , 2 , . . . , n − 1 } , a i ∈ Z p f(x)=a_{n-1}x^{n-1}+...+a_1x+a_0=\sum_{i=0}^n{a_ix^i}\qquad\forall i\in\{0, 1, 2, ..., n-1\},a_i\in Z_p f(x)=an1xn1+...+a1x+a0=i=0naixii{ 0,1,2,...,n1},aiZp
  设集合S是所有定义在 Z p Z_p Zp上的多项式集合,即
S = { f ( x ) ∣ f ( x ) = a n − 1 x n − 1 + . . . + a 1 x + a 0 = ∑ i = 0 n a i x i ∀ i ∈ { 0 , 1 , 2 , . . . , n − 1 } , a i ∈ Z p } S=\{f(x)|f(x)=a_{n-1}x^{n-1}+...+a_1x+a_0=\sum_{i=0}^n{a_ix^i}\qquad\forall i\in\{0, 1, 2, ..., n-1\},a_i\in Z_p\} S={ f(x)f(x)=an1xn1+...+a1x+a0=i=0naixii{ 0,1,2,...,n1},aiZp}
  可知集合S中共有 p n p^n pn个元素,其包含了所有次数小于n次的多项式。比如p=2,n=3则有集合S有 2 3 = 8 2^3=8 23=8个元素
S = { 0 ,    1 ,    x ,    x + 1 ,    x 2 ,    x 2 + 1 ,    x 2 + x ,    x 2 + x + 1 } S=\{0,\;1,\;x,\;x+1,\;x^2,\;x^2+1,\;x^2+x,\;x^2+x+1\} S={ 0,1,x,x+1,x2,x2+1,x2+x,x2+x+1}
  那么下面就定义多项式的模运算:基于普通多项式的加法和乘法运算,并满足以下两条规则:

  • 运算中,系数运算以p为模数,即遵循有限域 Z p Z_p Zp上的运算规则
  • 若乘法运算的结果是次数大于n-1的多项式,那么须将其除以某个次数为n的既约多项式 m ( x ) m(x) m(x)并取余式。对于多项式 f ( x ) f(x) f(x),这个余数表示为 r ( x ) = f ( x ) m o d m ( x ) r(x)=f(x) mod m(x) r(x)=f(x)modm(x)

  在2.2节,我们定义了模p运算的多项式运算,即系数在有限域GF(p)的集合中,并演示了加法、减法和乘法,并简单介绍了带余除法,而这里所讲的多项式模运算和2.2节中讲述的运算十分接近,只比其多了一条规则:多项式乘法得到的结果需要进行模 m ( x ) m(x) m(x)运算,这是为了将多项式的结果限制在集合S中,下面用例子来介绍一下多项式模运算。

  后面会讲述到Advanced Encryption Standard(AES,高级加密标准)中使用了 G F ( 2 8 ) GF(2^8) GF(28)中的运算,其中的既约多项式 m ( x ) = x 8 + x 4 + x 3 + x + 1 m(x)=x^8+x^4+x^3+x+1 m(x)=x8+x4+x3+x+1。考虑多项式 f ( x ) = x 6 + x 4 + x 2 + x + 1 ,    g ( x ) = x 7 + x + 1 f(x)=x^6+x^4+x^2+x+1,\;g(x)=x^7+x+1 f(x)=x6+x4+x2+x+1,g(x)=x7+x+1,则其加法和乘法有:
f ( x ) + g ( x ) = ( x 6 + x 4 + x 2 + x + 1 ) + ( x 7 + x + 1 ) = x 7 + x 6 + x 4 + x 2 f ( x ) × g ( x ) = ( x 6 + x 4 + x 2 + x + 1 ) × ( x 7 + x + 1 )    m o d    ( x 8 + x 4 + x 3 + x + 1 ) = x 7 + x 6 + 1            f(x)+g(x)=(x^6+x^4+x^2+x+1)+(x^7+x+1)=x^7+x^6+x^4+x^2\qquad\quad\\ f(x)\times g(x)=(x^6+x^4+x^2+x+1)\times(x^7+x+1)\;mod\;(x^8+x^4+x^3+x+1)\\ =x^7+x^6+1\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\quad\;\;\;\;\; f(x)+g(x)=(x6+x4+x2+x+1)+(x7+x+1)=x7+x6+x4+x2f(x)×g(x)=(x6+x4+x2+x+1)×(x7+x+1)mod(x8+x4+x3+x+1)=x7+x6+1
  往往讲述到这里,对于多项式的模运算就会出现概念上的理解错误,因为同时涉及到两个有限域。在此,需要理解两点:

  • 多项式模运算利用了有限域GF(p),多项式是定义在 Z p Z_p Zp上的多项式,多项式运算是在普通多项式运算下「系数模 p p p、结果模 m ( x ) m(x) m(x)」的运算
  • 所有的多项式组成了集合S,集合S和基于S上的运算是有限域 G F ( p n ) GF(p^n) GF(pn),也就是说多项式运算的结果在集合S中,在有限域 G F ( p n ) GF(p^n) GF(pn)

  对于上面的例子,p=2,n=8,因此 m ( x ) m(x) m(x)是一个8次多项式,运算的多项式 f ( x ) f(x) f(x) g ( x ) g(x) g(x)都是次数小于8次、系数都在 Z 2 = { 0 , 1 } Z_2=\{0,1\} Z2={ 0,1}中多项式,对于 f ( x ) f(x) f(x) g ( x ) g(x) g(x)的加法和乘法,其系数运算按照模2运算进行,结果都需要模 m ( x ) = x 8 + x 4 + x 3 + x + 1 m(x)=x^8+x^4+x^3+x+1 m(x)=x8+x4+x3+x+1,只不过由于加法运算的对象都在的结果次数不会超过8次,因此通常忽略模 m ( x ) m(x) m(x)的过程,而乘法运算的结果次数可能超过8次,因此需要对结果模 m ( x ) m(x) m(x)

  因此现在可以构造一个有限域 G F ( p n ) = < S , + , × > GF(p^n)=<S, +, \times> GF(pn)=<S,+,×>,其中S是上面定义的集合,加法和乘法运算是上面阐述的多项式模运算,其模数是一个n次既约多项式。

  之所以需要n次既约多项式,是因为既约多项式类似于素数的概念,多项式模运算中对既约多项式取模类似于整数对素数取模,多项式模运算中对n次既约多项式取模可以得到n-1次多项式(这个多项式必在集合S中)。而且集合S中的任何多项式都有加法逆元和乘法逆元:

  • 多项式模运算的加法逆元 ∀ f ( x ) ∈ S \forall f(x) \in S f(x)S,都存在 g ( x ) ∈ S g(x)\in S g(x)S,使得 ( f ( x ) + g ( x ) )    m o d    m ( x ) = 0 (f(x)+ g(x))\;mod\;m(x)=0 (f(x)+g(x))modm(x)=0,则 f ( x ) f(x) f(x)的加法逆元为 g ( x ) g(x) g(x) g ( x ) g(x) g(x)的加法逆元为 f ( x ) f(x) f(x),多项式0实际上是多项式模运算的加法单位元
  • 多项式模运算的乘法逆元 ∀ f ( x ) ∈ S \forall f(x) \in S f(x)S,都存在 g ( x ) ∈ S g(x)\in S g(x)S,使得 ( f ( x ) × g ( x ) )    m o d    m ( x ) = 1 (f(x)\times g(x))\;mod\;m(x)=1 (f(x)×g(x))modm(x)=1,则 f ( x ) f(x) f(x)的乘法逆元为 g ( x ) g(x) g(x) g ( x ) g(x) g(x)的乘法逆元为 f ( x ) f(x) f(x),多项式1实际上是多项式模运算的乘法单位元

  因此有下面的一个性质:

  • ∀ f ( x ) ∈ S \forall f(x) \in S f(x)S,有 f ( x ) + S = S f(x)+ S=S f(x)+S=S f ( x ) × S = S f(x)\times S=S f(x)×S=S,即S中任一多项式加上S中任一多项式或者乘以S中任一多项式(按照多项式模运算规则),所得结果组成的多项式集合和S相等

  下面用有限域 G F ( 2 3 ) = < S , + , × > GF(2^3)=<S, +, \times> GF(23)=<S,+,×>上的多项式模运算来说明这几个性质的含义,其既约多项式为 x 3 + x + 1 x^3+x+1 x3+x+1,其加法和乘法的运算表如图2.3所示。可以发现以下特点:

  • 阴影部分的0表示多项式 f ( x ) f(x) f(x)的加法逆元就是多项式 f ( x ) f(x) f(x)本身,比如多项式 x + 1 x+1 x+1的加法逆元就是 x + 1 x+1 x+1
  • 阴影部分的1表示任一多项式 f ( x ) f(x) f(x)都存在乘法逆元,比如 x x x的乘法逆元为 x 2 + 1 x^2+1 x2+1,因为 ( x × ( x 2 + 1 ) )    m o d    ( x 3 + x + 1 ) = 1 (x\times (x^2+1))\;mod\;(x^3+x+1)=1 (x×(x2+1))mod(x3+x+1)=1
  • 无论是加法运算表,还是乘法运算表,其每一行的结果均不相同、每一列的结果也均不相同,而且每一行的结果组成的集合、每一列的结果组成的集合都等于集合S

图2.3 多项式模运算

2.3.2 实现加法和乘法

  最后,回答一个问题:多项式运算和之后的密码学有什么关系?这是许多读者需要思考的问题,下面将回答这个问题,并介绍如何实现多项式模运算中的加法和乘法。

  在后面讨论最多的是定义在 Z 2 = { 0 , 1 } Z_2=\{0,1\} Z2={ 0,1}上的多项式有
f ( x ) = a n − 1 x n − 1 + . . . + a 1 x + a 0 = ∑ i = 0 n a i x i ∀ i ∈ { 0 , 1 , 2 , . . . , n − 1 } , a i ∈ Z 2 f(x)=a_{n-1}x^{n-1}+...+a_1x+a_0=\sum_{i=0}^n{a_ix^i}\qquad\forall i\in\{0, 1, 2, ..., n-1\},a_i\in Z_2 f(x)=an1xn1+...+a1x+a0=i=0naixii{ 0,1,2,...,n1},aiZ2
  那么多项式可以被n元组 ( a n − 1 , . . . , a 1 , a 0 ) (a_{n-1}, ..., a_1, a_0) (an1,...,a1,a0)唯一表示,实际上这个二元组就是01序列,n元组 ( a n − 1 , . . . , a 1 , a 0 ) (a_{n-1}, ..., a_1, a_0) (an1,...,a1,a0)就是n比特长度的01序列,比如 f ( x ) = x 6 + x 4 + x 2 + x + 1 f(x)=x^6+x^4+x^2+x+1 f(x)=x6+x4+x2+x+1,其表示的就是01010111。因此多项式就可以唯一地转换为二进制串,在密码学中字符可以被编号为数字,然后数字用二进制表示就可以转换为一个多项式,这就回答了上面的问题,不过讨论还没有结束。

  对于人而言,计算多项式是容易的,利用多项式模运算的几条规则就可以完成,但是对于计算机而言就并非如此。比如对于上面提及的例子:对于有限域 G F ( 2 8 ) GF(2^8) GF(28)中的多项式模运算,其中的既约多项式 m ( x ) = x 8 + x 4 + x 3 + x + 1 m(x)=x^8+x^4+x^3+x+1 m(x)=x8+x4+x3+x+1。考虑多项式 f ( x ) = x 6 + x 4 + x 2 + x + 1 ,    g ( x ) = x 7 + x + 1 f(x)=x^6+x^4+x^2+x+1,\;g(x)=x^7+x+1 f(x)=x6+x4+x2+x+1,g(x)=x7+x+1,则计算机如何实现多项式的加法和乘法呢?

  由上面的叙述, f ( x ) f(x) f(x) g ( x ) g(x) g(x)可以唯一对应于8位的二进制(事实上,有限域 G F ( 2 8 ) GF(2^8) GF(28)就是基于8位的2进制数而提出的),则有:
f ( x ) + g ( x ) = ( x 6 + x 4 + x 2 + x + 1 ) + ( x 7 + x + 1 ) = x 7 + x 6 + x 4 + x 2 ( 01010111 ) ⊕ ( 10000011 )    = 11010100 f(x)+g(x)=(x^6+x^4+x^2+x+1) + (x^7+x+1)=x^7+x^6+x^4+x^2\\ \qquad\qquad\qquad\quad(01010111) \oplus(10000011)\;=11010100 f(x)+g(x)=(x6+x4+x2+x+1)+(x7+x+1)=x7+x6+x4+x2(01010111)(10000011)=11010100
  惊喜地发现,多项式加法实际上就等价于多项式对于二进制串的按位异或运算,这对于计算机而言是可以处理的。不过对于乘法而言,就没有这么好的性质了,不过仍有一些简便的方法来实现运算。可以发现对于 m ( x ) = x 8 + x 4 + x 3 + x + 1 m(x)=x^8+x^4+x^3+x+1 m(x)=x8+x4+x3+x+1,有:
x 8    m o d    m ( x ) = m ( x ) − x 8 = x 4 + x 3 + x + 1 x^8\;mod\;m(x)=m(x)-x^8=x^4+x^3+x+1 x8modm(x)=m(x)x8=x4+x3+x+1
  实际上,对于有限域 G F ( p n ) GF(p^n) GF(pn)而言,其上n次既约多项式为 m ( x ) m(x) m(x),则
x n    m o d    m ( x ) = m ( x ) − x n x^n\;mod\;m(x)=m(x)-x^n xnmodm(x)=m(x)xn
  考虑 G F ( 2 8 ) GF(2^8) GF(28)上的多项式
f ( x ) = b 7 x 7 + b 6 x 6 + b 5 x 5 + b 4 x 4 + b 3 x 3 + b 2 x 2 + b 1 x + b 0 f(x)=b_7x^7+b_6x^6+b_5x^5+b_4x^4+b_3x^3+b_2x^2+b_1x+b_0 f(x)=b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0

  那么对于多项式模运算 x × f ( x ) x\times f(x) x×f(x)有:

  • b 7 = 0 b_7=0 b7=0,则 x × f ( x )    m o d    m ( x ) = b 6 x 7 + b 5 x 6 + b 4 x 5 + b 3 x 4 + b 2 x 3 + b 1 x 2 + b 0 x x\times f(x)\;mod\;m(x)=b_6x^7+b_5x^6+b_4x^5+b_3x^4+b_2x^3+b_1x^2+b_0x x×f(x)modm(x)=b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x

  • b 7 ≠ 0 b_7\ne0 b7=0(即 b 7 = 1 b_7=1 b7=1)则

x × f ( x )    m o d    m ( x ) = ( x 8    m o d    m ( x ) ) + ( b 6 x 7 + b 5 x 6 + b 4 x 5 + b 3 x 4 + b 2 x 3 + b 1 x 2 + b 0 x )      = ( x 4 + x 3 + x + 1 ) + ( b 6 x 7 + b 5 x 6 + b 4 x 5 + b 3 x 4 + b 2 x 3 + b 1 x 2 + b 0 x ) x\times f(x)\;mod\;m(x)=(x^8\;mod\;m(x))+(b_6x^7+b_5x^6+b_4x^5+b_3x^4+b_2x^3+b_1x^2+b_0x)\\ \qquad\qquad\qquad\qquad\quad\;\;=(x^4+x^3+x+1)+(b_6x^7+b_5x^6+b_4x^5+b_3x^4+b_2x^3+b_1x^2+b_0x) x×f(x)modm(x)=(x8modm(x))+(b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x)=(x4+x3+x+1)+(b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x)

  用二进制表示即为
x × f ( x ) = { b 6 b 5 b 4 b 3 b 2 b 1 b 0 0 ,        b 7 = 0 b 6 b 5 b 4 b 3 b 2 b 1 b 0 0 ⊕ 00011011 b 7 = 1 x\times f\left( x \right) =\begin{cases} b_6b_5b_4b_3b_2b_1b_00,\qquad\qquad\qquad\;\;\; b_7=0\\ b_6b_5b_4b_3b_2b_1b_00\oplus 00011011\qquad b_7=1\\ \end{cases} x×f(x)={ b6b5b4b3b2b1b00,b7=0b6b5b4b3b2b1b0000011011b7=1
  而乘以 x x x的更高次幂可以反复进行上面的计算,比如计算 f ( x ) = x 6 + x 4 + x 2 + x + 1 ,    g ( x ) = x 7 + x + 1 f(x)=x^6+x^4+x^2+x+1,\;g(x)=x^7+x+1 f(x)=x6+x4+x2+x+1,g(x)=x7+x+1的乘法,则有:其中
01010111 × 00000010 = 10101110      01010111 × 00000100 = 01011110 ⊕ 00011011 = 01000111 01010111 × 00001000 = 10001110      01010111 × 00010000 = 00011100 ⊕ 00011011 = 00000111 01010111 × 01000000 = 00001110      01010111 × 01000000 = 00011100      01010111 × 10000000 = 00111000         f ( x ) × g ( x ) = f ( x ) × x 7 + f ( x ) × x + f ( x ) = 01010111 × 10000011 = 01010111 × ( 10000000 ⊕ 00000010 ⊕ 00000001 )        = 00111000 ⊕ 10101110 ⊕ 01010111 = 11000001      01010111\times 00000010=10101110\qquad\qquad\qquad\qquad\qquad\;\;\\ 01010111\times 00000100=01011110\oplus 00011011=01000111\\ 01010111\times 00001000=10001110\qquad\qquad\qquad\qquad\qquad\;\;\\ 01010111\times 00010000=00011100\oplus 00011011=00000111\\ 01010111\times 01000000=00001110\qquad\qquad\qquad\qquad\qquad\;\;\\ 01010111\times 01000000=00011100\qquad\qquad\qquad\qquad\qquad\;\;\\ 01010111\times 10000000=00111000\qquad\qquad\qquad\qquad\qquad\;\;\\ \;\\ f(x)\times g(x)=f(x)\times x^7 + f(x)\times x+f(x)\qquad\qquad\qquad\qquad\\ =01010111\times 10000011\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\\ =01010111\times(10000000\oplus 00000010 \oplus 00000001)\qquad\quad\quad\;\;\;\\ =00111000\oplus 10101110\oplus 01010111=11000001\qquad\qquad\quad\;\;\\ 01010111×00000010=1010111001010111×00000100=0101111000011011=0100011101010111×00001000=1000111001010111×00010000=0001110000011011=0000011101010111×01000000=0000111001010111×01000000=0001110001010111×10000000=00111000f(x)×g(x)=f(x)×x7+f(x)×x+f(x)=01010111×10000011=01010111×(100000000000001000000001)=001110001010111001010111=11000001
  故 f ( x ) × g ( x ) = x 7 + x 6 + 1 f(x)\times g(x)=x^7+x^6+1 f(x)×g(x)=x7+x6+1

  综上就有效地实现了加法和乘法的运算。正如前述所示,有限域是AES的基础,讲述完有限域后将开始介绍高级加密标准AES加密算法的具体细节。

猜你喜欢

转载自blog.csdn.net/Stu_YangPeng/article/details/119329168
今日推荐