有限域

  • 1. 代数基本概念
    • 1.1 代数系统
    • 1.2 群、环、域基本概念
      • 1.2.1 群
      • 1.2.2 环
      • 1.2.3 域
      • 1.2.4 小结
  • 2. 有限域
    • 2.1 有限域GF\(p\)​
    • 2.2 域上多项式
    • 2.3 有限域GF(2^n^)
      • 2.3.1 多项式的模运算
      • 2.3.2 实现加法和乘法

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

更新历史:

  • 2021年08月02日完成初稿

1. 代数基本概念

1.1 代数系统

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

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

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

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

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

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

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

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

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

集合 二元运算 一元运算 0元运算
整数ZZZ,有理数QQQ,实数RRR +,×+, \times+,× −-−(取相反数) 0,10,10,1
n阶实数矩阵Mn(R)M_n(R)Mn​(R) +,×+, \times+,× ATA^TAT(取转置矩阵) 单位矩阵EEE
集合组成的集合P(B)P(B)P(B) ∪,∩\cup, \cap∪,∩ ScS^cSc(取补集) 取空集⊘\oslash⊘

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

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

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

  • 交换律:若∀a,b∈A\forall a, b\in A∀a,b∈A有a+b=b+aa+b=b+aa+b=b+a,则称有加法交换律,同理有乘法交换律
  • 结合律:若∀a,b,c∈A\forall a, b, c\in A∀a,b,c∈A有a+(b+c)=(a+b)+ca+(b+c)=(a+b)+ca+(b+c)=(a+b)+c,则称有加法结合律,同理有乘法结合律
  • 消去律:若∀a,b,c∈A\forall a, b, c\in A∀a,b,c∈A有a+b=a+c⇒b=ca+b=a+c\Rightarrow b=ca+b=a+c⇒b=c,则称有加法消去律,同理有乘法消去律
  • 乘法对加法的分配律:若∀a,b,c∈A\forall a, b, c\in A∀a,b,c∈A有a×(b+c)=a×b+a×ca\times (b+c)=a\times b+a\times ca×(b+c)=a×b+a×c,则称乘法对加法具有分配律
  • 单位元:单位元eee满足e∈A,∀a∈Ae\in A,\;\forall a\in Ae∈A,∀a∈A有a+e=e+a=aa+e=e+a=aa+e=e+a=a,则称有加法单位元,同理有乘法单位元
  • 逆元:对于x∈Ax\in Ax∈A,∃y∈A\exists y \in A∃y∈A使得x+y=ex+y=ex+y=e,则称有xxx有加法逆元yyy(yyy的加法逆元为xxx),同理有乘法逆元

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

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

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

1.2 群、环、域基本概念

1.2.1 群

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

  • 封闭性:∀a,b∈G\forall a, b \in G∀a,b∈G,都有a∘b∈Ga\circ b\in Ga∘b∈G
  • 结合律:∀a,b,c∈G\forall a, b, c \in G∀a,b,c∈G,都有a∘(b∘c)=(a∘b)∘ca\circ (b\circ c) = (a\circ b)\circ ca∘(b∘c)=(a∘b)∘c
  • 单位元:∃e∈G\exists e\in G∃e∈G使得a∈Ga\in Ga∈G,有a∘e=e∘a=aa\circ e=e\circ a=aa∘e=e∘a=a,单位元也称幺元
  • 逆元:∀a∈G\forall a\in G∀a∈G,aaa都存在一个逆元a′a'a′使得a∘a’=ea\circ a’=ea∘a’=e

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

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

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

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

1.2.2 环

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

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

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

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

