一、密码学
密码学(Cryptography)是关于信息编码和解码的科学。 银行一直在实用密码学处理财务信息。现代密码学中包含有很深的数学知识,"椭圆曲线(Elliptic curves)" 是其中的一部分,安德鲁 · 怀尔斯(Andrew Wiles)证明费马大定理(Fermat's Last Theorem)时都用到了这部分。
这一节只是简单的介绍,但是是第一次接触有限域(finite fields)和有限向量空间(finite vector space). 域 R n \textrm{R}^n Rn 包含所有的实数,"模运算" 的域只包含 p p p 个整数 0 , 1 , 2 , ⋯ , p − 1 0,1,2,\cdots,p-1 0,1,2,⋯,p−1,这是一个 p p p 元有限域。 R n \textrm{\pmb R}^n Rn 空间中有无穷多个向量,而现在这个 p p p 元有限域的信息空间只含有 p n p^n pn 个长度为 n n n 的信息。如字母表 A A A 到 Z Z Z 是有限的(此时 p = 26 p=26 p=26).
本节中的编码方法很容易破解,因为这些对于实际的安全来说太过简单。计算机的强大使得我们需要更加复杂的密码,因为现在计算机的能力可以很快的推测出一个小的编码矩阵。但是矩阵密码(希尔加密法)也可以使得我们用一种新的方式看到线性代数的作用。
我们在编码和解码中的所有计算都是 "mod p",但是线性代数的一些核心概念如线性无关、基、逆矩阵和行列式在此种变化下仍然适用。我们是在研究 "有限域上的线性代数"。下面是 mod p 的含义:
27 ≡ 2 ( mod 5 ) 表示 5 整除 27 − 2 y ≡ x ( mod p ) 表示 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
y y y 除以 5 5 5 可能得到的余数 x = 0 , 1 , 2 , 3 , 4 x=0,1,2,3,4 x=0,1,2,3,4,而 5 , − 5 , 10 , − 10 , ⋯ 5,-5,10,-10,\cdots 5,−5,10,−10,⋯ 这些数除以 5 5 5 都没有余数,它们与 0 0 0 对模 5 5 5 同余,记为 y ≡ 0 ( mod 5 ) y\equiv0\,(\textrm{mod} \,5) y≡0(mod5). y = 6 , − 4 , 11 , − 9 y=6,-4,11,-9 y=6,−4,11,−9 这些数与 1 1 1 对模 5 5 5 同余,即 y ≡ 1 ( mod 5 ) y\equiv1\,(\textrm{mod}\,5) y≡1(mod5).
符号 ≡ \equiv ≡ 称为同余(congruent) ,我们称这个是 "模运算"(Modular Arithmetic) 。每个整数 y y y 在求 mod p \textrm{mod}\, p modp 时,均会得到 x = 0 , 1 , 2 , ⋯ , p − 1 x=0,1,2,\cdots,p-1 x=0,1,2,⋯,p−1 中的一个值。
当 p p p 是素数时,这个理论是最佳的。字母 A A A 到 Z Z Z 共有 26 26 26 个,很不幸的是,此时 p = 26 p=26 p=26 不是素数。但是密码学可以处理这个问题。
二、模运算
线性代数是基于向量的线性组合。现在我们的向量 ( x 1 , x 2 , ⋯ , x n ) (x_1,x_2,\cdots,x_n) (x1,x2,⋯,xn) 限制为 x = 0 , 1 , 2 , ⋯ , p − 1 x=0,1,2,\cdots,p-1 x=0,1,2,⋯,p−1 这样的整数,当我们进行 "mod p " "\textrm{mod}\,p" "modp" 时,所有的计算都只会得到这些整数,这表明:任何超范围的整数 y y y 都要除以 p p p 并取余数 x x x:
y = q p + x y ≡ x ( mod p ) 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余x mod 2 的加法: \pmb{\textrm{mod\,2\,的加法:}} mod2的加法: 10 ≡ 1 ( mod 3 ) , 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 ( mod 3 ) 10+16\equiv1+1\,(\textrm{mod}\,3) 10+16≡1+1(mod3):
我们可以先计算 10 + 16 10+16 10+16,得到 26 26 26 后再除以 3 3 3 余 2 2 2.
也可以将余数相加, 1 + 1 1+1 1+1 也可以得到相同的答案 2 2 2.
mod 2 的加法: \pmb{\textrm{mod\,2\,的加法:}} mod2的加法: 11 ≡ 1 ( mod 2 ) , 17 ≡ 1 ( mod 2 ) 11\equiv1\,(\textrm{mod\,2}),17\equiv1\,(\textrm{mod\,2}) 11≡1(mod2),17≡1(mod2) 而 11 + 17 = 28 ≡ 0 ( mod 2 ) 11+17=28\equiv0\,(\textrm{mod\,2}) 11+17=28≡0(mod2):
余数相加是 1 + 1 = 2 1+1=2 1+1=2,但是结果并不是 2 2 2,还要加上最后一步 2 ≡ 0 ( mod 2 ) 2\equiv0\,(\textrm{mod\,2}) 2≡0(mod2).
mod p 的加法: \pmb{\textrm{mod}\,p\,\textrm{的加法:}} modp的加法:由上述例子可知, mod p \textrm{mod\,}p modp 的加法是合理的。mod p \textrm{mod}\,p modp 的乘法也是如此 ,当 p = 3 p=3 p=3 时:
10 ≡ 1 ( mod 3 ) 乘 16 ≡ 1 ( mod 3 ) 即 1 ⋅ 1 ≡ 1 ( mod 3 ) 所以 160 ≡ 1 ( mod 3 ) 5 ≡ 2 ( mod 3 ) 乘 8 ≡ 2 ( mod 3 ) 即 2 ⋅ 2 ≡ 1 ( mod 3 ) 所以 40 ≡ 1 ( mod 3 ) \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)结论:我们可以很安全的进行 mod p \textrm{mod}\,p modp 的加法和乘法,因此可以进行线性组合。这是线性代数的关键运算。但是 mod p \textrm{mod}\,p modp 可以做除法吗?
在实数域乘法中, y y y 的逆是 1 / y 1/y 1/y( y ≠ 0 y\neq0 y=0),意义是:我们可以找到另一个实数,使得 y z = 1 yz=1 yz=1,非零元可逆是域的一部分。那么 mod p \textrm{mod}\,p modp 的乘法永远可逆吗? 即对于每个数 y = 1 , 2 , ⋯ , p − 1 y=1,2,\cdots,p-1 y=1,2,⋯,p−1 我们是否都能找到另外的一个数 z = 1 , 2 , ⋯ , p − 1 z=1,2,\cdots,p-1 z=1,2,⋯,p−1 使得 y z ≡ 1 ( mod p ) yz\equiv1\,(\textrm{mod}\,p) yz≡1(modp) ?
如 3 − 1 ≡ 4 ( mod 11 ) , 2 − 1 ≡ 6 ( mod 11 ) , 5 − 1 ≡ 9 ( mod 11 ) 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 ( mod 11 ) , 2 ⋅ 6 ≡ 1 ( mod 11 ) , 5 ⋅ 9 ≡ 1 ( mod 11 ) 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). 同样可以求出 7 z ≡ 1 ( mod 11 ) 7z\equiv1\,(\textrm{mod}\,11) 7z≡1(mod11),求数乘法的逆是求逆矩阵的关键。
下面说明当 p p p 不是素数时, mod p \textrm{mod}\,p modp 意义下乘法的逆会有问题。例如 p = 26 p=26 p=26 可以分解成 2 ⋅ 13 2\cdot13 2⋅13,则 y = 2 y=2 y=2 不可能有 mod 26 \textrm{mod\,26} mod26 意义下的逆 z z z ,这会要求 2 z ≡ 1 ( mod 26 ) 2z\equiv1\,(\textrm{mod}\,26) 2z≡1(mod26),而这是不可能的,因为 2 z 2z 2z 和 26 26 26 都是偶数!
同样地,当 p = 25 p=25 p=25 时, 5 5 5 也没有 mod 25 \textrm{mod\,25} mod25 意义下的逆 z z z, 5 z ≡ 1 ( mod 25 ) 5z\equiv1\,(\textrm{mod\,25}) 5z≡1(mod25) 是无解的, 5 z − 1 5z-1 5z−1 不可能是 5 5 5 的倍数,所以也不可能是 25 25 25 的倍数。
任意的 y ( 0 < y < p ) 当且仅当 p 为素数时,mod p 意义下有乘法逆 \boxed{\pmb{任意的\,y\,(0<y<p)\,当且仅当\,p\,为素数时,\textrm{mod}\,p\,意义下有乘法逆}} 任意的y(0<y<p)当且仅当p为素数时,modp意义下有乘法逆要求逆需要 y , 2 y , 3 y , ⋯ , p y y,2y,3y,\cdots,py y,2y,3y,⋯,py 除以 p p p 有不同的余数。如果 m y my my 和 n y ( m ≠ n , 0 < m , n < p ) ny\,(m\neq n,0<m,n<p) ny(m=n,0<m,n<p) 有相同的余数 x x x,则 ( m − n ) y (m-n)y (m−n)y 将会被 p p p 整除。素数 p p p 要么整除 y y y,要么整除 m − n m-n m−n,这两者都不可能,这是因为 0 < ∣ m − n ∣ < p , 0 < y < p 0<|m-n|<p, 0<y<p 0<∣m−n∣<p,0<y<p. 所以, y , 2 y , ⋯ , p y y,2y,\cdots,py y,2y,⋯,py 除以 p p p 有不同的余数:其中的一个余数必为 x = 1 x=1 x=1.
三、谜式密码机和希尔密码
Lester Hill 在 American Mathematical Monthly(1929) 上发表了他的密码算法(编码和解码系统),这个思想很简单,但是在某种程度上开启了密码学从语言学到数学的转变,在那时之前的编码主要是混合字母和重排信息。德国海军在二战时使用的谜式密码(Enigma code) 是一个巨大的进步,他们当时使用的机器我们现在看起来就像一个原始的计算机。英国人建立了布莱切利园(Bletchley Park)来破解谜式密码,它们聘请了揭秘者和语言学家,然后很幸运的是阿兰·图灵(Alan Turing)也在其中。
如果看过关于图灵的电影:《模仿游戏》( T h e I m i t a t i o n G a m e The \,Imitation\,Game TheImitationGame),虽说其中的大部分都不真实(《心灵捕手》( G o o d W i l l H u n t i n g Good \,Will\,Hunting GoodWillHunting)和《美丽心灵》( A B e a u t i f u l M i n d A\,Beautiful\,Mind ABeautifulMind)也是如此),但是其中破解谜式密码的核心思想是正确的,图灵利用了人类在编码和无线电通信中的弱点,德国海军司令部公开的发送它们的编码序列,如果不是因为这个弱点,那么这个密码就会因为太复杂而无法破解,密码的破解需要英国的电子设备来解开德国的电子设备,而这也需要天才。
阿兰·图灵毫无疑问是一个天才 ------ 他是英格兰最杰出的数学家之一,他在1954年去世,有一个悲惨的命运,安德鲁·霍奇斯(Andrew Hodges)写的关于图灵的传记非常好。图灵是在波兰被入侵的第二天抵达的布莱切利园。这要归功于温斯顿·丘吉尔(Winston Churchill),在他需要时给予了快速且全面的支持。
谜式密码机有齿轮和转盘,而希尔密码只需要一个矩阵,希尔密码现在可以用线性代数来解释。后面会看到解码时如何涉及到逆矩阵。加密和解密的所有步骤都使用模运算, mod p \textrm{mod} \,p modp 的乘法和逆。
四、矩阵的模运算
加法、减法和乘法是计算 A x A\boldsymbol x Ax(矩阵左乘向量)的全部运算。要计算 mod p \textrm{mod}\,p modp 的乘法,也像之前一样用 A A A 中的整数乘上 x \boldsymbol x x 中的整数 ------ 然后将 A x A\boldsymbol x Ax 中的每个元素都替换成 mod p \textrm{mod}\,p modp 运算后的值。
关键问题:什么时候 A x ≡ b ( mod p ) A\boldsymbol x\equiv\boldsymbol b\,(\textrm{mod}\,p) Ax≡b(modp) 有解?这里仍然存在四个子空间 C ( A ) , N ( A ) , C ( A T ) , N ( A T ) \pmb C(A),\pmb N(A),\pmb C(A^T),\pmb N(A^T) C(A),N(A),C(AT),N(AT) 吗?它们仍然成对正交吗? mod p \textrm{mod}\,p modp 运算下的矩阵 A A A 的行列式非零时, mod p \textrm{mod}\,p modp 运算下的矩阵 A A A 仍然存在逆矩阵吗?令人欣慰的是后三个问题的答案是肯定的(但是求逆问题要求 p p p 是一个素数)。
我们可以使用高斯-若尔当消元法求解 A − 1 ( mod p ) A^{-1}\,(\textrm{mod}\,p) A−1(modp),即将 [ A I ] \begin{bmatrix}A&I\end{bmatrix} [AI] 化成 [ I A − 1 ] \begin{bmatrix}I&A^{-1}\end{bmatrix} [IA−1]. 或者我们使用行列式和代数余子式矩阵 C C C 的公式 A − 1 = ( det A ) − 1 C T A^{-1}=(\det A)^{-1}C^{T} A−1=(detA)−1CT. 下面以 mod 3 \textrm{mod}\,3 mod3 运算的 2 × 2 2\times2 2×2 的矩阵 A A A 为例: [ A I ] = [ 2 0 1 0 2 1 0 1 ] → [ 2 0 1 0 0 1 2 1 ] → 2 − 1 ≡ 2 行 1 乘以 [ 1 0 2 0 0 1 2 1 ] = [ I A − 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! 用 A A A 乘 A A A 确实会得到 mod 3 \textrm{mod}\,3 mod3 运算下的单位矩阵: A 2 = A A − 1 = [ 2 0 2 1 ] [ 2 0 2 1 ] = [ 4 0 6 1 ] = [ 1 0 0 1 ] ( mod 3 ) 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) A A A 的行列式为 2 2 2,通过代数余子式公式也能够得到 A − 1 ≡ A : A^{-1}\equiv A: A−1≡A: [ 2 0 2 1 ] − 1 = 2 − 1 [ 1 − 0 − 2 2 ] ≡ 2 [ 1 − 0 − 2 2 ] ≡ [ 2 0 2 1 ] ( mod 3 ) \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)定理: mod p \textrm{mod}\,p modp 运算下,当且仅当 ( det A ) − 1 (\det A)^{-1} (detA)−1 存在时, A − 1 A^{-1} A−1 存在。
这个定理要求: det A \det A detA 和 p p p 没有公因数。
五、使用希尔密码算法加密
原始的密码是使用字母 A A A 到 Z Z Z,因此 p = 26 p=26 p=26. 希尔选择了一个 n × n n\times n n×n 的加密矩阵 E E E,使得 det E \det E detE 无法被 2 2 2 或 13 13 13 整除,因此 det E \det E detE 这个数有一个 mod 26 \textrm{mod}\,26 mod26 运算的逆,矩阵 E E E 也存在逆矩阵, E − 1 ≡ D ( mod 26 ) E^{-1}\equiv D\,(\textrm{mod}\,26) E−1≡D(mod26) 将是解码信息的解密矩阵(decrytion matrix).
现在我们将每个字母的信息都转换成 0 0 0 到 25 25 25 的一个整数,我们通常选取 A = 0 , B = 1 , ⋯ , Z = 25 A=0,B=1,\cdots,Z=25 A=0,B=1,⋯,Z=25,这个没什么问题,因为使用矩阵后这个密码将会变得更不易破解。下面是希尔密码算法的大致步骤:
- 忽略空格并且将信息分成大小为 n n n 的块 v 1 , v 2 , ⋯ \boldsymbol v_1,\boldsymbol v_2,\cdots v1,v2,⋯;
- 然后将每个信息块都在 mod p \textrm{mod}\,p modp 意义下左乘矩阵 E E E;
- 加密后的信息为 E v 1 , E v 2 , ⋯ E\boldsymbol v_1,E\boldsymbol v_2,\cdots Ev1,Ev2,⋯.
下例中 det E = 583 ≡ 11 ( mod p ) \det E=583\equiv11\,(\textrm{mod}\,p) detE=583≡11(modp) D = E − 1 = [ 2 3 15 5 8 12 1 13 4 ] − 1 ≡ [ 10 19 16 4 23 7 17 5 19 ] ( mod 26 ) 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)当然,密码破解者不会知道矩阵 E E E 或者 D D D,通常而言,块的大小 n n n 也是未知的。但是在希尔的想法中 n n n 不会太大,而现在用计算机是可以快速找到 E E E 和 D D D 的。
如何希尔密码使用如下方式处理,不知道会不会变得非常难破解:选择一个非常大的矩阵和一个很大的素数 p p p 先加密一次,然后使用不同的块大小 n 2 n_2 n2 和一个大矩阵 E 2 E_2 E2 大素数 p 2 p_2 p2 进行二次加密。
六、有限域和有限向量空间
在代数中,域 F \textrm{\pmb F} F 是一个数集,它里面的数可以相加、相乘和求逆(即除法,只有 0 0 0 不能求逆)。我们熟悉实数域 R \textrm{\pmb R} R、复数域 C \textrm{\pmb C} C 和有理数域 Q \pmb{\textrm Q} Q(由整数的比值构成 p q \dfrac{p}{q} qp,其中 q ≠ 0 q\neq0 q=0). 我们从域 F \textrm{\pmb F} F 出发,可以构造向量 v = ( f 1 , f 2 , ⋯ , f n ) \boldsymbol v=(f_1,f_2,\cdots,f_n) v=(f1,f2,⋯,fn),通过向量的线性组合可以构造出向量空间。因此,线性代数是从域 F \textrm{\pmb F} F 开始的。
学习线性代数过程中,我们应该首先理解的是 R n \textrm{\pmb R}^n Rn 和它的子空间,然后对于其它的域和其向量空间的理解就很自然了,我们只需要考虑当域不为 R \textrm{\pmb R} R 时有什么新的性质。
下面在上述问题有限域(finite fields) 情形下的回答。可能性会变得非常有限,但是也会很有趣。起点(并不是终点)有限域 F p \textrm{\pmb F}_p Fp,它只包含有 0 , 1 , 2 , ⋯ , p − 1 0,1,2,\cdots,p-1 0,1,2,⋯,p−1 这些数,并且 p p p 是一个素数。我们首先关注域 F 2 \textrm{\pmb F}_2 F2,这个域例只含有 2 2 2 个数 " 0 " "\pmb0" "0" 和 " 1 " "\pmb1" "1",我们可以将 0 \pmb0 0 看成 "偶数",将 1 1 1 看成奇数,因为它们的加法和乘法的规则与偶数和奇数的规则相同: 偶数 + 奇数 = 奇数,偶数 × 奇数 = 偶数 偶数 + 奇数 = 奇数,偶数 × 奇数=偶数 偶数+奇数=奇数,偶数×奇数=偶数。 加法表 0 1 0 0 1 1 1 0 乘法表 0 1 0 0 0 1 0 1 \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这个是 "mod 2 " "\textrm{mod}\,2" "mod2" 的加法和乘法运算。
从这个域 F 2 \textrm{\pmb F}_2 F2 我们可以构造出像 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) 这样的向量,它们各有三个分量,而每个分量可以由两种选择:因此向量空间 ( F 2 ) 3 (\textrm{\pmb F}_2)^3 (F2)3 中共有 2 3 = 8 2^3=8 23=8 个不同的向量。由子空间的要求可以知道所有的可能性:
- a) 零维子空间只包含一个向量 0 = ( 0 , 0 , 0 ) \boldsymbol 0=(0,0,0) 0=(0,0,0)
- b) 一维子空间包含 0 \boldsymbol 0 0 和类似于 v \boldsymbol v v (只有 1 1 1 个 1 1 1)的向量。注意: v + v = 0 ! \boldsymbol v+\boldsymbol v=\boldsymbol 0! v+v=0!( mod 2 \textrm{mod }2 mod 2)
- c) 二维子空间含有如向量 v \boldsymbol v v 和 w \boldsymbol w w 构成的一组基,共有 4 4 4 个向量: 0 , v , w , v + w \boldsymbol 0,\boldsymbol v,\boldsymbol w,\boldsymbol v+\boldsymbol w 0,v,w,v+w;
- d) 完整的三维子空间 F 2 3 \textrm{\pmb F}_2^3 F23 共有 8 8 8 个向量。
( F 2 ) 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),这些向量线性无关,它们可以生成空间 ( F 2 ) 3 (\textrm{\pmb F}_2)^3 (F2)3,它们由组合系数 0 0 0 和 1 1 1 生成的八种线性组合构成了整个 ( F 2 ) 3 (\textrm{\pmb F}_2)^3 (F2)3.
那么用来左乘这些向量的矩阵是什么样的呢?矩阵可以是 1 × 3 1\times3 1×3, 2 × 3 2\times3 2×3 或 3 × 3 3\times3 3×3 的,当矩阵是 3 × 3 3\times3 3×3 的情况下,我们可以考虑它们的逆矩阵。它们的行列式只可能是 0 0 0(奇异矩阵)或 1 1 1(可逆矩阵)。下面是一些矩阵的例子: A = [ 1 0 0 1 1 0 1 1 1 ] B = [ 1 1 0 0 1 1 1 0 1 ] C = [ 1 1 1 0 0 1 1 0 0 ] 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= 111011001 B= 101110011 C= 101100110 在域 F 2 \textrm{\pmb F}_2 F2 上总共有 2 9 2^9 29 个这种 3 × 3 3\times3 3×3 的矩阵,其中有 ( 2 3 − 1 ) ( 2 3 − 2 ) ( 2 3 − 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 个可逆矩阵,大部分都是奇异矩阵。
下面提一下 2 2 = 4 2^2=4 22=4 个元素的域,用于结束对域 F 2 \pmb{\textrm F}_2 F2 的讨论。这种情况下不会使用 mod 4 \textrm{mod 4} mod 4 的乘法,因为 4 4 4 并不是素数,不然的话 2 × 2 2\times2 2×2 会得到 0 0 0, 2 2 2 也不可逆,这并不是一个域。单数我们可以从 F 2 \textrm{\pmb F}_2 F2 中的数 0 0 0 和 1 1 1 开始,然后再发明两个数 a a a 和 1 + a 1+a 1+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),那么此时 a a a 和 ( 1 + a ) (1+a) (1+a) 互逆,但是这并不明显! 加法 0 1 a 1 + a 0 0 1 a 1 + a 1 1 0 1 + a a a a 1 + a 0 1 1 + a 1 + a a 1 0 乘法 0 1 a 1 + a 0 0 0 0 0 1 0 1 a 1 + a a 0 a 1 + a 1 1 + a 0 1 + a 1 a \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 = 2 p=2 p=2,对于任意的素数 p p p 都有域 F p \textrm{\pmb F}_p Fp,它们都使用 mod p \textrm{mod }p mod p 的加法和乘法运算,可以用于表示密码算法中的字母。域 F p \textrm{\pmb F}_p Fp 提供了空间 ( F p ) n (\textrm {\pmb F}_p)^n (Fp)n 中向量 v = ( f 1 , f 2 , ⋯ , f n ) \boldsymbol v=(f_1,f_2,\cdots,f_n) v=(f1,f2,⋯,fn) 的分量,同时提供了可以左乘这些向量的矩阵中的元素。这些域 F p \textrm{\pmb F}_p Fp 是最常用的有限域。
所有的有限域均有 p k p^k pk 个元素(其中 p p p)为素数,上述例子中 0 , 1 , a , 1 + a 0,1,a,1+a 0,1,a,1+a 共有 4 4 4 个元素。