如今很多常用的密码学方案的安全性都是基于求解离散对数问题(Discrete Logarithm Problem, DLP)的计算复杂性,比如Diffie-Hellman密钥交换方案、ElGamal加密方案等,这些在今后的文章中会陆续地介绍到。
为了能够更好地理解DLP,首先要了解一些关键的数学基础。本文主要介绍一些抽象代数(近世代数)中群论的基础知识,包含群(Group)、子群(Subgroup)、有限群(Finite Group)以及循环群(Cyclic Group)的相关概念和性质。
首先给出群的定义,判断一个集合是否是群,要根据群的定义检测:
定义1. 群(Group)
假设有一个非空集合 G G G,以及一个二元运算 × \times ×所构成的集合 ( G , × ) (G, \times) (G,×),如果满足以下条件就是一个群:
- 二元运算 × \times ×是封闭的,即对所有的 a , b ∈ G a, b\in G a,b∈G,都有 a × b = c ∈ G a \times b = c \in G a×b=c∈G;
- 二元运算 × \times ×满足结合律,即对所有的 a , b , c ∈ G a, b, c\in G a,b,c∈G,都有 a × ( b × c ) = ( a × b ) × c a \times (b \times c) = (a \times b) \times c a×(b×c)=(a×b)×c;
- 存在一个元素 e ∈ G e \in G e∈G,对所有的 a ∈ G a \in G a∈G,均满足 a × e = e × a = a a \times e = e \times a = a a×e=e×a=a,称这个元素为中性元或单位元;
- 对于每一个元素 a ∈ G a \in G a∈G,存在一个元素 a − 1 ∈ G a^{-1} \in G a−1∈G,使得 a × a − 1 = a − 1 × a = e a\times a^{-1} = a^{-1} \times a = e a×a−1=a−1×a=e。
除此之外,如果一个群 G G G还额外满足:对于任意的 a , b ∈ G a,b\in G a,b∈G都满足 a × b = b × a a \times b = b \times a a×b=b×a,则称 G G G为交换群,也叫阿贝尔群。
以上是群的一个比较抽象的定义,下面通过一个示例来帮助大家了解群的定义:
示例1
-
( Z , + ) (\mathbb{Z}, +) (Z,+)是整数集合 Z = { … , − 2 , − 1 , 0 , 1 , 2 , … } \mathbb{Z}=\{\dots, -2, -1, 0, 1, 2, \dots\} Z={…,−2,−1,0,1,2,…}与普通加法 + + +形成的阿贝尔群,其中单位元是0, a ∈ Z a \in \mathbb{Z} a∈Z的逆元是 − a ∈ Z -a \in \mathbb{Z} −a∈Z;
-
( Z − { 0 } , × ) (\mathbb{Z}-\{0\}, \times) (Z−{0},×)是不包含0的整数集合与普通乘法构成的一个集合,但它并不是一个群,因为 Z − { 0 } \mathbb{Z}-\{0\} Z−{0}中除了元素-1和1外,对于任意元素 a ∈ Z − { 0 } a\in\mathbb{Z}-\{0\} a∈Z−{0},都不存在逆元;
-
( C , ⋅ ) (\mathbb{C}, \cdot) (C,⋅)是由复数 u + i v u+iv u+iv的集合(其中 u , v ∈ R u, v \in \mathbb{R} u,v∈R,且 i 2 = − 1 i^2 = -1 i2=−1)以及定义在复数上的乘法
( u 1 + i v 1 ) ⋅ ( u 2 + i v 2 ) = ( u 1 u 2 − v 1 v 2 ) + i ( u 1 v 2 + u 2 v 1 ) (u_1 + iv_1)\cdot(u_2 + iv_2) = (u_1u_2-v_1v_2) + i(u_1v_2+u_2v_1) (u1+iv1)⋅(u2+iv2)=(u1u2−v1v2)+i(u1v2+u2v1)
形成了一个阿贝尔群,其中单位元为1,元素 a = u + i v ∈ C a = u+iv \in \mathbb{C} a=u+iv∈C的逆元为 a − 1 = u − i u 2 + v 2 a^{-1} = \frac{u-i}{u^2+v^2} a−1=u2+v2u−i。
然而,示例1中出现的群在密码学中并不是很重要,在密码学中往往关注的是拥有有限个元素的群,因此引出了有限群以及群的阶的简单定义:
定义2. 有限群(Finite Group)
当一个群 G G G中拥有有限个元素,则称其为有限群,其中群 G G G中元素的个数被称为群的阶或基,表示为 ∣ G ∣ |G| ∣G∣。
有限群的典型示例有:
示例2
- ( Z n , + ) (\mathbb{Z}_n, +) (Zn,+)是由集合 Z n = { 0 , 1 , … , n − 1 } \mathbb{Z}_n=\{0, 1,\dots,n-1\} Zn={0,1,…,n−1}与整数模 n n n加法所构成的群,其阶 ∣ Z n ∣ = n |\mathbb{Z}_n| = n ∣Zn∣=n;
- 设 Z n ∗ \mathbb{Z}_n^* Zn∗是由小于 n n n且与 n n n互素的正整数所构成的集合,那么 ( Z n ∗ , ⋅ ) (\mathbb{Z}_n^*, \cdot) (Zn∗,⋅)是其与整数模 n n n乘法所构成的群,其阶等于 n n n的欧拉函数 ∣ Z n ∗ ∣ = Φ ( n ) |\mathbb{Z}_n^*|=\Phi(n) ∣Zn∗∣=Φ(n)(后续文章会介绍欧拉函数)。
在定义2中介绍了有限群的阶,这里还要介绍元素的阶的定义:
定义3. 元素的阶
群 ( G , × ) (G, \times) (G,×)内某个元素 a a a的阶 o r d ( a ) ord(a) ord(a)是指满足以下条件的最小正整数 k k k:
a k = a × a × ⋯ × a ⏟ k 次 = e , a^k=\underbrace{a\times a\times \dots \times a}_{k次}=e, ak=k次 a×a×⋯×a=e,
其中 e e e是该群的单位元。
下面来看一个比较有趣的例子:
示例3
考虑群
(
Z
11
∗
,
⋅
)
(\mathbb{Z}_{11}^*, \cdot)
(Z11∗,⋅),要求求出群中元素
a
=
3
a=3
a=3的阶,那么我们必须不断去计算元素
a
a
a的幂值,直到得到单位元1为止:
a
1
=
3
a
2
=
9
a
3
=
27
≡
5
m
o
d
11
a
4
=
81
≡
4
m
o
d
11
a
5
=
243
≡
1
m
o
d
11
\begin{aligned} a^1 &= 3 \\ a^2 &= 9 \\ a^3 &= 27 \equiv 5~ \rm mod ~ 11 \\ a^4 &= 81 \equiv 4~ \rm mod ~ 11 \\ a^5 &= 243 \equiv 1~ \rm mod ~ 11 \end{aligned}
a1a2a3a4a5=3=9=27≡5 mod 11=81≡4 mod 11=243≡1 mod 11
从最后的结果可以得到
o
r
d
(
a
)
=
5
ord(a)=5
ord(a)=5。
此时如果将结果一直乘以
a
a
a,就会发现一个很有趣的现象:
a
6
=
729
≡
3
m
o
d
11
a
7
=
2187
≡
9
m
o
d
11
a
8
=
6561
≡
5
m
o
d
11
a
9
=
19683
≡
4
m
o
d
11
a
10
=
59049
≡
1
m
o
d
11
a
11
=
177147
≡
3
m
o
d
11
⋮
\begin{aligned} a^6 &= 729 \equiv 3~ \rm mod ~ 11 \\ a^7 &= 2187 \equiv 9~ \rm mod ~ 11 \\ a^8 &= 6561 \equiv 5~ \rm mod ~ 11 \\ a^9 &= 19683 \equiv 4~ \rm mod ~ 11 \\ a^{10} &= 59049 \equiv 1~ \rm mod ~ 11 \\ a^{11} &= 177147 \equiv 3~ \rm mod ~ 11 \\ &\vdots \end{aligned}
a6a7a8a9a10a11=729≡3 mod 11=2187≡9 mod 11=6561≡5 mod 11=19683≡4 mod 11=59049≡1 mod 11=177147≡3 mod 11⋮
可以看到
a
a
a的幂值一直在集合
{
1
,
3
,
4
,
5
,
9
}
\{1, 3, 4, 5, 9\}
{1,3,4,5,9}中无限循环,这样就引出了以下循环群的定义:
定义4. 循环群(Cyclic Group)
如果一个群 G G G中的每一个元素都是一个固定的元 α \alpha α的幂值,我们就把该群叫做循环群,其中 α \alpha α被称为群 G G G的生成元,且 o r d ( α ) = ∣ G ∣ ord(\alpha)=|G| ord(α)=∣G∣。
示例4
仍然考虑示例3中的群
(
Z
11
∗
,
⋅
)
(\mathbb{Z}_{11}^*, \cdot)
(Z11∗,⋅),验证该群是否是循环群,如果是的话再验证群中元素
a
=
2
a=2
a=2是否是该群生成元:
a
=
2
a
6
≡
9
m
o
d
11
a
2
=
4
a
7
≡
7
m
o
d
11
a
3
=
8
a
8
≡
3
m
o
d
11
a
4
≡
5
m
o
d
11
a
9
≡
6
m
o
d
11
a
5
≡
10
m
o
d
11
a
10
≡
1
m
o
d
11
\begin{aligned} a &= 2 & a^6 \equiv 9~ \rm mod~ 11 \\ a^2 &= 4 & a^7 \equiv 7~ \rm mod~ 11 \\ a^3 &= 8 & a^8 \equiv 3~ \rm mod~ 11 \\ a^4 &\equiv 5~ \rm mod~ 11 & a^9 \equiv 6~ \rm mod~ 11 \\ a^5 &\equiv 10~ \rm mod~ 11 & a^{10} \equiv 1~ \rm mod~ 11 \\ \end{aligned}
aa2a3a4a5=2=4=8≡5 mod 11≡10 mod 11a6≡9 mod 11a7≡7 mod 11a8≡3 mod 11a9≡6 mod 11a10≡1 mod 11
可见,
o
r
d
(
a
)
=
10
=
∣
Z
11
∗
∣
ord(a)=10=|\mathbb{Z}_{11}^*|
ord(a)=10=∣Z11∗∣。这就意味着
(
Z
11
∗
,
⋅
)
(\mathbb{Z}_{11}^*, \cdot)
(Z11∗,⋅)是循环群,
a
=
2
a=2
a=2是该群的生成元。
从示例4中得到的结果能看出来 a = 2 a=2 a=2生成了 Z 11 ∗ \mathbb{Z}_{11}^* Z11∗内所有的元素,并且这些元素生成顺序看上去是毫无章法的,这种指数与群中元素之间看上去随机的关系是基于离散对数问题的密码体制的基础。
对于循环群,有一些有趣的属性,一些对密码学应用最重要的定理将在下面给出:
定理1
对于每个素数 p p p, ( Z p ∗ , ⋅ ) (\mathbb{Z}_p^*, \cdot) (Zp∗,⋅)都是一个阿贝尔有限循环群。
定理1的结论对密码学产生了深远的影响,因为这些循环群对于构建离散对数密码体制非常重要。
定理2
假设 G G G是一个有限循环群,则对于每一个 a ∈ G a\in G a∈G都有:
- a ∣ G ∣ = e a^{|G|}=e a∣G∣=e,其中 e e e为单位元;
- o r d ( a ) ord(a) ord(a)可以整除 ∣ G ∣ |G| ∣G∣。
定理2中的第一条属性实际上是费马小定理(后续文章会讲到)对所有循环群的一个推广;第二条属性具有很强的实用性,说明循环群内所有元素的阶都可以整除群的阶。
示例5
仍然考虑群
(
Z
11
∗
,
⋅
)
(\mathbb{Z}_{11}^*, \cdot)
(Z11∗,⋅),由于
∣
Z
11
∗
∣
=
10
|\mathbb{Z}_{11}^*|=10
∣Z11∗∣=10那么根据定理2理论上讲此群内仅有的元素阶数为1、2、5、10,因为只有这些整数能够整除10,下面通过列出该群中所有元素的阶来验证这个属性:
o
r
d
(
1
)
=
1
o
r
d
(
6
)
=
10
o
r
d
(
2
)
=
10
o
r
d
(
7
)
=
10
o
r
d
(
3
)
=
5
o
r
d
(
8
)
=
10
o
r
d
(
4
)
=
5
o
r
d
(
9
)
=
5
o
r
d
(
5
)
=
5
o
r
d
(
10
)
=
2
\begin{aligned} ord(1) &= 1 & ord(6)=10 \\ ord(2) &= 10 & ord(7)=10 \\ ord(3) &= 5 & ord(8)=10 \\ ord(4) &= 5 & ord(9)=5 \\ ord(5) &= 5 & ord(10)=2 \end{aligned}
ord(1)ord(2)ord(3)ord(4)ord(5)=1=10=5=5=5ord(6)=10ord(7)=10ord(8)=10ord(9)=5ord(10)=2
可见的确只出现了可以整除10的阶。
还有一个很重要的定理:
定理3
假设 G G G是一个有限循环群,则下面的结论成立:
- G G G中生成元的个数为 Φ ( ∣ G ∣ ) \Phi(|G|) Φ(∣G∣);
- 如果 ∣ G ∣ |G| ∣G∣是素数,则所有满足 a ≠ 1 ∈ G a\neq 1 \in G a=1∈G的元素 a a a都是生成元。
示例5验证了定理3中第一条属性, Φ ( 10 ) = 4 \Phi(10)=4 Φ(10)=4,即生成元的个数为4,分别是元素2、6、7、8;第二条属性可以从定理2得到,如果群的阶是一个素数 p p p,那么能够整除该群阶的只有 p p p本身和1,只有元素1的阶为1,其他所有元素的阶都是 p p p。
下面来介绍另一个重要的概念——子群,子群本身的定义很简单:
定义5. 子群(Subgroup)
一个群 ( G , × ) (G, \times) (G,×)的一个子集 ( H , × ) (H, \times) (H,×)如果也是一个群,那么称 ( H , × ) (H, \times) (H,×)是 ( G , × ) (G, \times) (G,×)的子群。
定义5中如果 G G G是一个循环群,那么则由一种简单的方法去生成一个循环子群:
定理4
假设 ( G , × ) (G, \times) (G,×)是一个循环群,则 G G G内每一个 o r d ( a ) = s ord(a)=s ord(a)=s的元素 a a a都是拥有 s s s个元素的循环子群的生成元。
这个定理看似有点绕,它告诉我们循环群的每一个元素都是其他子群的生成元,而且该子群也是循环群。
示例6
已知在群 ( Z 11 ∗ , ⋅ ) (\mathbb{Z}_{11}^*, \cdot) (Z11∗,⋅)中 o r d ( 3 ) = 5 ord(3)=5 ord(3)=5,由元素3的幂值生成了子集 H = { 1 , 3 , 4 , 5 , 9 } H=\{1,3,4,5,9\} H={1,3,4,5,9},列出 H H H的运算表:
1 | 3 | 4 | 5 | 9 | |
---|---|---|---|---|---|
1 | 1 | 3 | 4 | 5 | 9 |
3 | 3 | 9 | 1 | 4 | 5 |
4 | 4 | 1 | 5 | 9 | 3 |
5 | 5 | 4 | 9 | 3 | 1 |
9 | 9 | 5 | 3 | 1 | 4 |
可见 H H H符合群的定义,这样 H H H就是 Z 11 ∗ \mathbb{Z}_{11}^* Z11∗的一个循环子群,且该循环子群的阶为素数5。根据定理3又可知元素3并不是唯一的生成元,除了1以外其它元素都是生成元。
依据定理4,我们可知一个群 G G G内每个元素 a a a都可以生成某个子群 H H H,结合定理2就可以得到以下拉格朗日定理:
定理5. 拉格朗日定理
假设 H H H是群 G G G的一个子群,则 ∣ H ∣ |H| ∣H∣可以整除 ∣ G ∣ |G| ∣G∣。
下面就来讨论一个拉格朗日定理的应用:
示例7
循环群 Z 11 ∗ \mathbb{Z}_{11}^* Z11∗的阶为 ∣ Z 11 ∗ ∣ = 10 = 1 ⋅ 2 ⋅ 5 |\mathbb{Z}_{11}^*|=10=1\cdot 2 \cdot 5 ∣Z11∗∣=10=1⋅2⋅5,因此根据拉格朗日定理可知 Z 11 ∗ \mathbb{Z}_{11}^* Z11∗对应的子群的阶只能为1、2、5、10( Z 11 ∗ \mathbb{Z}_{11}^* Z11∗自身也算一个子群),因为只有这些数字能整除10, Z 11 ∗ \mathbb{Z}_{11}^* Z11∗所有可能的子群以及这些子群对应的生成元可以表示如下:
子群 | 元素 | 生成元 |
---|---|---|
H 1 H_1 H1 | { 1 } \{1\} {1} | α = 1 \alpha = 1 α=1 |
H 2 H_2 H2 | { 1 , 10 } \{1, 10\} {1,10} | α = 10 \alpha = 10 α=10 |
H 3 H_3 H3 | { 1 , 3 , 4 , 5 , 9 } \{1, 3,4,5,9\} {1,3,4,5,9} | α = 3 , 4 , 5 , 9 \alpha = 3,4,5,9 α=3,4,5,9 |
H 4 H_4 H4 | { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } \{1,2,3,4,5,6,7,8,9\} {1,2,3,4,5,6,7,8,9} | α = 2 , 6 , 7 , 8 \alpha = 2,6,7,8 α=2,6,7,8 |
为了能够更全面地总结以上关于子群的定理,我们引出了以下这个全面描述一个有限循环群对应的所有子群的定理,也是本篇最关键的一个定理:
定理6
假设 G G G是一个 n n n阶有限循环群, g g g为该群的生成元,则对整除 n n n的每一个整数 k k k, G G G都存在唯一一个 k k k阶循环子群 H H H,其中 H H H是由 g n / k g ^{n/k} gn/k生成的, H H H中元素是由 G G G中满足 a k = e a^{k}=e ak=e( e e e为 G G G中单位元)的元素组成的,且 G G G不存在其他子群。
有了定理6,我们就拥有了从一个给定的循环群构建循环子群的简单而直接的办法:我们只需要知道一个生成元 g g g和群阶 n n n,然后计算 g n / k g^{n/k} gn/k就可以得到拥有 k k k个元素的子群的生成元。
示例8
考虑循环群
Z
11
∗
\mathbb{Z}_{11}^*
Z11∗,已知该群的生成元之一
g
=
8
g=8
g=8,试得到一个阶为2的子群
H
H
H的生成元
β
\beta
β:
β
=
8
10
/
2
=
32768
≡
10
m
o
d
11
\beta = 8^{10/2} = 32768 \equiv 10 ~ \rm mod~ 11
β=810/2=32768≡10 mod 11
由于
β
=
10
β
2
=
1
m
o
d
11
β
3
=
10
m
o
d
11
β
4
=
1
m
o
d
11
⋮
\begin{aligned} \beta&=10\\ \beta^{2}&=1 ~ \rm mod ~ 11 \\ \beta^{3}&=10 ~ \rm mod ~ 11 \\ \beta^{4}&=1 ~ \rm mod ~ 11 \\ \vdots \end{aligned}
ββ2β3β4⋮=10=1 mod 11=10 mod 11=1 mod 11
可验证出
β
\beta
β确实是
H
H
H的生成元。
写在最后
欢迎大家关注我的微信公众号,本人会不定期发一些有关密码学、区块链技术、编程等相关文章,欢迎志同道合的朋友来一起交流呀!