1.2.3 域

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

  • <F,+><F, +><F,+>是加法交换群,此时用000表示其加法单位元,−a-a−a表示环中元素aaa的加法逆元
  • <F∗,×><F^*, \times><F∗,×>是乘法交换群,其中F∗F^*F∗包括FFF中的所有非零元素,F∗=F−{0}F^*=F-\{0\}F∗=F−{0},此时用111表示乘法单位元,a−1a^{-1}a−1表示元素a(a≠0)a(a\ne0)a(a​=0)的乘法逆元
  • 乘法对加法具有分配律:∀a,b,c∈R\forall a, b, c\in R∀a,b,c∈R有a×(b+c)=a×b+a×ca\times (b+c)=a\times b+a\times ca×(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. 有限域

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

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

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

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

  • 模n加法:通常用⊕n\oplus_n⊕n​表示,a⊕nb=(a+b)modna\oplus_n b=(a+b)\;mod\;na⊕n​b=(a+b)modn
  • 模n乘法:通常用⊗n\otimes_n⊗n​表示,a⊗nb=(a×b)modna\otimes_n b=(a\times b)\;mod\;na⊗n​b=(a×b)modn

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

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

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

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

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

2.1 有限域GF(p)​

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

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

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

2.2 域上多项式

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

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

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

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

  在抽象代数中,需要讨论的就是系数在有限域GF(p)中的多项式(实际上是系数 ai∈Zpa_i\in Z_pai​∈Zp​),仍然关注多项式的运算,多项式的加法、减法和乘法都是容易理解的,只需将普通的加法、减法和乘法换成域中的加法、减法和乘法就可以了,下面以GF(7)上的两个多项式为例介绍一下:
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)=((2−3)mod7)x2+((3−5)mod7)x+((4−2)mod7)=6x2+5x+2f(x)∗g(x)=(6mod7)x4+(19mod7)x3+(31mod7)x2+(26mod7)x+(8mod7)=6x4+5x3+3x2+5x+1f(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)=((2−3)mod7)x2+((3−5)mod7)x+((4−2)mod7)=6x2+5x+2f(x)∗g(x)=(6mod7)x4+(19mod7)x3+(31mod7)x2+(26mod7)x+(8mod7)=6x4+5x3+3x2+5x+1
  但是由于域中有除法,因此在域中的多项式可以定义除法,比如对于域GF(7)上的多项式则有:
3x×4x=5x2⇒5x2/3x=4x3x\times 4x=5x^2\Rightarrow 5x^2/3x=4x 3x×4x=5x2⇒5x2/3x=4x
  很难想象5x2/3x=4x5x^2/3x=4x5x2/3x=4x是成立的,但对于域GF(7)上的多项式确实是成立的,这是整数的情况,但是对于上面的两个多项式f(x)=2x2+3x+4,g(x)=3x2+5x+2f(x)=2x^2+3x+4,\;g(x)=3x^2+5x+2f(x)=2x2+3x+4,g(x)=3x2+5x+2而言,就不一定能够整除,因此就有余数,比如就有:
f(x)/g(x)⇒f(x)=q(x)g(x)+r(x)⇒(2x2+3x+4)=3(3x2+5x+2)+(2x+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≤nm\le nm≤n),则用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−1f(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))=n−m,0≤∂(r(x))≤m−1

  其中∂(f(x))=n\partial(f(x))=n∂(f(x))=n表示f(x)f(x)f(x)的最高次数为nnn(即f(x)f(x)f(x)中xxx的最高次幂为n)。通常将余式r(x)r(x)r(x)记作r(x)=f(x)modg(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上任两个多项式g1(x)g_1(x)g1​(x)和g2(x)g_2(x)g2​(x)的乘积(g1(x)g_1(x)g1​(x)和g2(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)]]的加法、减法和乘法的运算表

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

2.3 有限域GF(2n)

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

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

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

图2.2 模8运算

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

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

2.3.1 多项式的模运算

  设有有限域GF(p),其上有集合Zp={0,1,2,...,p−1}Z_p=\{0, 1, 2, ..., p-1\}Zp​={0,1,2,...,p−1},定义在ZpZ_pZp​上的多项式有
f(x)=an−1xn−1+...+a1x+a0=∑i=0naixi∀i∈{0,1,2,...,n−1},ai∈Zpf(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)=an−1​xn−1+...+a1​x+a0​=i=0∑n​ai​xi∀i∈{0,1,2,...,n−1},ai​∈Zp​
  设集合S是所有定义在ZpZ_pZp​上的多项式集合,即
S={f(x)∣f(x)=an−1xn−1+...+a1x+a0=∑i=0naixi∀i∈{0,1,2,...,n−1},ai∈Zp}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)=an−1​xn−1+...+a1​x+a0​=i=0∑n​ai​xi∀i∈{0,1,2,...,n−1},ai​∈Zp​}
  可知集合S中共有pnp^npn个元素,其包含了所有次数小于n次的多项式。比如p=2,n=3则有集合S有23=82^3=823=8个元素
