10.7 密码学中的线性代数
一、密码学
密码学(Cryptography)是关于信息编码和解码的科学。 银行一直在实用密码学处理财务信息。现代密码学中包含有很深的数学知识,“椭圆曲线(Elliptic curves)” 是其中的一部分,安德鲁 · 怀尔斯(Andrew Wiles)证明费马大定理(Fermat’s Last Theorem)时都用到了这部分。
这一节只是简单的介绍,但是是第一次接触有限域(finite fields)和有限向量空间(finite vector space). 域 Rn\textrm{R}^nRn 包含所有的实数,“模运算” 的域只包含 ppp 个整数 0,1,2,⋯,p−10,1,2,\cdots,p-10,1,2,⋯,p−1,这是一个 ppp 元有限域。Rn\textrm{\pmb R}^nRn 空间中有无穷多个向量,而现在这个 ppp 元有限域的信息空间只含有 pnp^npn 个长度为 nnn 的信息。如字母表 AAA 到 ZZZ 是有限的(此时 p=26p=26p=26).
本节中的编码方法很容易破解,因为这些对于实际的安全来说太过简单。计算机的强大使得我们需要更加复杂的密码,因为现在计算机的能力可以很快的推测出一个小的编码矩阵。但是矩阵密码(希尔加密法)也可以使得我们用一种新的方式看到线性代数的作用。
我们在编码和解码中的所有计算都是 “mod p”,但是线性代数的一些核心概念如线性无关、基、逆矩阵和行列式在此种变化下仍然适用。我们是在研究 “有限域上的线性代数”。下面是 mod p 的含义:
27≡2(mod5)表示5整除27−2y≡x(modp)表示p整除y−x\begin{array}{ll}\pmb{27\equiv2\,(\textrm{mod} \,5)}&表示\,\pmb{5\,整除\,27-2}\\\pmb{y\equiv x\,(\textrm{mod}\,p)}&表示\pmb{\,p\,整除\,y-x}\end{array}27≡2(mod5)y≡x(modp)表示5整除27−2表示p整除y−x
yyy 除以 555 可能得到的余数 x=0,1,2,3,4x=0,1,2,3,4x=0,1,2,3,4,而 5,−5,10,−10,⋯5,-5,10,-10,\cdots5,−5,10,−10,⋯ 这些数除以 555 都没有余数,它们与 000 对模 555 同余,记为 y≡0(mod5)y\equiv0\,(\textrm{mod} \,5)y≡0(mod5). y=6,−4,11,−9y=6,-4,11,-9y=6,−4,11,−9 这些数与 111 对模 555 同余,即 y≡1(mod5)y\equiv1\,(\textrm{mod}\,5)y≡1(mod5).
符号 ≡\equiv≡ 称为同余(congruent),我们称这个是 “模运算”(Modular Arithmetic)。每个整数 yyy 在求 modp\textrm{mod}\, pmodp 时,均会得到 x=0,1,2,⋯,p−1x=0,1,2,\cdots,p-1x=0,1,2,⋯,p−1 中的一个值。
当 ppp 是素数时,这个理论是最佳的。字母 AAA 到 ZZZ 共有 262626 个,很不幸的是,此时 p=26p=26p=26 不是素数。但是密码学可以处理这个问题。
二、模运算
线性代数是基于向量的线性组合。现在我们的向量 (x1,x2,⋯,xn)(x_1,x_2,\cdots,x_n)(x1,x2,⋯,xn) 限制为 x=0,1,2,⋯,p−1x=0,1,2,\cdots,p-1x=0,1,2,⋯,p−1 这样的整数,当我们进行 “modp"“\textrm{mod}\,p"“modp" 时,所有的计算都只会得到这些整数,这表明:任何超范围的整数 yyy 都要除以 ppp 并取余数 xxx:
y=qp+xy≡x(modp)y除以p余x\boxed{\pmb{y=qp+x\kern 25pty\equiv x\,(\textrm{mod}\,p)\kern 20pty\,除以\,p\,余\,x}}y=qp+xy≡x(modp)y除以p余xmod2的加法:\pmb{\textrm{mod\,2\,的加法:}}mod2的加法: 10≡1(mod3),16≡1(mod 3)10\equiv1\,(\textrm{mod}\,3), 16\equiv1\,(\textrm{mod 3})10≡1(mod3),16≡1(mod 3) 且 10+16≡1+1(mod3)10+16\equiv1+1\,(\textrm{mod}\,3)10+16≡1+1(mod3):
我们可以先计算 10+1610+1610+16,得到 262626 后再除以 333 余 222.
也可以将余数相加,1+11+11+1 也可以得到相同的答案 222.
mod2的加法:\pmb{\textrm{mod\,2\,的加法:}}mod2的加法: 11≡1(mod2),17≡1(mod2)11\equiv1\,(\textrm{mod\,2}),17\equiv1\,(\textrm{mod\,2})11≡1(mod2),17≡1(mod2) 而 11+17=28≡0(mod2)11+17=28\equiv0\,(\textrm{mod\,2})11+17=28≡0(mod2):
余数相加是 1+1=21+1=21+1=2,但是结果并不是 222,还要加上最后一步 2≡0(mod2)2\equiv0\,(\textrm{mod\,2})2≡0(mod2).
modp的加法:\pmb{\textrm{mod}\,p\,\textrm{的加法:}}modp的加法:由上述例子可知,modp\textrm{mod\,}pmodp 的加法是合理的。modp\textrm{mod}\,pmodp 的乘法也是如此,当 p=3p=3p=3 时:
10≡1(mod3)乘16≡1(mod3)即1⋅1≡1(mod3)所以160≡1(mod3)5≡2(mod3)乘8≡2(mod3)即2⋅2≡1(mod3)所以40≡1(mod3)\begin{array}{rl}10\equiv1\,(\textrm{mod}\,3)\,乘\,16\equiv1\,(\textrm{mod}\,3)\,即\, 1\cdot1\equiv1\,(\textrm{mod\,3})&所以\,160\equiv1\,(\textrm{mod}\,3)\\5\equiv2\,(\textrm{mod}\,3)\,乘\,8\equiv2\,(\textrm{mod}\,3)\,即\,2\cdot2\equiv1\,(\textrm{mod\,3})&所以\,40\equiv1\,(\textrm{mod}\,3)\end{array}10≡1(mod3)乘16≡1(mod3)即1⋅1≡1(mod3)5≡2(mod3)乘8≡2(mod3)即2⋅2≡1(mod3)所以160≡1(mod3)所以40≡1(mod3)结论:我们可以很安全的进行 modp\textrm{mod}\,pmodp 的加法和乘法,因此可以进行线性组合。这是线性代数的关键运算。但是 modp\textrm{mod}\,pmodp 可以做除法吗?
在实数域乘法中,yyy 的逆是 1/y1/y1/y(y≠0y\neq0y=0),意义是:我们可以找到另一个实数,使得 yz=1yz=1yz=1,非零元可逆是域的一部分。那么 modp\textrm{mod}\,pmodp 的乘法永远可逆吗? 即对于每个数 y=1,2,⋯,p−1y=1,2,\cdots,p-1y=1,2,⋯,p−1 我们是否都能找到另外的一个数 z=1,2,⋯,p−1z=1,2,\cdots,p-1z=1,2,⋯,p−1 使得 yz≡1(modp)yz\equiv1\,(\textrm{mod}\,p)yz≡1(modp) ?
如 3−1≡4(mod11),2−1≡6(mod11),5−1≡9(mod11)3^{-1}\equiv4\,(\textrm{mod}\,11),2^{-1}\equiv6\,(\textrm{mod}\,11),5^{-1}\equiv9\,(\textrm{mod}\,11)3−1≡4(mod11),2−1≡6(mod11),5−1≡9(mod11),这是因为 3⋅4≡1(mod11),2⋅6≡1(mod11),5⋅9≡1(mod11)3\cdot4\equiv1\,(\textrm{mod\,11}),2\cdot6\equiv1\,(\textrm{mod\,11}),5\cdot9\equiv1\,(\textrm{mod}\,11)3⋅4≡1(mod11),2⋅6≡1(mod11),5⋅9≡1(mod11). 同样可以求出 7z≡1(mod11)7z\equiv1\,(\textrm{mod}\,11)7z≡1(mod11),求数乘法的逆是求逆矩阵的关键。
下面说明当 ppp 不是素数时,modp\textrm{mod}\,pmodp 意义下乘法的逆会有问题。例如 p=26p=26p=26 可以分解成 2⋅132\cdot132⋅13,则 y=2y=2y=2 不可能有 mod26\textrm{mod\,26}mod26 意义下的逆 zzz,这会要求 2z≡1(mod26)2z\equiv1\,(\textrm{mod}\,26)2z≡1(mod26),而这是不可能的,因为 2z2z2z 和 262626 都是偶数!
同样地,当 p=25p=25p=25 时,555 也没有 mod25\textrm{mod\,25}mod25 意义下的逆 zzz,5z≡1(mod25)5z\equiv1\,(\textrm{mod\,25})5z≡1(mod25) 是无解的,5z−15z-15z−1 不可能是 555 的倍数,所以也不可能是 252525 的倍数。
任意的y(0<y<p)当且仅当p为素数时,modp意义下有乘法逆\boxed{\pmb{任意的\,y\,(0<y<p)\,当且仅当\,p\,为素数时,\textrm{mod}\,p\,意义下有乘法逆}}任意的y(0<y<p)当且仅当p为素数时,modp意义下有乘法逆要求逆需要 y,2y,3y,⋯,pyy,2y,3y,\cdots,pyy,2y,3y,⋯,py 除以 ppp 有不同的余数。如果 mymymy 和 ny(m≠n,0<m,n<p)ny\,(m\neq n,0<m,n<p)ny(m=n,0<m,n<p) 有相同的余数 xxx,则 (m−n)y(m-n)y(m−n)y 将会被 ppp 整除。素数 ppp 要么整除 yyy,要么整除 m−nm-nm−n,这两者都不可能,这是因为 0<∣m−n∣<p,0<y<p0<|m-n|<p, 0<y<p0<∣m−n∣<p,0<y<p. 所以,y,2y,⋯,pyy,2y,\cdots,pyy,2y,⋯,py 除以 ppp 有不同的余数:其中的一个余数必为 x=1x=1x=1.
三、谜式密码机和希尔密码
Lester Hill 在 American Mathematical Monthly(1929) 上发表了他的密码算法(编码和解码系统),这个思想很简单,但是在某种程度上开启了密码学从语言学到数学的转变,在那时之前的编码主要是混合字母和重排信息。德国海军在二战时使用的谜式密码(Enigma code) 是一个巨大的进步,他们当时使用的机器我们现在看起来就像一个原始的计算机。英国人建立了布莱切利园(Bletchley Park)来破解谜式密码,它们聘请了揭秘者和语言学家,然后很幸运的是阿兰·图灵(Alan Turing)也在其中。
如果看过关于图灵的电影:《模仿游戏》(TheImitationGameThe \,Imitation\,GameTheImitationGame),虽说其中的大部分都不真实(《心灵捕手》(GoodWillHuntingGood \,Will\,HuntingGoodWillHunting)和《美丽心灵》(ABeautifulMindA\,Beautiful\,MindABeautifulMind)也是如此),但是其中破解谜式密码的核心思想是正确的,图灵利用了人类在编码和无线电通信中的弱点,德国海军司令部公开的发送它们的编码序列,如果不是因为这个弱点,那么这个密码就会因为太复杂而无法破解,密码的破解需要英国的电子设备来解开德国的电子设备,而这也需要天才。
阿兰·图灵毫无疑问是一个天才 —— 他是英格兰最杰出的数学家之一,他在1954年去世,有一个悲惨的命运,安德鲁·霍奇斯(Andrew Hodges)写的关于图灵的传记非常好。图灵是在波兰被入侵的第二天抵达的布莱切利园。这要归功于温斯顿·丘吉尔(Winston Churchill),在他需要时给予了快速且全面的支持。
谜式密码机有齿轮和转盘,而希尔密码只需要一个矩阵,希尔密码现在可以用线性代数来解释。后面会看到解码时如何涉及到逆矩阵。加密和解密的所有步骤都使用模运算,modp\textrm{mod} \,pmodp 的乘法和逆。
四、矩阵的模运算
加法、减法和乘法是计算 AxA\boldsymbol xAx(矩阵左乘向量)的全部运算。要计算 modp\textrm{mod}\,pmodp 的乘法,也像之前一样用 AAA 中的整数乘上 x\boldsymbol xx 中的整数 —— 然后将 AxA\boldsymbol xAx 中的每个元素都替换成 modp\textrm{mod}\,pmodp 运算后的值。
关键问题:什么时候 Ax≡b(modp)A\boldsymbol x\equiv\boldsymbol b\,(\textrm{mod}\,p)Ax≡b(modp) 有解?这里仍然存在四个子空间 C(A),N(A),C(AT),N(AT)\pmb C(A),\pmb N(A),\pmb C(A^T),\pmb N(A^T)C(A),N(A),C(AT),N(AT) 吗?它们仍然成对正交吗?modp\textrm{mod}\,pmodp 运算下的矩阵 AAA 的行列式非零时,modp\textrm{mod}\,pmodp 运算下的矩阵 AAA 仍然存在逆矩阵吗?令人欣慰的是后三个问题的答案是肯定的(但是求逆问题要求 ppp 是一个素数)。
我们可以使用高斯-若尔当消元法求解 A−1(modp)A^{-1}\,(\textrm{mod}\,p)A−1(modp),即将 [AI]\begin{bmatrix}A&I\end{bmatrix}[AI] 化成 [IA−1]\begin{bmatrix}I&A^{-1}\end{bmatrix}[IA−1]. 或者我们使用行列式和代数余子式矩阵 CCC 的公式 A−1=(detA)−1CTA^{-1}=(\det A)^{-1}C^{T}A−1=(detA)−1CT. 下面以 mod3\textrm{mod}\,3mod3 运算的 2×22\times22×2 的矩阵 AAA 为例:[AI]=[20102101]→[20100121]→2−1≡2行1乘以[10200121]=[IA−1]\begin{bmatrix}A&I\end{bmatrix}=\begin{bmatrix}\pmb2&\pmb0&1&0\\\pmb2&\pmb1&0&1\end{bmatrix}\rightarrow\begin{bmatrix}2&0&1&0\\0&1&2&1\end{bmatrix}\xrightarrow[2^{-1}\equiv2]{行\,1\,乘以}\begin{bmatrix}1&0&\pmb2&\pmb0\\0&1&\pmb2&\pmb1\end{bmatrix}=\begin{bmatrix}I&A^{-1}\end{bmatrix}[AI]=[22011001]→[20011201]行1乘以2−1≡2[10012201]=[IA−1]这个恰好有 A−1≡A!A^{-1}\equiv A!A−1≡A! 用 AAA 乘 AAA 确实会得到 mod3\textrm{mod}\,3mod3 运算下的单位矩阵:A2=AA−1=[2021][2021]=[4061]=[1001](mod3)A^2=AA^{-1}=\begin{bmatrix}2&0\\2&1\end{bmatrix}\begin{bmatrix}2&0\\2&1\end{bmatrix}=\begin{bmatrix}4&0\\6&1\end{bmatrix}=\begin{bmatrix}1&0\\0&1\end{bmatrix}(\textrm{mod}\,3)A2=AA−1=[2201][2201]=[4601]=[1001](mod3)AAA 的行列式为 222,通过代数余子式公式也能够得到 A−1≡A:A^{-1}\equiv A:A−1≡A:[2021]−1=2−1[1−0−22]≡2[1−0−22]≡[2021](mod3)\begin{bmatrix}2&0\\2&1\end{bmatrix}^{-1}=2^{-1}\begin{bmatrix}\kern 7pt1&-0\\-2&\kern 7pt2\end{bmatrix}\equiv2\begin{bmatrix}\kern 7pt1&-0\\-2&\kern 7pt2\end{bmatrix}\equiv\begin{bmatrix}2&0\\2&1\end{bmatrix}(\textrm{mod}\,3)[2201]−1=2−1[1−2−02]≡2[1−2−02]≡[2201](mod3)定理: modp\textrm{mod}\,pmodp 运算下,当且仅当 (detA)−1(\det A)^{-1}(detA)−1 存在时,A−1A^{-1}A−1 存在。
这个定理要求:detA\det AdetA 和 ppp 没有公因数。
五、使用希尔密码算法加密
原始的密码是使用字母 AAA 到 ZZZ,因此 p=26p=26p=26. 希尔选择了一个 n×nn\times nn×n 的加密矩阵 EEE,使得 detE\det EdetE 无法被 222 或 131313 整除,因此 detE\det EdetE 这个数有一个 mod26\textrm{mod}\,26mod26 运算的逆,矩阵 EEE 也存在逆矩阵,E−1≡D(mod26)E^{-1}\equiv D\,(\textrm{mod}\,26)E−1≡D(mod26) 将是解码信息的解密矩阵(decrytion matrix).
现在我们将每个字母的信息都转换成 000 到 252525 的一个整数,我们通常选取 A=0,B=1,⋯,Z=25A=0,B=1,\cdots,Z=25A=0,B=1,⋯,Z=25,这个没什么问题,因为使用矩阵后这个密码将会变得更不易破解。下面是希尔密码算法的大致步骤:
- 忽略空格并且将信息分成大小为 nnn 的块 v1,v2,⋯\boldsymbol v_1,\boldsymbol v_2,\cdotsv1,v2,⋯;
- 然后将每个信息块都在 modp\textrm{mod}\,pmodp 意义下左乘矩阵 EEE;
- 加密后的信息为 Ev1,Ev2,⋯E\boldsymbol v_1,E\boldsymbol v_2,\cdotsEv1,Ev2,⋯.
下例中 detE=583≡11(modp)\det E=583\equiv11\,(\textrm{mod}\,p)detE=583≡11(modp)D=E−1=[231558121134]−1≡[101916423717519](mod26)D=E^{-1}=\begin{bmatrix}2&3&15\\5&8&12\\1&13&4\end{bmatrix}^{-1}\equiv\begin{bmatrix}10&19&16\\4&23&7\\17&5&19\end{bmatrix}\,(\textrm{mod\,}26)D=E−1=251381315124−1≡104171923516719(mod26)当然,密码破解者不会知道矩阵 EEE 或者 DDD,通常而言,块的大小 nnn 也是未知的。但是在希尔的想法中 nnn 不会太大,而现在用计算机是可以快速找到 EEE 和 DDD 的。
如何希尔密码使用如下方式处理,不知道会不会变得非常难破解:选择一个非常大的矩阵和一个很大的素数 ppp 先加密一次,然后使用不同的块大小 n2n_2n2 和一个大矩阵 E2E_2E2 大素数 p2p_2p2 进行二次加密。
六、有限域和有限向量空间
在代数中,域 F\textrm{\pmb F}F 是一个数集,它里面的数可以相加、相乘和求逆(即除法,只有 000 不能求逆)。我们熟悉实数域 R\textrm{\pmb R}R、复数域 C\textrm{\pmb C}C 和有理数域 Q\pmb{\textrm Q}Q(由整数的比值构成 pq\dfrac{p}{q}qp,其中 q≠0q\neq0q=0). 我们从域 F\textrm{\pmb F}F 出发,可以构造向量 v=(f1,f2,⋯,fn)\boldsymbol v=(f_1,f_2,\cdots,f_n)v=(f1,f2,⋯,fn),通过向量的线性组合可以构造出向量空间。因此,线性代数是从域 F\textrm{\pmb F}F 开始的。
学习线性代数过程中,我们应该首先理解的是 Rn\textrm{\pmb R}^nRn 和它的子空间,然后对于其它的域和其向量空间的理解就很自然了,我们只需要考虑当域不为 R\textrm{\pmb R}R 时有什么新的性质。
下面在上述问题有限域(finite fields) 情形下的回答。可能性会变得非常有限,但是也会很有趣。起点(并不是终点)有限域 Fp\textrm{\pmb F}_pFp,它只包含有 0,1,2,⋯,p−10,1,2,\cdots,p-10,1,2,⋯,p−1 这些数,并且 ppp 是一个素数。我们首先关注域 F2\textrm{\pmb F}_2F2,这个域例只含有 222 个数 “0”“\pmb0”“0” 和 “1”“\pmb1”“1”,我们可以将 0\pmb00 看成 “偶数”,将 111 看成奇数,因为它们的加法和乘法的规则与偶数和奇数的规则相同:偶数+奇数=奇数,偶数×奇数=偶数偶数 + 奇数 = 奇数,偶数 × 奇数=偶数偶数+奇数=奇数,偶数×奇数=偶数。加法表01001110乘法表01000101\pmb{加法表}\kern 10pt\begin{array}{c|cc}&0&1\\\hline0&0&1\\1&1&0\\\end{array}\kern30pt\pmb{乘法表}\kern 5pt\begin{array}{c|}&0&1\\\hline0&0&0\\1&0&1\end{array}加法表01001110乘法表01000101这个是 “mod2”“\textrm{mod}\,2”“mod2” 的加法和乘法运算。
从这个域 F2\textrm{\pmb F}_2F2 我们可以构造出像 v=(0,0,1)\boldsymbol v=(0,0,1)v=(0,0,1) 和 w=(1,0,1)\boldsymbol w=(1,0,1)w=(1,0,1) 这样的向量,它们各有三个分量,而每个分量可以由两种选择:因此向量空间 (F2)3(\textrm{\pmb F}_2)^3(F2)3 中共有 23=82^3=823=8 个不同的向量。由子空间的要求可以知道所有的可能性:
- a) 零维子空间只包含一个向量 0=(0,0,0)\boldsymbol 0=(0,0,0)0=(0,0,0)
- b) 一维子空间包含 0\boldsymbol 00 和类似于 v\boldsymbol vv (只有 111 个 111)的向量。注意:v+v=0!\boldsymbol v+\boldsymbol v=\boldsymbol 0!v+v=0!(mod 2\textrm{mod }2mod 2)
- c) 二维子空间含有如向量 v\boldsymbol vv 和 w\boldsymbol ww 构成的一组基,共有 444 个向量:0,v,w,v+w\boldsymbol 0,\boldsymbol v,\boldsymbol w,\boldsymbol v+\boldsymbol w0,v,w,v+w;
- d) 完整的三维子空间 F23\textrm{\pmb F}_2^3F23 共有 888 个向量。
(F2)3(\textrm{\pmb F}_2)^3(F2)3 可能的基是什么呢?标准基包含 (1,0,0),(0,1,0)(1,0,0),(0,1,0)(1,0,0),(0,1,0) 和 (0,0,1)(0,0,1)(0,0,1),这些向量线性无关,它们可以生成空间 (F2)3(\textrm{\pmb F}_2)^3(F2)3,它们由组合系数 000 和 111 生成的八种线性组合构成了整个 (F2)3(\textrm{\pmb F}_2)^3(F2)3.
那么用来左乘这些向量的矩阵是什么样的呢?矩阵可以是 1×31\times31×3,2×32\times32×3 或 3×33\times33×3 的,当矩阵是 3×33\times33×3 的情况下,我们可以考虑它们的逆矩阵。它们的行列式只可能是 000(奇异矩阵)或 111(可逆矩阵)。下面是一些矩阵的例子:A=[100110111]B=[110011101]C=[111001100]A=\begin{bmatrix}1&0&0\\1&1&0\\1&1&1\end{bmatrix}\kern 20ptB=\begin{bmatrix}1&1&0\\0&1&1\\1&0&1\end{bmatrix}\kern 20ptC=\begin{bmatrix}1&1&1\\0&0&1\\1&0&0\end{bmatrix}A=111011001B=101110011C=101100110在域 F2\textrm{\pmb F}_2F2 上总共有 292^929 个这种 3×33\times33×3 的矩阵,其中有 (23−1)(23−2)(23−4)=7×6×4=168(2^3-1)(2^3-2)(2^3-4)=7\times6\times4=168(23−1)(23−2)(23−4)=7×6×4=168 个可逆矩阵,大部分都是奇异矩阵。
下面提一下 22=42^2=422=4 个元素的域,用于结束对域 F2\pmb{\textrm F}_2F2 的讨论。这种情况下不会使用 mod 4\textrm{mod 4}mod 4 的乘法,因为 444 并不是素数,不然的话 2×22\times22×2 会得到 000,222 也不可逆,这并不是一个域。单数我们可以从 F2\textrm{\pmb F}_2F2 中的数 000 和 111 开始,然后再发明两个数 aaa 和 1+a1+a1+a,并为它们制定两个规则:(a+a=0)\pmb{(a+a=0)}(a+a=0) 和 (a×a=1+a)\pmb{(a\times a=1+a)}(a×a=1+a),那么此时 aaa 和 (1+a)(1+a)(1+a) 互逆,但是这并不明显!加法01a1+a001a1+a1101+aaaa1+a011+a1+aa10乘法01a1+a00000101a1+aa0a1+a11+a01+a1a\begin{array}{c|}\pmb{加法}&0&1&a&1+a\\\hline0&0&1&a&1+a\\1&1&0&1+a&a\\a&a&1+a&0&1\\1+a&1+a&a&1&0\end{array}\kern 15pt\begin{array}{c|}\pmb{乘法}&0&1&a&1+a\\\hline0&0&0&0&0\\1&0&1&a&1+a\\a&0&a&1+a&1\\1+a&0&1+a&1&a\end{array}加法01a1+a001a1+a1101+aaaa1+a011+a1+aa10乘法01a1+a00000101a1+aa0a1+a11+a01+a1a不只是 p=2p=2p=2,对于任意的素数 ppp 都有域 Fp\textrm{\pmb F}_pFp,它们都使用 mod p\textrm{mod }pmod p 的加法和乘法运算,可以用于表示密码算法中的字母。域 Fp\textrm{\pmb F}_pFp 提供了空间 (Fp)n(\textrm {\pmb F}_p)^n(Fp)n 中向量 v=(f1,f2,⋯,fn)\boldsymbol v=(f_1,f_2,\cdots,f_n)v=(f1,f2,⋯,fn) 的分量,同时提供了可以左乘这些向量的矩阵中的元素。这些域 Fp\textrm{\pmb F}_pFp 是最常用的有限域。
所有的有限域均有 pkp^kpk 个元素(其中 ppp)为素数,上述例子中 0,1,a,1+a0,1,a,1+a0,1,a,1+a 共有 444 个元素。
