抽象代数
参考教材:密码编码学与网络安全
AES加密的数学基础
第一遍读感觉教材上对数学基础(群环域,多项式运算)P72-P91给的莫名奇妙
然后参考了知乎回答对群环域的解释
此时第二遍读教材,发现其实教材在讲每一部分的开始都写了教学目的.
学习这部分一定要明确目的,在陷入定理的证明时或者公式应用时时刻想想是在干什么
引入多项式构造
G
F
(
p
n
)
GF(p^n)
GF(pn)这一想法真的太神奇了,
将整数上的数论定理应用于多项式也真的太神奇了
另,教材P74页的图4.2是有错误的
抽象代数基础
图片来自代数结构入门:群、环、域、向量空间 - 知乎 (zhihu.com)
群
群
< G , ⋅ > <G,·> <G,⋅>表示一个定义了二元关系 ⋅ · ⋅的集合(注意这里 ⋅ · ⋅不一定是乘号,可以是所有二元关系的抽象表示)
如果G满足:
A1封闭性: ∀ a , b ∈ G → a ⋅ b ∈ b \forall a,b\in G\rightarrow a·b\in b ∀a,b∈G→a⋅b∈b
A2结合律: ∀ a , b ∈ G , a ⋅ ( b ⋅ c ) = ( a ⋅ b ) ⋅ c \forall a,b\in G,a·(b·c)=(a·b)·c ∀a,b∈G,a⋅(b⋅c)=(a⋅b)⋅c
A3单位元: ∃ e ∈ G , ∀ a ∈ G , e ⋅ a = a ⋅ e = a \exist e\in G,\forall a\in G,e·a=a·e=a ∃e∈G,∀a∈G,e⋅a=a⋅e=a
A4逆元: ∀ a ∈ G , ∃ a − 1 , a ⋅ a − 1 = a − 1 ⋅ a = e \forall a\in G,\exist a^{-1},a·a^{-1}=a^{-1}·a=e ∀a∈G,∃a−1,a⋅a−1=a−1⋅a=e
这里 − 1 ^{-1} −1不是一定是-1次幂,只是逆元的表示形式
集合G+A1+A2+A3+A4=群G
交换群
A5交换律: ∀ a , b ∈ G , a ⋅ b = b ⋅ a \forall a,b\in G,a·b=b·a ∀a,b∈G,a⋅b=b⋅a
群G+A5=交换群G
环
环
< R , + , × > <R,+,\times> <R,+,×>R是一个有两种二元运算的集合,这两种二元运算分别为加法 + + +和乘法 × \times ×
已知 < R , + > <R,+> <R,+>是交换群
如果R再满足
M1乘法封闭性: ∀ a , b ∈ R , a × b ∈ R \forall a,b\in R,a\times b\in R ∀a,b∈R,a×b∈R
M2乘法结合律: ∀ a , b , c ∈ R , a × ( b × c ) = ( a × b ) × c \forall a,b,c\in R,a\times (b\times c)=(a\times b)\times c ∀a,b,c∈R,a×(b×c)=(a×b)×c
M3乘法对加法的分配律: ∀ a , b , c ∈ R , { a × ( b + c ) = a × b + a × c ( a + b ) × c = a × c + b × c \forall a,b,c\in R,\begin{cases}a\times (b+c)=a\times b+a\times c\\(a+b)\times c=a\times c+b\times c\end{cases} ∀a,b,c∈R,{a×(b+c)=a×b+a×c(a+b)×c=a×c+b×c
注意这里没有写 a × ( b + c ) = ( b + c ) × a a \times (b+c)=(b+c)\times a a×(b+c)=(b+c)×a
因为这样写实际上是满足乘法交换律,而满足分配律不一定满足交换律,比如矩阵乘法
矩阵的左右乘结果一般是不一样的,但是矩阵乘法对矩阵加法是有结合律的
则称R为环
交换环
如果环R再满足
M4乘法交换律: ∀ a , b , c ∈ R , ( a × b ) × c = a × ( b × c ) \forall a,b,c\in R,(a\times b)\times c=a\times (b\times c) ∀a,b,c∈R,(a×b)×c=a×(b×c)
显然 R n ( Q ) R_n(Q) Rn(Q)是环但不是交换环
则称R为交换环
整环
如果交换环R再满足
M5乘法单位元: ∃ e , ∀ a ∈ R , e × a = a × e = a \exist e,\forall a\in R,e\times a=a\times e=a ∃e,∀a∈R,e×a=a×e=a
当 R = S R=S R=S为整数时, e = 1 e=1 e=1
当 R = R n ( Q ) R=R_n(Q) R=Rn(Q),n阶实数矩阵集合, e = E ( n ) e=E(n) e=E(n)n阶单位矩阵
M6无零因子,: ∀ a , b ∈ R , a × b = 0 → a = 0 o r b = 0 \forall a,b\in R,a\times b=0\rightarrow a=0\ or\ b=0 ∀a,b∈R,a×b=0→a=0 or b=0
则称R为整环
怎么理解"无0因子"?
显然 R n ( Q ) R_n(Q) Rn(Q)不满足M6,因为两个矩阵 A , B A,B A,B乘积是个0矩阵并不能说明 A A A或者 B B B矩阵有至少一个是零矩阵
比如
A = [ 0 0 0 0 0 0 0 0 1 ] B = [ 0 0 1 0 0 0 0 0 0 ] A=\begin{bmatrix} 0\ 0\ 0\\ 0\ 0\ 0\\ 0\ 0\ 1\\ \end{bmatrix}\ \ \ \ \ B=\begin{bmatrix} 0\ 0\ 1\\ 0\ 0\ 0\\ 0\ 0\ 0\\ \end{bmatrix} A=⎣⎡0 0 00 0 00 0 1⎦⎤ B=⎣⎡0 0 10 0 00 0 0⎦⎤
又如,令 Z 6 = { 0 , 1 , 2 , 3 , 4 , 5 } Z_6=\{0,1,2,3,4,5\} Z6={0,1,2,3,4,5},
定义 Z 6 Z_6 Z6上的乘法 ⊗ \otimes ⊗为 a ⊗ b = ( a × b ) m o d 6 a\otimes b=(a\times b\ )mod\ 6 a⊗b=(a×b )mod 6
定义 Z 6 Z_6 Z6上的加法 ⊕ \oplus ⊕为 a ⊕ b = ( a + b ) m o d 6 a\oplus b=(a+b)mod\ 6 a⊕b=(a+b)mod 6
显然 Z 6 Z_6 Z6满足 A 1 − A 5 , M 1 − M 5 A_1-A_5,M_1-M_5 A1−A5,M1−M5
但是 < Z 6 , + , × > <Z_6,+,\times> <Z6,+,×>不满足无零因子,比如
2 ⊗ 3 = ( 2 × 3 ) m o d 6 = 6 m o d 6 = 0 2\otimes 3=(2\times 3)mod \ 6=6mod\ 6=0 2⊗3=(2×3)mod 6=6mod 6=0
就是说,0这个元素一定也是在集合R中存在的,并且乘法运算结果为0一定和引入这个元素0有关
域
设 < R , + , × > <R,+,\times> <R,+,×>为一个整环,如果R再满足
M7乘法逆元: ∀ a ≠ 0 ∈ R , ∃ a − 1 ∈ R , a × a − 1 = 1 \forall a≠0\in R,\exist a^{-1}\in R,a\times a^{-1}=1 ∀a=0∈R,∃a−1∈R,a×a−1=1则称 a − 1 a^{-1} a−1为a的乘法逆元
注意乘法逆元也是 R R R中的
定义乘法逆元的作用实际上是可以使用除法,
除以一个数等于乘以该数的乘法逆元比如对于 < Z 7 , + , × > <Z_7,+,\times> <Z7,+,×>,由于模数为7是一个质数,由拓展欧几里得定理可知,
1到6都存在 Z 7 Z_7 Z7上的mod 7意义下的乘法逆元(0除外)
再比如对于全体整数就不是任何元素都有乘法逆元,只有1和-1有乘法逆元,
任何绝对值大于1的整数其乘法逆元应该是分数,不属于整数.
除了0之外的其他元素都有乘法逆元的整环是域
有限域GF§
符号意义:
G F ( p ) = < Z p , ⊕ , ⊗ > GF(p)=<Z_p,\oplus,\otimes > GF(p)=<Zp,⊕,⊗>
G F : G a l o i s F i e l d GF:Galois Field GF:GaloisField,伽罗华域
p p p:表示一个正素数
⊕ : ∀ a , b ∈ Z p , a ⊕ b = ( a + b ) m o d p \oplus:\forall a,b\in Z_p,a\oplus b=(a+b)\ mod\ p ⊕:∀a,b∈Zp,a⊕b=(a+b) mod p即模p加法
⊗ : ∀ a , b ∈ Z p , a ⊗ b = ( a × b ) m o d p \otimes : \forall a,b\in Z_p,a\otimes b=(a\times b)\ mod\ p ⊗:∀a,b∈Zp,a⊗b=(a×b) mod p即模屁乘法
为什么一定要求是一个素数?
当N为一个合数的时候 Z N = { 1 , 2 , 3 , . . . , N − 2 , N − 1 } Z_N=\{1,2,3,...,N-2,N-1\} ZN={1,2,3,...,N−2,N−1}不满足 M 6 M_6 M6无零因子,不是整环,因此不是域
为什么不满足 M 6 M_6 M6?
由已知,N是合数,则至少存在 n ∈ Z N , 1 < n < N , n ∣ N n\in Z_N,1<n<N,n|N n∈ZN,1<n<N,n∣N
如果 n 2 = N n^2=N n2=N,则有 n ⊗ n = n × n m o d N = 0 n\otimes n=n\times n\ mod\ N=0 n⊗n=n×n mod N=0
如果 n 2 ! = N n^2!=N n2!=N,则 ∃ n ′ ∈ ( 1 , N ) , n n ′ = N \exist n'\in (1,N),nn'=N ∃n′∈(1,N),nn′=N那么 n ⊗ n ′ = n n ′ m o d N = N m o d N = 0 n\otimes n'=nn'\ mod\ N=N\ mod \ N=0 n⊗n′=nn′ mod N=N mod N=0
故选取p为素数,就是为了保证 M 6 M_6 M6无零因子
同时,选取一个素数作为mod值,保证了 M 7 M_7 M7乘法逆元:
∀ a ∈ Z p , a ⊗ x = 1 \forall a\in Z_p,a\otimes x=1 ∀a∈Zp,a⊗x=1,即 a x ≡ 1 ( m o d p ) ax\equiv 1(mod\ p) ax≡1(mod p),显然当p为一个素数时有 g c d ( a , p ) = 1 gcd(a,p)=1 gcd(a,p)=1由2拓展欧几里得定理即可求出x的值
因此 Z p Z_p Zp就是一个有限域,用 G F ( p ) GF(p) GF(p)表示
Z p Z_p Zp上的数论定理
拓展欧几里得定理求乘法逆元
int exgcd(const int &a, const int &b, int &x, int &y) {//拓展欧几里得算法ax+by=1=gcd(a,b)
if (b == 0) {
x = 1;
y = 0;
return a;
}
int x2, y2;
int d = exgcd(b, a % b, x2, y2);
x = y2;
y = x2 - a / b * y2;
return d;
}
int inverse(const int &a, const int &mod) {//求a在模mod下的逆元
int x, y;
exgcd(a, mod, x, y);
return ((x % mod) + mod) % mod;
}
快速幂
int quick_pow(const int &base, const int &index, const int &mod) {//bash^index(% mod)
if (index == 0)
return 1;
else if (index == 1)
return base % mod;
else if (index % 2) {
return quick_pow(base * base % mod, index >> 1, mod) % mod;
} else {
return base * quick_pow(base * base % mod, index >> 1, mod) % mod;
}
}
多项式算术
为什么突然扯到"多项式算数"呢?
前面我们证明了对于整数集 Z N = { 0 , 1 , 2 , 3 , . . . , N − 1 } Z_N=\{0,1,2,3,...,N-1\} ZN={0,1,2,3,...,N−1},只有当 ∣ Z N ∣ = N |Z_N|=N ∣ZN∣=N为素数p时, Z p Z_p Zp才为一个域
如果想要得到一个元素个数为 2 n 2^n 2n的域, 2 n 2^n 2n当n>1时是一个合数,显然 Z p Z_p Zp做不到.
为什么要得到一个元素个数为 2 n 2^n 2n的域?计算机使用二进制编码,编码位数为n时就有 2 n 2^n 2n种编码,AES加密算法就用到了 G F ( 2 8 ) GF(2^8) GF(28)
并且,在 Z 8 Z_8 Z8中的数字乘法,其结果中个数字的出现次数显然是不均匀的,比如1出现了4次,2就出现了8次
模8乘法 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
2 | 0 | 2 | 4 | 6 | 0 | 2 | 4 | 6 |
3 | 0 | 3 | 6 | 1 | 4 | 7 | 2 | 5 |
4 | 0 | 4 | 0 | 4 | 0 | 4 | 4 | 3 |
5 | 0 | 5 | 2 | 7 | 4 | 1 | 6 | 3 |
6 | 0 | 6 | 4 | 2 | 4 | 3 | 4 | 2 |
7 | 0 | 7 | 6 | 5 | 3 | 3 | 2 | 1 |
而一个理想的密码是不能暴露词频信息的,显然用 Z 8 Z_8 Z8上的变换进行加密不理想,
Z
8
Z_8
Z8上不满足无0因子,并且乘法结果不均匀,
于是想一种乘法和除法的构造方法, 使得8个元素可以满足无0因子,并且可以有乘法逆(0除外)即成为一个域,并且乘法或者加法的结果的频率相等
怎么实现这个想法呢?
使用多项式运算就可以解决这个问题,因此引入了多项式运算
首先要研究的是如何构造一个有8个元素的域
将数的性质拓展到多项式式上
我们使用的一般是代数基本规则的普通多项式运算
然后拓展到系数在 G F ( p ) GF(p) GF(p)中的多项式运算
然后再拓展到系数在 G F ( p ) GF(p) GF(p),模一个 n n n次多项式 m ( x ) m(x) m(x)的多项式运算
最终目标是理解并应用最后一种多项式
普通多项式运算
多项式次数:最高次项的次数
多项式的表示:
f
(
x
)
=
a
n
x
n
+
a
n
−
1
x
n
−
1
+
.
.
.
+
a
1
x
+
a
0
=
∑
i
=
0
n
a
i
x
i
,
a
n
≠
0
f(x)=a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0=\sum_{i=0}^na_ix^i,a_n≠0
f(x)=anxn+an−1xn−1+...+a1x+a0=i=0∑naixi,an=0
如果
∀
a
i
∈
S
\forall a_i\in S
∀ai∈S则称
f
(
x
)
f(x)
f(x)是系数集
S
S
S上的多项式,令
<
A
,
+
,
×
>
<A,+,\times >
<A,+,×>表示S上的所有多项式以及加法和乘法二元关系
当 S = Z S=Z S=Z表示整数集的时候,显然A是满足 A 1 − A 5 , M 1 − M 6 A_1-A_5,M_1-M_6 A1−A5,M1−M6,是个整环,
但是不满足乘法逆元,比如 x x x的乘法逆元 x − 1 x^{-1} x−1,是一个指数为负的多项式,显然不在 A A A
设
f
(
x
)
=
∑
i
=
0
n
a
i
x
i
g
(
x
)
=
∑
i
=
0
m
b
i
x
i
a
n
b
m
≠
0
,
n
≥
m
f(x)=\sum_{i=0}^na_ix^i\\ g(x)=\sum_{i=0}^mb_ix^i\\ a_nb_m≠0,n\ge m
f(x)=i=0∑naixig(x)=i=0∑mbixianbm=0,n≥m
则普通多项式的加法运算
f
(
x
)
+
g
(
x
)
=
∑
i
=
0
m
(
a
i
+
b
i
)
x
i
+
∑
i
=
m
+
1
n
a
i
x
i
f(x)+g(x)=\sum_{i=0}^m(a_i+b_i)x^i+\sum_{i=m+1}^na_i x^i
f(x)+g(x)=i=0∑m(ai+bi)xi+i=m+1∑naixi
普通多项式乘法
f
(
x
)
g
(
x
)
=
∑
i
=
0
n
+
m
c
i
x
i
c
i
=
a
0
b
i
+
a
1
b
i
−
1
+
.
.
.
+
a
i
b
0
f(x)g(x)=\sum_{i=0}^{n+m}c_ix^i\\ c_i=a_0b_i+a_1b_{i-1}+...+a_ib_0
f(x)g(x)=i=0∑n+mcixici=a0bi+a1bi−1+...+aib0
系数在 Z p Z_p Zp中的多项式运算
当系数集是全体整数的时候,由于系数不都有乘法逆元,因此无法进行多项式除法
当系数集是一个域的时候,系数都有了乘法逆元,可以对多项式引入除法(带余除法)
可以类比整数的除法,求余数用 % \% %,求商用 / / /
那么在 Z p Z_p Zp中的多项式,求余式用 % \% %,求商式用 / / /
比如对于 Z 2 Z_2 Z2上的多项式 f ( x ) = x 4 + 1 = ( x + 1 ) ( x 3 + x 2 + x + 1 ) f(x)=x^4+1=(x+1)(x^3+x^2+x+1) f(x)=x4+1=(x+1)(x3+x2+x+1),则 f ( x ) / ( x + 1 ) = x 3 + x 2 + x + 1 f(x)/(x+1)=x^3+x^2+x+1 f(x)/(x+1)=x3+x2+x+1
设系数域为 < Z p , ⊕ , ⊗ > <Z_p,\oplus,\otimes > <Zp,⊕,⊗>
设
Z
p
Z_p
Zp上的两个多项式
f
(
x
)
=
∑
i
=
0
n
a
i
x
i
g
(
x
)
=
∑
i
=
0
m
b
i
x
i
a
n
,
b
m
≠
0
,
n
≥
m
f(x)=\sum_{i=0}^na_ix^i\\ g(x)=\sum_{i=0}^mb_ix^i\\ a_n,b_m≠0,n\ge m
f(x)=i=0∑naixig(x)=i=0∑mbixian,bm=0,n≥m
Z p Z_p Zp多项式的四则运算
则
Z
p
Z_p
Zp上的多项式加法(减法类似)为
f
(
x
)
+
g
(
x
)
=
∑
i
=
0
m
(
a
i
⊕
b
i
)
x
i
+
∑
i
=
m
+
1
n
a
i
x
i
=
∑
i
=
0
m
(
a
i
+
b
i
)
m
o
d
p
×
x
i
+
∑
i
=
m
+
1
n
a
i
x
i
f(x)+g(x)=\sum_{i=0}^m(a_i\oplus b_i)x^i+\sum_{i=m+1}^na_i x^i\\ =\sum_{i=0}^m(a_i+ b_i)mod\ p\ \times x^i+\sum_{i=m+1}^na_i x^i
f(x)+g(x)=i=0∑m(ai⊕bi)xi+i=m+1∑naixi=i=0∑m(ai+bi)mod p ×xi+i=m+1∑naixi
Z
p
Z_p
Zp上的多项式乘法为
f
(
x
)
g
(
x
)
=
∑
i
=
0
n
+
m
c
i
x
i
c
i
=
(
a
0
b
i
+
a
1
b
i
−
1
+
.
.
.
+
a
i
b
0
)
m
o
d
p
f(x)g(x)=\sum_{i=0}^{n+m}c_ix^i\\ c_i=(a_0b_i+a_1b_{i-1}+...+a_ib_0)mod\ p
f(x)g(x)=i=0∑n+mcixici=(a0bi+a1bi−1+...+aib0)mod p
Z
p
Z_p
Zp上的带余式除法
f
(
x
)
=
q
(
x
)
g
(
x
)
+
r
(
x
)
f(x)=q(x)g(x)+r(x)
f(x)=q(x)g(x)+r(x)
意思是
f
(
x
)
÷
g
(
x
)
=
q
(
x
)
.
.
.
r
(
x
)
f(x)\div g(x)=q(x)...r(x)
f(x)÷g(x)=q(x)...r(x)
以 D e g r e e ( f ) Degree(f) Degree(f)表示多项式f的阶,并且 D e g r e e ( f ) = n , D e g r e e ( g ) = m , Degree(f)=n,Degree(g)=m, Degree(f)=n,Degree(g)=m,则有 D e g r e e ( q ) = n − m D e g r e e ( r ) ≤ m − 1 Degree(q)=n-m\\ Degree(r)\le m-1 Degree(q)=n−mDegree(r)≤m−1
Z p Z_p Zp多项式的欧几里得定理
定义
d
(
x
)
d(x)
d(x)是
a
(
x
)
,
b
(
x
)
a(x),b(x)
a(x),b(x)的最大公因式,即
d
(
x
)
d(x)
d(x)是能够整除
a
(
x
)
,
b
(
x
)
a(x),b(x)
a(x),b(x)的所有多项式中次数最高的
g
c
d
(
a
(
x
)
,
b
(
x
)
)
=
g
c
d
[
b
(
x
)
,
a
(
x
)
%
b
(
x
)
]
gcd(a(x),b(x))=gcd[b(x),a(x)\%b(x)]
gcd(a(x),b(x))=gcd[b(x),a(x)%b(x)]
Z p Z_p Zp上多项式再mod n次素多项式
对于 Z p Z_p Zp上次数高于n-1的多项式 f ( x ) f(x) f(x),需要mod一个 Z p Z_p Zp上的n次素多项式 m ( x ) m(x) m(x),如此限制 f ( x ) f(x) f(x)的次数在 [ 0 , n − 1 ] [0,n-1] [0,n−1]
什么是"素多项式"? Z p Z_p Zp上的素多项式 m ( x ) m(x) m(x)无法被 Z p Z_p Zp上的任意多项式整除
当 m ( x ) m(x) m(x)的次数为n,则 Z p Z_p Zp上的多项式 m o d m ( x ) mod\ m(x) mod m(x)都会落在次数小于等于n-1的多项式集 F F F中
显然
F
F
F中的多项式都可以表示为
∀
f
(
x
)
∈
F
,
f
(
x
)
=
a
0
+
a
1
x
+
.
.
.
+
a
n
−
1
x
n
−
1
,
∀
a
i
∈
Z
p
\forall f(x)\in F,f(x)=a_0+a_1x+...+a_{n-1}x^{n-1},\forall a_i\in Z_p
∀f(x)∈F,f(x)=a0+a1x+...+an−1xn−1,∀ai∈Zp
那么这样的多项式一共有
p
n
p^n
pn个(系数的乘法原理),即模
m
(
x
)
m(x)
m(x)构成的剩余类
现在类比 Z p Z_p Zp,证明 F F F是一个域
显然加减乘封闭且结合律分配律交换律均满足, F F F容易判定为交换环
由于1也是 F F F中的多项式,因此存在乘法单位元1,
下面证明M6无零因子
由于k阶多项式的k次项系数不为零,假设有两个非零多项式,其最高次项分别为 a i x i , b j x j a_ix^i,b_jx^j aixi,bjxj
乘积多项式的最高次项为 a i b j x i + j a_ib_jx^{i+j} aibjxi+j如果指数 i + j ≥ n i+j\ge n i+j≥n则对 m ( x ) m(x) m(x)取模,如果系数 a i b j ≥ p a_ib_j\ge p aibj≥p则对 p p p取模
显然p是一个素数, a i b j = a i × b j a_ib_j=a_i\times b_j aibj=ai×bj是一个合数,合数对素数取模显然不为0
因此任何两个非零多项式乘积一定非零,M6无零因子得证
到此F被证明是整环
无零因子就是 G F ( 2 3 ) GF(2^3) GF(23)是域但是 Z 8 Z_8 Z8不是域的本质原因
下面证明任意F中的非0多项式都在F中有乘法逆元
f ( x ) g ( x ) ≡ 1 ( m o d m ( x ) ) f(x)g(x)\equiv 1(mod\ m(x)) f(x)g(x)≡1(mod m(x))
g ( x ) f ( x ) + k ( x ) m ( x ) = 1 g(x)f(x)+k(x)m(x)=1 g(x)f(x)+k(x)m(x)=1
又 m ( x ) m(x) m(x)为素因式,有欧几里得定理知上式有解
因此M7乘法逆元得证
因此 F F F是域
F F F和 Z p Z_p Zp的不同
我们在证明 Z p Z_p Zp是域的时候发现,对于整数集 Z N = { 0 , 1 , 2 , 3 , . . . , N − 1 } Z_N=\{0,1,2,3,...,N-1\} ZN={0,1,2,3,...,N−1},只有当 ∣ Z N ∣ = N |Z_N|=N ∣ZN∣=N为素数p时, Z p Z_p Zp才为一个域
而现在 ∣ F ∣ = p n |F|=p^n ∣F∣=pn显然当 n > 1 n>1 n>1时是一个合数,但是 F F F仍然是一个域
将 F F F记作 G F ( p n ) GF(p^n) GF(pn)表示伽罗华域
F = G F ( p n ) F=GF(p^n) F=GF(pn)上的乘法逆元
f ( x ) g ( x ) ≡ 1 ( m o d m ( x ) ) g ( x ) f ( x ) + k ( x ) m ( x ) = 1 g c d ( f ( x ) , m ( x ) ) = 1 f(x)g(x)\equiv 1(mod \ m(x))\\ g(x)f(x)+k(x)m(x)=1\\ gcd(f(x),m(x))=1 f(x)g(x)≡1(mod m(x))g(x)f(x)+k(x)m(x)=1gcd(f(x),m(x))=1
显然可以将整数上的拓展欧几里得推广到F上
G F ( 2 n ) GF(2^n) GF(2n)上构造结果分布均匀的二元运算
G F ( 2 n ) GF(2^n) GF(2n)上的多项式各项的系数要么是0,要么是1,可以用二进制数表示
比如 x 3 + x 2 + 1 x^3+x^2+1 x3+x2+1就可以表示为 1101 1101 1101
加法
由于系数要么是0要么是1,即系数要自动对2取模
那么多项式的加法就是二进制数按位异或
比如 ( x 3 + x 2 + x ) + ( x 4 + x + 1 ) = x 4 + x 3 + x 2 + 2 x + 1 = x 4 + x 3 + x 2 + 1 (x^3+x^2+x)+(x^4+x+1)=x^4+x^3+x^2+2x+1=x^4+x^3+x^2+1 (x3+x2+x)+(x4+x+1)=x4+x3+x2+2x+1=x4+x3+x2+1
01110 ⊕ 10011 = 11101 01110\oplus 10011=11101 01110⊕10011=11101
乘法
教材上一本正经地写了一堆用字母表示的多项式,看上去头大.
从一个例子入手可能比较容易理解:
考虑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 f(x)=x^6+x^4+x^2+x+1 f(x)=x6+x4+x2+x+1
g ( x ) = x 7 + x + 1 g(x)=x^7+x+1 g(x)=x7+x+1
求 f ( x ) ⊗ g ( x ) = f ( x ) × g ( x ) m o d m ( x ) f(x)\otimes g(x)=f(x)\times g(x)\mod m(x) f(x)⊗g(x)=f(x)×g(x)modm(x)
拆分成项
容易想到的是把
g
(
x
)
g(x)
g(x)按幂次拆分成项然后用f(x)与g(x)的各项相乘之后相加,而相加在"加法"中我们已经认识到可以通过两个多项式异或这种简洁的方式实现,因此我们现在把精力放在
f
(
x
)
f(x)
f(x)如何和一个
x
k
x^k
xk项相乘上
f
(
x
)
×
g
(
x
)
m
o
d
m
(
x
)
=
f
(
x
)
×
(
1
+
x
+
x
7
)
m
o
d
m
(
x
)
=
f
(
x
)
×
1
m
o
d
m
(
x
)
+
f
(
x
)
×
x
m
o
d
m
(
x
)
+
f
(
x
)
×
x
7
m
o
d
m
(
x
)
f(x)\times g(x)\mod m(x)\\ =f(x)\times(1+x+x^7)\mod m(x)\\ =f(x)\times 1\mod m(x)+f(x)\times x\mod m(x)+f(x)\times x^7\mod m(x)
f(x)×g(x)modm(x)=f(x)×(1+x+x7)modm(x)=f(x)×1modm(x)+f(x)×xmodm(x)+f(x)×x7modm(x)
问题转化为如何求
f
(
x
)
×
x
k
m
o
d
m
(
x
)
f(x)\times x^k\mod m(x)
f(x)×xkmodm(x)
求 f ( x ) × x k m o d m ( x ) f(x)\times x^k\mod m(x) f(x)×xkmodm(x)
由于
f
(
x
)
×
x
k
m
o
d
m
(
x
)
=
{
[
(
f
(
x
)
×
x
m
o
d
m
(
x
)
)
×
x
m
o
d
m
(
x
)
]
×
.
.
.
×
x
m
o
d
m
(
x
)
}
×
x
m
o
d
m
(
x
)
f(x)\times x^k\mod m(x)\\ =\{[(f(x)\times x\mod m(x))\times x\mod m(x)]\times ...\times x\mod m(x)\}\times x\mod m(x)
f(x)×xkmodm(x)={[(f(x)×xmodm(x))×xmodm(x)]×...×xmodm(x)}×xmodm(x)
因此问题又可以转换为怎么跨出求
f
(
x
)
f(x)
f(x)到
f
(
x
)
×
x
m
o
d
m
(
x
)
f(x)\times x\mod m(x)
f(x)×xmodm(x)这第一步
求 f ( x ) × x m o d m ( x ) f(x)\times x\mod m(x) f(x)×xmodm(x)
假设 f ( x ) = a 7 x 7 + a 6 x 6 + . . . + a 1 x + a 0 f(x)=a_7x^7+a_6x^6+...+a_1x+a_0 f(x)=a7x7+a6x6+...+a1x+a0表示 G F ( 2 8 ) GF(2^8) GF(28)上的任意多项式
则 x × f ( x ) = a 7 x 8 + a 6 x 7 + . . . + a 0 x x\times f(x)=a_7x^8+a_6x^7+...+a_0x x×f(x)=a7x8+a6x7+...+a0x
如果用二进制表示,那么
f
(
x
)
=
a
7
a
6
a
5
a
4
a
3
a
2
a
1
a
0
x
×
f
(
x
)
=
a
7
a
6
a
5
a
4
a
3
a
2
a
1
a
0
0
\begin{aligned} f(x)=&a_7&a_6&a_5&a_4&a_3&a_2&a_1&a_0\\ x\times f(x)=a_7&a_6&a_5&a_4&a_3&a_2&a_1&a_0&0 \end{aligned}
f(x)=x×f(x)=a7a7a6a6a5a5a4a4a3a3a2a2a1a1a0a00
我们可以发现
f
(
x
)
f(x)
f(x)到
x
×
f
(
x
)
x\times f(x)
x×f(x)只需要将
f
(
x
)
f(x)
f(x)的二进制表示左移一位,
下面考虑如何取模
如果 a 7 = 0 a_7=0 a7=0则 x × f ( x ) x\times f(x) x×f(x)顶多是一个7次多项式,如果有 a 6 = 0 a_6=0 a6=0则顶多是一个6次多项式,一个七次多项式 x × f ( x ) x\times f(x) x×f(x)去mod一个8次多项式 m ( x ) m(x) m(x)实乃以卵击石,直接被8次多项式劝返
如果 a 7 = 1 a_7=1 a7=1则 x × f ( x ) x\times f(x) x×f(x)与 m ( x ) m(x) m(x)都是8次多项式,算是旗鼓相当,可以一战
此时 x × f ( x ) x\times f(x) x×f(x)可以分成精锐的头部 x 8 x^8 x8与累赘的尾部 a 6 x 7 + a 5 x 6 + . . . + a 0 x a_6x^7+a_5x^6+...+a_0x a6x7+a5x6+...+a0x,
这个尾部对 m ( x ) m(x) m(x)取模还是被劝返,只留下精锐的头部 x 8 x^8 x8独自抗衡 m ( x ) m(x) m(x)
那么问题转化为 x 8 x^8 x8对 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 ) x^8 \mod m(x) x8modm(x)
x 8 x^8 x8形单影只,只能单挑 m ( x ) m(x) m(x)的 x 8 x^8 x8项,无暇处理 m ( x ) m(x) m(x)的一伙子小弟,
于是
x
8
x^8
x8利用其系数都在
G
F
(
2
)
GF(2)
GF(2)上,无中生有搬来了一伙子小弟:
x
8
≡
x
8
+
2
x
7
+
2
x
6
+
.
.
.
+
2
x
+
2
(
系
数
m
o
d
2
)
x^8\equiv x^8+2x^7+2x^6+...+2x+2(系数mod 2)
x8≡x8+2x7+2x6+...+2x+2(系数mod2)
此时用
x
8
+
2
x
7
+
2
x
6
+
.
.
.
+
2
x
+
2
x^8+2x^7+2x^6+...+2x+2
x8+2x7+2x6+...+2x+2去
m
o
d
m
(
x
)
\mod m(x)
modm(x)终于可以大干一场了,还得是门当户对地干,次数相同的项单挑
x 8 ≡ x 8 + 2 x 7 + 2 x 6 + . . . + 2 x + 2 ( 系 数 m o d 2 ) x^8\equiv x^8+2x^7+2x^6+...+2x+2(系数mod 2) x8≡x8+2x7+2x6+...+2x+2(系数mod2)作为被除数, m ( x ) m(x) m(x)作为除数,余数即为所求结果
战争一开始,商1之后被除数减去除数得到 2 x 7 + 2 x 6 + 2 x 5 + x 4 + x 3 + 2 x 2 + x + 1 ≡ x 4 + x 3 + x + 1 ( 系 数 m o d 2 ) 2x^7+2x^6+2x^5+x^4+x^3+2x^2+x+1\equiv x^4+x^3+x+1(系数mod2) 2x7+2x6+2x5+x4+x3+2x2+x+1≡x4+x3+x+1(系数mod2)
立刻发现刚才"精锐的头部"那个 x 8 x^8 x8在和 m ( x ) m(x) m(x)的8次项的决斗中阵亡了,剩下的小弟都是7次方以下的项,无力与 m ( x ) m(x) m(x)抗衡,直接作为余数
即刚才的"战争"可以写为:
x
8
≡
x
4
+
x
3
+
x
+
1
m
o
d
m
(
x
)
&
系
数
m
o
d
2
其
中
m
(
x
)
=
x
8
+
x
4
+
x
3
+
x
+
1
x^8\equiv x^4+x^3+x+1 \mod m(x)\&系数mod2\\ 其中m(x)=x^8+x^4+x^3+x+1
x8≡x4+x3+x+1modm(x)&系数mod2其中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
这是巧合吗?
这是系数mod2的必然结果,并且可以从8次推广到n次:
m
(
x
)
m(x)
m(x)为n次多项式
x
n
m
o
d
m
(
x
)
=
m
(
x
)
−
x
n
(
系
数
m
o
d
2
)
x^n\mod m(x)=m(x)-x^n(系数mod2)
xnmodm(x)=m(x)−xn(系数mod2)
x
8
x^8
x8独自面对
m
(
x
)
m(x)
m(x),最终壮烈牺牲但是换回
x
4
+
x
3
+
x
+
1
x^4+x^3+x+1
x4+x3+x+1颇有"将军百战死,壮士十年归"的感觉
在战争之前我们把"累赘的尾部 a 6 x 7 + a 5 x 6 + . . . + a 0 x a_6x^7+a_5x^6+...+a_0x a6x7+a5x6+...+a0x"留下不参战,原因是他们参战也会被敌人 m ( x ) m(x) m(x)直接劝返
现在我们知道了精锐的头部
x
8
x^8
x8和累赘的尾部
a
6
x
7
+
a
5
x
6
+
.
.
.
+
a
0
x
a_6x^7+a_5x^6+...+a_0x
a6x7+a5x6+...+a0x各自参战的结果了,此时可以总结一支部队
x
×
f
(
x
)
=
x
8
+
a
6
x
7
+
a
5
x
6
+
.
.
.
+
a
0
x
x\times f(x)=x^8+a_6x^7+a_5x^6+...+a_0x
x×f(x)=x8+a6x7+a5x6+...+a0x参战的结果了:
x
×
f
(
x
)
m
o
d
m
(
x
)
=
[
m
(
x
)
−
x
8
]
+
a
6
x
7
+
a
5
x
6
+
.
.
.
+
a
0
x
x\times f(x)\mod m(x)=[m(x)-x^8]+a_6x^7+a_5x^6+...+a_0x
x×f(x)modm(x)=[m(x)−x8]+a6x7+a5x6+...+a0x
比如当
f
(
x
)
=
x
7
+
x
4
+
x
2
+
x
+
1
,
m
(
x
)
=
x
8
+
x
4
+
x
3
+
x
+
1
f(x)=x^7+x^4+x^2+x+1,m(x)=x^8+x^4+x^3+x+1
f(x)=x7+x4+x2+x+1,m(x)=x8+x4+x3+x+1时
x
×
f
(
x
)
m
o
d
m
(
x
)
=
(
x
8
+
x
5
+
x
3
+
x
2
+
x
)
m
o
d
(
x
8
+
x
4
+
x
3
+
x
+
1
)
=
[
x
4
+
x
3
+
x
+
1
]
+
[
x
5
+
x
3
+
x
2
+
x
]
=
011011
⊕
101110
=
110101
\begin{aligned} &x\times f(x)\mod m(x)\\ &=(x^8+x^5+x^3+x^2+x)\mod (x^8+x^4+x^3+x+1)\\ &=[x^4+x^3+x+1]+[x^5+x^3+x^2+x]\\ &=011011\oplus 101110\\ &=110101 \end{aligned}
x×f(x)modm(x)=(x8+x5+x3+x2+x)mod(x8+x4+x3+x+1)=[x4+x3+x+1]+[x5+x3+x2+x]=011011⊕101110=110101
到此我们知道
x
×
f
(
x
)
m
o
d
m
(
x
)
x\times f(x)\mod m(x)
x×f(x)modm(x)如何计算了,
那么 x 2 × f ( x ) m o d m ( x ) = x × ( x × f ( x ) m o d m ( x ) ) m o d m ( x ) x^2\times f(x)\mod m(x)=x\times (x\times f(x)\mod m(x))\mod m(x) x2×f(x)modm(x)=x×(x×f(x)modm(x))modm(x)
以此类推可以得到 x k × f ( x ) m o d m ( x ) x^k\times f(x)\mod m(x) xk×f(x)modm(x)如何计算了
回到求 f ( x ) × g ( x ) m o d m ( x ) f(x)\times g(x)\mod m(x) f(x)×g(x)modm(x)
不管你 g ( x ) g(x) g(x)长什么样,我先预处理出 f ( x ) × x m o d x , f ( x ) × x 2 m o d m ( x ) , f ( x ) × x k m o d m ( x ) f(x)\times x\mod x,f(x)\times x^2\mod m(x),f(x)\times x^k\mod m(x) f(x)×xmodx,f(x)×x2modm(x),f(x)×xkmodm(x)等等情况
如果你
g
(
x
)
=
1
+
x
+
x
2
g(x)=1+x+x^2
g(x)=1+x+x2,那么
f
(
x
)
×
g
(
x
)
m
o
d
m
(
x
)
=
f
(
x
)
×
(
1
+
x
+
x
2
)
m
o
d
m
(
x
)
=
(
f
(
x
)
+
x
×
f
(
x
)
+
x
2
×
f
(
x
)
)
m
o
d
m
(
x
)
=
f
(
x
)
+
x
×
f
(
x
)
m
o
d
m
(
x
)
+
x
2
×
f
(
x
)
m
o
d
m
(
x
)
\begin{aligned} &f(x)\times g(x)\mod m(x)\\ &=f(x)\times (1+x+x^2)\mod m(x)\\ &=(f(x)+x\times f(x)+x^2\times f(x))\mod m(x)\\ &=f(x)+x\times f(x)\mod m(x)+x^2\times f(x)\mod m(x) \end{aligned}
f(x)×g(x)modm(x)=f(x)×(1+x+x2)modm(x)=(f(x)+x×f(x)+x2×f(x))modm(x)=f(x)+x×f(x)modm(x)+x2×f(x)modm(x)
直接利用预处理得出的结果,然后计算加法直接用二进制异或
总结
到此我们构造出了 G F ( 2 n ) GF(2^n) GF(2n),即有 2 n 2^n 2n个元素的伽罗华域
怎么构造出的?由系数在 G F ( 2 ) GF(2) GF(2)上的多项式模一个 2 n 2^n 2n次的素多项式拓展出的
多项式和这 2 n 2^n 2n个数怎么产生联系?每一个多项式都对应一个二进制数
这 2 n 2^n 2n个数的加减乘除运算怎么定义的?还是通过多项式的运算得到的
下一步可以向AES加密算法进军了