S={0,1,x,x+1,x2,x2+1,x2+x,x2+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为模数,即遵循有限域ZpZ_pZp​上的运算规则
  • 若乘法运算的结果是次数大于n-1的多项式,那么须将其除以某个次数为n的既约多项式m(x)m(x)m(x)并取余式。对于多项式f(x)f(x)f(x),这个余数表示为r(x)=f(x)modm(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,高级加密标准)中使用了GF(28)GF(2^8)GF(28)中的运算,其中的既约多项式m(x)=x8+x4+x3+x+1m(x)=x^8+x^4+x^3+x+1m(x)=x8+x4+x3+x+1。考虑多项式f(x)=x6+x4+x2+x+1,g(x)=x7+x+1f(x)=x^6+x^4+x^2+x+1,\;g(x)=x^7+x+1f(x)=x6+x4+x2+x+1,g(x)=x7+x+1,则其加法和乘法有:
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+1f(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),多项式是定义在ZpZ_pZp​上的多项式,多项式运算是在普通多项式运算下「系数模ppp、结果模m(x)m(x)m(x)」的运算
  • 所有的多项式组成了集合S,集合S和基于S上的运算是有限域GF(pn)GF(p^n)GF(pn),也就是说多项式运算的结果在集合S中,在有限域GF(pn)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次、系数都在Z2={0,1}Z_2=\{0,1\}Z2​={0,1}中多项式,对于f(x)f(x)f(x)和g(x)g(x)g(x)的加法和乘法,其系数运算按照模2运算进行,结果都需要模m(x)=x8+x4+x3+x+1m(x)=x^8+x^4+x^3+x+1m(x)=x8+x4+x3+x+1,只不过由于加法运算的对象都在的结果次数不会超过8次,因此通常忽略模m(x)m(x)m(x)的过程,而乘法运算的结果次数可能超过8次,因此需要对结果模m(x)m(x)m(x)。

  因此现在可以构造一个有限域GF(pn)=<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)∈Sg(x)\in Sg(x)∈S,使得(f(x)+g(x))modm(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)∈Sg(x)\in Sg(x)∈S,使得(f(x)×g(x))modm(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=Sf(x)+ S=Sf(x)+S=S和f(x)×S=Sf(x)\times S=Sf(x)×S=S,即S中任一多项式加上S中任一多项式或者乘以S中任一多项式(按照多项式模运算规则),所得结果组成的多项式集合和S相等

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

  • 阴影部分的0表示多项式f(x)f(x)f(x)的加法逆元就是多项式f(x)f(x)f(x)本身,比如多项式x+1x+1x+1的加法逆元就是x+1x+1x+1
  • 阴影部分的1表示任一多项式f(x)f(x)f(x)都存在乘法逆元,比如xxx的乘法逆元为x2+1x^2+1x2+1,因为(x×(x2+1))mod(x3+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 实现加法和乘法

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

  在后面讨论最多的是定义在Z2={0,1}Z_2=\{0,1\}Z2​={0,1}上的多项式有
f(x)=an−1xn−1+...+a1x+a0=∑i=0naixi∀i∈{0,1,2,...,n−1},ai∈Z2f(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)=an−1​xn−1+...+a1​x+a0​=i=0∑n​ai​xi∀i∈{0,1,2,...,n−1},ai​∈Z2​
  那么多项式可以被n元组(an−1,...,a1,a0)(a_{n-1}, ..., a_1, a_0)(an−1​,...,a1​,a0​)唯一表示,实际上这个二元组就是01序列,n元组(an−1,...,a1,a0)(a_{n-1}, ..., a_1, a_0)(an−1​,...,a1​,a0​)就是n比特长度的01序列,比如f(x)=x6+x4+x2+x+1f(x)=x^6+x^4+x^2+x+1f(x)=x6+x4+x2+x+1,其表示的就是01010111。因此多项式就可以唯一地转换为二进制串,在密码学中字符可以被编号为数字,然后数字用二进制表示就可以转换为一个多项式,这就回答了上面的问题,不过讨论还没有结束。

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

  由上面的叙述,f(x)f(x)f(x)和g(x)g(x)g(x)可以唯一对应于8位的二进制(事实上,有限域GF(28)GF(2^8)GF(28)就是基于8位的2进制数而提出的),则有:
f(x)+g(x)=(x6+x4+x2+x+1)+(x7+x+1)=x7+x6+x4+x2(01010111)⊕(10000011)=11010100f(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)=x8+x4+x3+x+1m(x)=x^8+x^4+x^3+x+1m(x)=x8+x4+x3+x+1,有:
x8modm(x)=m(x)−x8=x4+x3+x+1x^8\;mod\;m(x)=m(x)-x^8=x^4+x^3+x+1 x8modm(x)=m(x)−x8=x4+x3+x+1
  实际上,对于有限域GF(pn)GF(p^n)GF(pn)而言,其上n次既约多项式为m(x)m(x)m(x),则
xnmodm(x)=m(x)−xnx^n\;mod\;m(x)=m(x)-x^n xnmodm(x)=m(x)−xn
  考虑GF(28)GF(2^8)GF(28)上的多项式
f(x)=b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0f(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)=b7​x7+b6​x6+b5​x5+b4​x4+b3​x3+b2​x2+b1​x+b0​

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

  • 若b7=0b_7=0b7​=0,则x×f(x)modm(x)=b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0xx\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_0xx×f(x)modm(x)=b6​x7+b5​x6+b4​x5+b3​x4+b2​x3+b1​x2+b0​x

  • 若b7≠0b_7\ne0b7​​=0(即b7=1b_7=1b7​=1)则

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\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))+(b6​x7+b5​x6+b4​x5+b3​x4+b2​x3+b1​x2+b0​x)=(x4+x3+x+1)+(b6​x7+b5​x6+b4​x5+b3​x4+b2​x3+b1​x2+b0​x)

  用二进制表示即为
x×f(x)={b6b5b4b3b2b1b00,b7=0b6b5b4b3b2b1b00⊕00011011b7=1x\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)={b6​b5​b4​b3​b2​b1​b0​0,b7​=0b6​b5​b4​b3​b2​b1​b0​0⊕00011011b7​=1​
  而乘以xxx的更高次幂可以反复进行上面的计算,比如计算f(x)=x6+x4+x2+x+1,g(x)=x7+x+1f(x)=x^6+x^4+x^2+x+1,\;g(x)=x^7+x+1f(x)=x6+x4+x2+x+1,g(x)=x7+x+1的乘法,则有:其中
01010111×00000010=1010111001010111×00000100=01011110⊕00011011=0100011101010111×00001000=1000111001010111×00010000=00011100⊕00011011=0000011101010111×01000000=0000111001010111×01000000=0001110001010111×10000000=00111000f(x)×g(x)=f(x)×x7+f(x)×x+f(x)=01010111×10000011=01010111×(10000000⊕00000010⊕00000001)=00111000⊕10101110⊕01010111=1100000101010111\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=01011110⊕00011011=0100011101010111×00001000=1000111001010111×00010000=00011100⊕00011011=0000011101010111×01000000=0000111001010111×01000000=0001110001010111×10000000=00111000f(x)×g(x)=f(x)×x7+f(x)×x+f(x)=01010111×10000011=01010111×(10000000⊕00000010⊕00000001)=00111000⊕10101110⊕01010111=11000001
  故f(x)×g(x)=x7+x6+1f(x)\times g(x)=x^7+x^6+1f(x)×g(x)=x7+x6+1

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

【密码学基础】05 有限域相关推荐

  1. 学习之路-现代密码学基础-001

    学习之路-现代密码学基础-第一章密码学概论 转载于:https://www.cnblogs.com/vegetables-Adanos/p/5371420.html

  2. python基础05

    python基础05 昨日内容回顾及作业讲解 列表:增  append  insert  extend 删 remove pop clear del 改  li[索引] = '被修改的内容'  li ...

  3. 计算机 密码学 实验一,计算机网络安全技术-实验一-密码学基础

    计算机网络安全技术-实验一-密码学基础 计算机科学与技术系实 验 报 告专业名称 网络工程 课程名称 计算机网络安全技术 项目名称 密码学 班 级 13 网工(1)班 学 号 1304031030 姓 ...

  4. http、https、密码学基础、GET和POST区别

    http协议相关: http协议的特性: http协议是建立在TCP/IP协议之上应用层协议,默认端口为80或者8080.http协议的的特点是无状态,无连接(并不是真的没有连接,而是在请求数据的时候 ...

  5. ECC密钥结构和密码学基础

    参考链接 密码学基础3:密钥文件格式完全解析 ECC数据结构

  6. 重力传感器 测重力代码_“重力瀑布”如何帮助您教授孩子的密码学基础知识...

    重力传感器 测重力代码 by Kamil Tustanowski 通过卡米尔·图斯坦诺夫斯基 "重力瀑布"如何帮助您教授孩子的密码学基础知识 (How "Gravity ...

  7. 第二章密码学基础与应用备考要点及真题分布

    第二章密码学基础与应用 1.密码学基本概念 2.分组密码 3.序列密码 4.Hash函数 5.公钥密码体制 6.数字签名 7.认证 8.密钥管理

  8. 软考信息安全工程师备考笔记2:第二章密码学基础与应用备考要点

    第2章:密码学基础与应用 密码学基础与应用备考要点 https://www.moondream.cn/?p=1319 扫一扫加入信息安全工程师备考群 欢迎加入最棒的信息安全工程师社群,分享信息安全工程 ...

  9. 【重难点】【Java基础 05】说一说你平时遇到的异常、什么情景下会用到反射、反射的底层原理

    [重难点][Java基础 05]说一说你平时遇到的异常.什么情景下会用到反射.反射的底层原理 文章目录 [重难点][Java基础 05]说一说你平时遇到的异常.什么情景下会用到反射.反射的底层原理 一 ...

  10. 【CTF基础】有限域椭圆曲线定义与计算方式

    定义与基础运算 有限域椭圆曲线定义 Ep(a, b)表示椭圆曲线方程y**2 = x**3 + a*x + b,在有限域Fp中,表示所有在同余意义上满足该方程的(x, y)点,例如下图:(图片来自网络 ...

最新文章

  1. github READme 的使用教程
  2. Luke 5—— 可视化 Lucene 索引查看工具,可以查看ES的索引
  3. postergresql mysql_PosttgreSQL快速入门:PostgreSQL的安装和配置
  4. 用html5的canvas画布绘制贝塞尔曲线
  5. Leetcode: Balanced Binary Tree
  6. Linux命令行–基本的bash shell命令
  7. Java clone浅复制与深复制的区别
  8. 160329(二)、web.xml配置详解
  9. python3 数学常量
  10. wifi信号增强android,WiFi信号增强大师APP
  11. java调用kettle例子_Kettle API - Java调用示例
  12. armv7 cortex a系列编程手册_AWTK能为现代GUI编程带来何种改变?
  13. scrape创建_确实在2分钟内对Scrape公司进行了评论和评分
  14. java中有关线程的题目
  15. CentOS7下Hive的安装配置
  16. CDOJ 1805 矩阵 数学
  17. c语言程序设计多个文件,c语言如何单文件变多文件(2个文件),求大神帮忙!!...
  18. html div 监听事件无效,在AngularJS中将html替换为div后,Click事件不起作用
  19. java获取当前时间sql_JAVA中获取当前系统时间
  20. OpenCore黑苹果引导配置说明-基于OpenCore-0.7.0-06-08正式版

热门文章

  1. 精通JavaScript+jQuery:100%动态网页设计密码 中文PDF扫描版
  2. 计算机怎么新建word文档,右键新建没有word文档怎么办?Win10新建word文档的方法...
  3. 天气和气象数据网站集合
  4. 15、AutoLayout使用UIScrollView
  5. 【k8s】K8S中的IP地址(Node IP、Pod IP、Cluster IP、External IP、Internal-IP)
  6. 虚拟机软件、虚拟机、操作系统它们之间的关系
  7. vmware服务器虚拟机重新安装系统教程,在VMware虚拟机装系统教程_vmware装系统_U盘工具_装系统教程_课课家...
  8. 在Kali Linux上安装LOIC
  9. python源码剖析_Python源码剖析 深度探索动态语言核心技术
  10. smartadmin mysql_smart-admin/README.md at master · Rainforestor/smart-admin · GitHub