4.1. 数学知识
4.1.1. 群 环 域
设 ∗ \ast ∗ 是集合 S \displaystyle{ S } S 上的运算,若对 ∀ a , b ∈ S \forall a,b \in S ∀ a , b ∈ S ,有 a ∗ b ∈ S a \ast b \in S a ∗ b ∈ S ,则称 S \displaystyle{ S } S 对运算 ∗ \ast ∗ 是封闭的。若 ∗ \ast ∗ 是一元运算,对 ∀ a ∈ S \forall a \in S ∀ a ∈ S ,有 ∗ a ∈ S \ast a \in S ∗ a ∈ S ,则称 S \displaystyle{ S } S 对运算 ∗ \ast ∗ 是封闭的。
若对 ∀ a , b , c ∈ S \forall a, b, c \in S ∀ a , b , c ∈ S ,有 ( a ∗ b ) ∗ c = a ∗ ( b ∗ c ) (a \ast b) \ast c = a \ast (b \ast c) ( a ∗ b ) ∗ c = a ∗ ( b ∗ c ) ,则称 ∗ \ast ∗ 满足结合律。
定义 4-1
设 ⟨ G , ∗ ⟩ \langle\mathbb{G}, \ast\rangle ⟨ G , ∗ ⟩ 是一个代数系统,∗ \ast ∗ 满足
则称 ⟨ G , ∗ ⟩ \langle\mathbb{G}, \ast\rangle ⟨ G , ∗ ⟩ 是半群
定义 4-2
设 ⟨ G , ∗ ⟩ \langle\mathbb{G}, \ast\rangle ⟨ G , ∗ ⟩ 是一个代数系统,∗ \ast ∗ 满足
封闭性
结合律
存在元素 e \displaystyle{ e } e ,对 ∀ a ∈ ( G ) \forall a \in \mathbb(G) ∀ a ∈ ( G ) ,有 a ∗ e = e ∗ a = a a \ast e = e \ast a = a a ∗ e = e ∗ a = a ;e \displaystyle{ e } e 称为 ⟨ G , ∗ ⟩ \langle\mathbb{G}, \ast\rangle ⟨ G , ∗ ⟩ 的单位元
对 ∀ a ∈ G \forall a \in \mathbb{G} ∀ a ∈ G ,存在元素 a { − 1 } \displaystyle{ a ^{ \left\lbrace - 1 \right\rbrace } } a { − 1 } ,使得 a ∗ a − 1 = a − 1 ∗ a = e a \ast a^{-1} = a^{-1} \ast a = e a ∗ a − 1 = a − 1 ∗ a = e ,称 a { − 1 } \displaystyle{ a ^{ \left\lbrace - 1 \right\rbrace } } a { − 1 } 为 a \displaystyle{ a } a 的逆元
则称 ⟨ G , ∗ ⟩ \langle\mathbb{G}, \ast\rangle ⟨ G , ∗ ⟩ 是群,若其中的运算 ∗ \ast ∗ 已明确,有时将其简记为 G \mathbb{G} G
如果 G \mathbb{G} G 是有限集合,则称 ⟨ G , ∗ ⟩ \langle\mathbb{G}, \ast\rangle ⟨ G , ∗ ⟩ 是有限群,否则是无限群。有限群中,G \mathbb{G} G 的元素个数称为群的阶数
如果群 ⟨ G , ∗ ⟩ \langle\mathbb{G}, \ast\rangle ⟨ G , ∗ ⟩ 中的运算 ∗ \ast ∗ 还满足交换律,即对 ∀ a , b ∈ G \forall a, b \in \mathbb{G} ∀ a , b ∈ G ,有 a ∗ b = b ∗ a a \ast b = b \ast a a ∗ b = b ∗ a ,则称 ⟨ G , ∗ ⟩ \langle\mathbb{G}, \ast\rangle ⟨ G , ∗ ⟩ 为交换群或 Abel 群
定义 4-3
设 ⟨ G , ∗ ⟩ \langle\mathbb{G}, \ast\rangle ⟨ G , ∗ ⟩ 是一个群,I \displaystyle{ I } I 是整数集合。如果存在一个元素 g ∈ G g \in \mathbb{G} g ∈ G ,对于每一个元素 a ∈ G a \in \mathbb{G} a ∈ G ,都有相应的 i ∈ I i \in I i ∈ I ,能把 a \displaystyle{ a } a 表示成 g i \displaystyle{ g ^{ i } } g i ,则称 ⟨ G , ∗ ⟩ \langle\mathbb{G}, \ast\rangle ⟨ G , ∗ ⟩ 是循环群,g \displaystyle{ g } g 称为循环群的生成元,记 G = ⟨ g ⟩ = { g i ∣ i ∈ I } \mathbb{G} = \langle g \rangle = \{ g^i \mid i \in I \} G = ⟨ g ⟩ = { g i ∣ i ∈ I } 。称满足方程 a m = e \displaystyle{ a ^{ m } = e } a m = e 的最小正整数 m \displaystyle{ m } m 为 a \displaystyle{ a } a 的阶,记为 ∣ a ∣ \displaystyle{ \left| a \right| } ∣ a ∣
定义 4-4
若代数系统 ⟨ R , + , ⋅ , ⟩ \langle \mathbb{R}, +, \cdot, \rangle ⟨ R , + , ⋅ , ⟩ 的二元运算 + \displaystyle{ + } + 和 ⋅ \cdot ⋅ 满足
⟨ R , + ⟩ \langle \mathbb{R}, + \rangle ⟨ R , + ⟩ 是 Abel 群
⟨ R , ⋅ ⟩ \langle \mathbb{R}, \cdot \rangle ⟨ R , ⋅ ⟩ 是半群
乘法 ⋅ \cdot ⋅ 在加法 + \displaystyle{ + } + 上可分配
则称 ⟨ R , + , ⋅ , ⟩ \langle \mathbb{R}, +, \cdot, \rangle ⟨ R , + , ⋅ , ⟩ 是环
定义 4-5
若代数系统 ⟨ F , + , ⋅ ⟩ \langle \mathbb{F}, +, \cdot \rangle ⟨ F , + , ⋅ ⟩ 的二元运算 + \displaystyle{ + } + 和 ⋅ \cdot ⋅ 满足
⟨ F , + ⟩ \langle \mathbb{F}, + \rangle ⟨ F , + ⟩ 是 Abel 群
⟨ F − { 0 } , ⋅ ⟩ \langle \mathbb{F} - \{ 0 \}, \cdot \rangle ⟨ F − { 0 } , ⋅ ⟩ 是 Abel 群,其中 0 \displaystyle{ 0 } 0 是 + \displaystyle{ + } + 的单位元
乘法 ⋅ \cdot ⋅ 在加法 + \displaystyle{ + } + 上可分配
则称 ⟨ F , + , ⋅ ⟩ \langle \mathbb{F}, +, \cdot \rangle ⟨ F , + , ⋅ ⟩ 是域
⟨ Q , + , ⋅ ⟩ , ⟨ R , + , ⋅ ⟩ , ⟨ C , + , ⋅ ⟩ \langle Q, +, \cdot \rangle, \langle R, +, \cdot \rangle, \langle C, +, \cdot \rangle ⟨ Q , + , ⋅ ⟩ , ⟨ R , + , ⋅ ⟩ , ⟨ C , + , ⋅ ⟩ 都是域,分别代表有理数集、实数集、复数集
有限域是指域中元素个数有限的域,元素的个数称为域的阶。
4.1.2. 素数和互素数
1. 因子
a , b ∈ Z , b ≠ 0 a, b \in Z, b \ne 0 a , b ∈ Z , b = 0 ,若存在另一个整数 m \displaystyle{ m } m ,使得 a = m b \displaystyle{ a = mb } a = mb ,则称 b \displaystyle{ b } b 整除 a \displaystyle{ a } a ,记为 b ∣ a b \mid a b ∣ a
2. 素数
称素数 p ( p > 1 ) \displaystyle{ p \left( p > 1 \right) } p ( p > 1 ) 是素数,如果 p \displaystyle{ p } p 的因子只有 ± 1 \pm 1 ± 1 和 ± p \pm p ± p
任一整数 a ( a > 1 ) \displaystyle{ a \left( a > 1 \right) } a ( a > 1 ) 都能唯一的分解为以下形式
a = p 1 α 1 p 2 α 2 ⋯ p t α t a = p_1^{\alpha_1}p_2^{\alpha_2}\cdots p_t^{\alpha_t} a = p 1 α 1 p 2 α 2 ⋯ p t α t
其中 p 1 < p 2 < ⋯ < p t p_1 < p_2 < \cdots < p_t p 1 < p 2 < ⋯ < p t 是素数
3. 互素数
c \displaystyle{ c } c 为 a \displaystyle{ a } a 和 b \displaystyle{ b } b 的最大公因子,c = gcd ( a , b ) c=\gcd (a,b) c = g cd( a , b )
要求最大公因子一般为正
辗转相除求最大公因子
def gcd ( a : int , b : int ) -> int :
若 gcd ( a , b ) = 1 \gcd(a, b)=1 g cd( a , b ) = 1 则称 a \displaystyle{ a } a 与 b \displaystyle{ b } b 互素
最小公倍数 lcm ( a , b ) = a b gcd ( a , b ) \text{lcm}(a,b)=\displaystyle \frac{ab}{\gcd(a, b)} lcm ( a , b ) = g cd( a , b ) ab
4.1.3. 模运算
a = q n + r , 0 ⩽ r < n , q = ⌊ a n ⌋ a = q n + r,0 \leqslant r < n,q = \left\lfloor{a\over n}\right\rfloor a = q n + r , 0 ⩽ r < n , q = ⌊ n a ⌋
其中 a ≡ r m o d n a \equiv r \bmod n a ≡ r mod n
交换律、结合律、分配率、加法单位元 0 、乘法单位元 1 此处从略
乘法逆元
记 Z n ∗ = { a ∣ 0 < a < n , gcd ( a , n ) = 1 } Z_n^\ast = \{ a \mid 0 < a < n, \gcd(a, n)=1 \} Z n ∗ = { a ∣ 0 < a < n , g cd( a , n ) = 1 }
定理 4-1
Z n ∗ Z_n^\ast Z n ∗ 中每个元素都有乘法逆元
对 1 ∈ Z n ∗ 1 \in Z_n^\ast 1 ∈ Z n ∗ ,存在 x ∈ Z n ∗ x \in Z_n^\ast x ∈ Z n ∗ ,使得 a × x ≡ 1 m o d n a \times x \equiv 1 \bmod n a × x ≡ 1 mod n ,x \displaystyle{ x } x 为 a \displaystyle{ a } a 的乘法逆元,记为 x = a { − 1 } \displaystyle{ x = a ^{ \left\lbrace - 1 \right\rbrace } } x = a { − 1 }
4.1.4. 模指数运算
对给定的正整数 m , n \displaystyle{ m , n } m , n ,计算 a m m o d n a^m \bmod n a m mod n
例 4-5 a = 7 , n = 19 \displaystyle{ a = 7 , n = 19 } a = 7 , n = 19 ,易求出
7 1 ≡ 7 m o d 19 7 2 ≡ 11 m o d 19 7 3 ≡ 1 m o d 19 \begin{aligned}
7^1 & \equiv 7 \bmod {19}\\
7^2 & \equiv 11 \bmod {19}\\
7^3 & \equiv 1 \bmod {19}\\
\end{aligned} 7 1 7 2 7 3 ≡ 7 mod 19 ≡ 11 mod 19 ≡ 1 mod 19
可以看出存在循环,循环周期为 3
称满足方程 a m ≡ 1 m o d n a^m \equiv 1 \bmod n a m ≡ 1 mod n 的最小正整数 m \displaystyle{ m } m 为模 n \displaystyle{ n } n 下 a \displaystyle{ a } a 的阶,记为 ord n ( a ) \text{ord}_n(a) ord n ( a )
定理 4-2
设 ord n ( a ) = m \text{ord}_n(a)=m ord n ( a ) = m ,则 a k ≡ 1 m o d n a^k \equiv 1 \bmod n a k ≡ 1 mod n 的充要条件是 k \displaystyle{ k } k 为 m \displaystyle{ m } m 的倍数
4.1.5. 三个定理
费尔马定理
Fermat 定理
若 p \displaystyle{ p } p 为素数,a \displaystyle{ a } a 是正整数且 gcd ( a , p ) = 1 \gcd(a, p)=1 g cd( a , p ) = 1 ,则 a p − 1 ≡ 1 m o d p a^{p-1} \equiv 1 \bmod p a p − 1 ≡ 1 mod p
欧拉函数
设 n \displaystyle{ n } n 是一正整数,小于 n \displaystyle{ n } n 且与 n \displaystyle{ n } n 互素的正整数的个数称为 n \displaystyle{ n } n 的欧拉函数,记为 φ ( n ) \varphi (n) φ ( n )
定理 4-4
若 n \displaystyle{ n } n 是素数,则 φ ( n ) = n − 1 \varphi (n)=n-1 φ ( n ) = n − 1
若 n \displaystyle{ n } n 是两个素数 p \displaystyle{ p } p 和 q \displaystyle{ q } q 的乘积,则 φ ( n ) = φ ( p ) × φ ( q ) = ( p − 1 ) × ( q − 1 ) \varphi(n)=\varphi(p) \times \varphi(q)=(p-1)\times(q-1) φ ( n ) = φ ( p ) × φ ( q ) = ( p − 1 ) × ( q − 1 )
若 n \displaystyle{ n } n 有标准分解式 n = p 1 α 1 p 2 α 2 ⋯ p t α t n=p_1^{\alpha_1}p_2^{\alpha_2}\cdots p_t^{\alpha_t} n = p 1 α 1 p 2 α 2 ⋯ p t α t ,则 φ ( n ) = n ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) ⋯ ( 1 − 1 p t ) \varphi(n)=n \left(1 - \displaystyle {1\over p_1}\right) \left(1 - \displaystyle {1\over p_2}\right) \cdots \left(1 - \displaystyle {1\over p_t}\right) φ ( n ) = n ( 1 − p 1 1 ) ( 1 − p 2 1 ) ⋯ ( 1 − p t 1 )
欧拉定理
欧拉定理
若 a \displaystyle{ a } a 和 n \displaystyle{ n } n 互素,则 a φ ( n ) ≡ 1 m o d n a^{\varphi(n)} \equiv 1 \bmod n a φ ( n ) ≡ 1 mod n
推论 ord n ( a ) ∣ φ ( n ) \text{ord}_n(a) \mid \varphi(n) ord n ( a ) ∣ φ ( n )
推论说明,ord n ( a ) \text{ord}_n(a) ord n ( a ) 是 φ ( n ) \varphi(n) φ ( n ) 的因子,则称 a \displaystyle{ a } a 为 n \displaystyle{ n } n 的本原根 。如果 a \displaystyle{ a } a 是 n \displaystyle{ n } n 的本原根,则 a , a 2 , ⋯ , a φ ( n ) a, a^2, \cdots, a^{\varphi(n)} a , a 2 , ⋯ , a φ ( n ) 在 m o d n \bmod n mod n 下互不相同且与 n \displaystyle{ n } n 互素。
卡米歇尔定理
对满足 gcd ( a , n ) = 1 \gcd (a,n)=1 g cd( a , n ) = 1 的所有 a \displaystyle{ a } a ,使得 a m ≡ 1 m o d n a^m \equiv 1 \bmod n a m ≡ 1 mod n 同时成立的最小正整数 m \displaystyle{ m } m ,称为 n \displaystyle{ n } n 的卡米歇尔函数,记为 λ ( n ) \lambda(n) λ ( n )
似乎没说要考
4.1.6. 素性检验
爱拉托斯尼筛法
用于求一定范围内的所有素数,每次筛去某一个小于 n \sqrt{n} n 的素数的超过 1 的整数倍。
对于 n \displaystyle{ n } n 很大时,不可行。
Miller-Rabin 概率检测法
懒,不想写
4.1.7. 欧几里得算法
1. 求最大公因子
def gcd ( a : int , b : int ) -> int :
2. 求乘法逆元
如果 ( a , b ) = 1 \displaystyle{ \left( a , b \right) = 1 } ( a , b ) = 1 ,则 b \displaystyle{ b } b 在 m o d a \bmod a mod a 下有乘法逆元(不妨设 b < a \displaystyle{ b < a } b < a ),即存在一个 x ( x < a ) \displaystyle{ x \left( x < a \right) } x ( x < a ) ,使得 b x ≡ 1 m o d a bx \equiv 1 \bmod a b x ≡ 1 mod a 。推广的欧几里得算法先求出 ( a , b ) \displaystyle{ \left( a , b \right) } ( a , b ) ,当 ( a , b ) = 1 \displaystyle{ \left( a , b \right) = 1 } ( a , b ) = 1 时,则返回 b \displaystyle{ b } b 的逆元。
def extended_euclid ( a , b ) :
x, y, q = extended_euclid ( a , m )
4.1.8. 中国剩余定理
如果已知某个数关于一些两两互素的数的同余类集,就可重构这个数
可将大数用小数表示、大数的运算通过小数实现
中国剩余定理
设 m 1 , m 2 , ⋯ , m k m_1, m_2, \cdots, m_k m 1 , m 2 , ⋯ , m k 是两两互素的正整数,M = ∏ i = 1 k m i M = \displaystyle \prod_{i=1}^{k}m_i M = i = 1 ∏ k m i ,则一次同余方程组
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) ⋯ x ≡ a k ( m o d m k ) \begin{cases}
x \equiv a_1 \pmod{m_1} \\
x \equiv a_2 \pmod{m_2} \\
\cdots \\
x \equiv a_k \pmod{m_k}
\end{cases} ⎩ ⎨ ⎧ x ≡ a 1 ( mod m 1 ) x ≡ a 2 ( mod m 2 ) ⋯ x ≡ a k ( mod m k ) 令 m i M i = M \displaystyle{ m _{ i } M _{ i } = M } m i M i = M ,即 M i = M m i M_i = {M \over m_i} M i = m i M ;令 M i ′ M i ≡ 1 ( m o d m i ) M_i^\prime M_i \equiv 1 \pmod {m_i} M i ′ M i ≡ 1 ( mod m i ) ,即 M i ′ M_i^\prime M i ′ 为 M i \displaystyle{ M _{ i } } M i 模 m i \displaystyle{ m _{ i } } m i 的乘法逆元
对模 M \displaystyle{ M } M 有唯一解:
x ≡ ( M 1 ′ M 1 a 1 + M 2 ′ M 2 a 2 + ⋯ + M k ′ M k a k ) ( m o d M ) x \equiv \left( M_1^\prime M_1 a_1 + M_2^\prime M_2 a_2 + \cdots + M_k^\prime M_k a_k \right) \pmod{M} x ≡ ( M 1 ′ M 1 a 1 + M 2 ′ M 2 a 2 + ⋯ + M k ′ M k a k ) ( mod M )
中国剩余定理提供了一个非常有用的特性,即在模 M \displaystyle{ M } M 下可将大数 A \displaystyle{ A } A 由一组小数 ( a 1 , a 2 , ⋯ , a k ) (a_1, a_2, \cdots, a_k) ( a 1 , a 2 , ⋯ , a k ) 来表达,且大数的运算可以通过小数实现。表示为:
A ↔ ( a 1 , a 2 , ⋯ , a k ) A \leftrightarrow (a_1, a_2, \cdots, a_k) A ↔ ( a 1 , a 2 , ⋯ , a k )
其中 a i = A m o d m i a_i = A \bmod m_i a i = A mod m i ,则有以下推论:
推论 如果
A ↔ ( a 1 , a 2 , ⋯ , a k ) , B ↔ ( b 1 , b 2 , ⋯ , b k ) , A \leftrightarrow (a_1, a_2, \cdots, a_k), B \leftrightarrow (b_1, b_2, \cdots, b_k), A ↔ ( a 1 , a 2 , ⋯ , a k ) , B ↔ ( b 1 , b 2 , ⋯ , b k ) ,
那么
( A + B ) m o d M ↔ ( ( a 1 + b 1 ) m o d m 1 , ⋯ , ( a k + b k ) m o d m k ) ( A − B ) m o d M ↔ ( ( a 1 − b 1 ) m o d m 1 , ⋯ , ( a k − b k ) m o d m k ) ( A × B ) m o d M ↔ ( ( a 1 × b 1 ) m o d m 1 , ⋯ , ( a k × b k ) m o d m k ) \begin{aligned}
(A+B) \bmod M \leftrightarrow ((a_1+b_1) \bmod{m_1}, \cdots, (a_k+b_k) \bmod{m_k})\\
(A-B) \bmod M \leftrightarrow ((a_1-b_1) \bmod{m_1}, \cdots, (a_k-b_k) \bmod{m_k})\\
(A \times B) \bmod M \leftrightarrow ((a_1 \times b_1) \bmod{m_1}, \cdots, (a_k \times b_k) \bmod{m_k})\\
\end{aligned} ( A + B ) mod M ↔ (( a 1 + b 1 ) mod m 1 , ⋯ , ( a k + b k ) mod m k ) ( A − B ) mod M ↔ (( a 1 − b 1 ) mod m 1 , ⋯ , ( a k − b k ) mod m k ) ( A × B ) mod M ↔ (( a 1 × b 1 ) mod m 1 , ⋯ , ( a k × b k ) mod m k )
例题 有下面的同余方程组,求 x \displaystyle{ x } x
{ x ≡ 1 m o d 2 x ≡ 2 m o d 3 x ≡ 3 m o d 5 x ≡ 5 m o d 7 \begin{cases}
x \equiv 1 \bmod 2 \\
x \equiv 2 \bmod 3 \\
x \equiv 3 \bmod 5 \\
x \equiv 5 \bmod 7
\end{cases} ⎩ ⎨ ⎧ x ≡ 1 mod 2 x ≡ 2 mod 3 x ≡ 3 mod 5 x ≡ 5 mod 7
解答
M = 2 × 3 × 5 × 7 = 210 M 1 = 105 M 2 = 70 M 3 = 42 M 4 = 30 e 1 ≡ M 1 − 1 m o d 2 ≡ 1 e 2 ≡ M 2 − 1 m o d 3 ≡ 1 e 3 ≡ M 3 − 1 m o d 5 ≡ 3 e 4 ≡ M 4 − 1 m o d 7 ≡ 4 x ≡ ( 105 × 1 × 1 + 70 × 1 × 2 + 42 × 3 × 3 + 30 × 4 × 5 ) m o d 210 ≡ 173 m o d 210 \begin{aligned}
M & = 2 \times 3 \times 5 \times 7 = 210 \\
M_1 & = 105 \\ M_2 & = 70 \\ M_3 & = 42 \\ M_4 & = 30 \\
e_1 & \equiv M_1^{-1} \bmod 2 \equiv 1 \\
e_2 & \equiv M_2^{-1} \bmod 3 \equiv 1 \\
e_3 & \equiv M_3^{-1} \bmod 5 \equiv 3 \\
e_4 & \equiv M_4^{-1} \bmod 7 \equiv 4 \\
x & \equiv (105 \times 1 \times 1 + 70 \times 1 \times2 + 42 \times 3 \times 3 + 30 \times 4 \times 5) \bmod{210} \\
& \equiv 173 \bmod{210}
\end{aligned} M M 1 M 2 M 3 M 4 e 1 e 2 e 3 e 4 x = 2 × 3 × 5 × 7 = 210 = 105 = 70 = 42 = 30 ≡ M 1 − 1 mod 2 ≡ 1 ≡ M 2 − 1 mod 3 ≡ 1 ≡ M 3 − 1 mod 5 ≡ 3 ≡ M 4 − 1 mod 7 ≡ 4 ≡ ( 105 × 1 × 1 + 70 × 1 × 2 + 42 × 3 × 3 + 30 × 4 × 5 ) mod 210 ≡ 173 mod 210
4.1.9. 离散对数
1. 指标
设 p \displaystyle{ p } p 是一素数,a \displaystyle{ a } a 是 p \displaystyle{ p } p 的本原根,则 a , a 2 , ⋯ , a p − 1 a, a^2, \cdots, a^{p-1} a , a 2 , ⋯ , a p − 1 产生出 1 ∼ p − 1 1 \sim p-1 1 ∼ p − 1 之间的所有值,且每一值只出现一次。因此对任意 b ∈ { 1 , ⋯ , p − 1 } b \in \{1, \cdots, p - 1\} b ∈ { 1 , ⋯ , p − 1 } ,都存在唯一的 i ( 1 ⩽ i ⩽ p − 1 ) i(1 \leqslant i \leqslant p - 1) i ( 1 ⩽ i ⩽ p − 1 ) ,使得 b ≡ a i m o d p b \equiv a^i \bmod p b ≡ a i mod p 。称 i \displaystyle{ i } i 为模 p \displaystyle{ p } p 下以 a \displaystyle{ a } a 为底 b \displaystyle{ b } b 的指标,记为 i = ind a , p ( b ) i=\text{ind}_{a, p}(b) i = ind a , p ( b ) 。指标有以下性质:
ind a , p ( 1 ) = 0 \text{ind}_{a, p}(1)=0 ind a , p ( 1 ) = 0 即 a 0 m o d p = 1 m o d p = 1 a^0 \bmod p =1 \bmod p = 1 a 0 mod p = 1 mod p = 1
ind a , p ( a ) = 1 \text{ind}_{a, p}(a)=1 ind a , p ( a ) = 1 即 a 1 m o d p = a a^1 \bmod p = a a 1 mod p = a
定理 4-10
若 a z ≡ a q m o d p a^z \equiv a^q \bmod p a z ≡ a q mod p ,其中 p \displaystyle{ p } p 为素数,a \displaystyle{ a } a 是 p \displaystyle{ p } p 的本原根,则有 z ≡ q m o d φ ( p ) z \equiv q \bmod {\varphi (p)} z ≡ q mod φ ( p )
证明
因 a \displaystyle{ a } a 和 p \displaystyle{ p } p 互素,所以 a \displaystyle{ a } a 在模 p \displaystyle{ p } p 下存在逆元 a { − 1 } \displaystyle{ a ^{ \left\lbrace - 1 \right\rbrace } } a { − 1 } ,在 a z ≡ a q m o d p a^z \equiv a^q \bmod p a z ≡ a q mod p 两边同乘 ( a { − 1 } ) q \displaystyle{ \left( a ^{ \left\lbrace - 1 \right\rbrace } \right) ^{ q } } ( a { − 1 } ) q 得 a z − q ≡ 1 m o d p a^{z-q} \equiv 1 \bmod p a z − q ≡ 1 mod p 。因 a \displaystyle{ a } a 是 p \displaystyle{ p } p 的本原根,a \displaystyle{ a } a 的阶为 φ ( p ) \varphi (p) φ ( p ) ,所以存在整数 k \displaystyle{ k } k ,使得 z − q ≡ k φ ( p ) z-q \equiv k \varphi (p) z − q ≡ k φ ( p ) ,所以 z ≡ q m o d φ ( p ) z \equiv q \bmod {\varphi (p)} z ≡ q mod φ ( p )
又有两条性质
ind a , p ( x y ) = [ ind a , p ( x ) + ind a , p ( y ) ] m o d φ ( p ) \text{ind}_{a, p}(xy)=[\text{ind}_{a,p}(x) + \text{ind}_{a,p}(y)] \bmod \varphi (p) ind a , p ( x y ) = [ ind a , p ( x ) + ind a , p ( y )] mod φ ( p )
ind a , p ( y r ) = [ r × ind a , p ( y ) ] m o d φ p \text{ind}_{a, p}(y^r)=[r \times \text{ind}_{a, p}(y)] \bmod \varphi p ind a , p ( y r ) = [ r × ind a , p ( y )] mod φp
2. 离散对数
设 p \displaystyle{ p } p 是一素数,a \displaystyle{ a } a 是 p \displaystyle{ p } p 的本原根,则 a , a 2 , ⋯ , a p − 1 a, a^2, \cdots, a^{p-1} a , a 2 , ⋯ , a p − 1 产生出 1 ∼ p − 1 1 \sim p-1 1 ∼ p − 1 之间的所有值,且每一值只出现一次。因此对任意 ∀ b ∈ { 1 , ⋯ , p − 1 } \forall b \in \{1, \cdots, p - 1\} ∀ b ∈ { 1 , ⋯ , p − 1 } ,都存在唯一的 i ( 1 ⩽ i ⩽ p − 1 ) i(1 \leqslant i \leqslant p - 1) i ( 1 ⩽ i ⩽ p − 1 ) ,使得 b ≡ a i m o d p b \equiv a^i \bmod p b ≡ a i mod p 。称 i \displaystyle{ i } i 为模 p \displaystyle{ p } p 下以 a \displaystyle{ a } a 为底 b \displaystyle{ b } b 的离散对数,记为 i ≡ log a ( b ) m o d p i \equiv \log_a(b) \bmod p i ≡ log a ( b ) mod p
当 a , p , i \displaystyle{ a , p , i } a , p , i 已知,用快速指数算法可以比较容易算出 b \displaystyle{ b } b ,但如果已知 a , b , p \displaystyle{ a , b , p } a , b , p ,求 i \displaystyle{ i } i 则十分困难。
4.2. 公钥密码体制的基本概念
4.2.1. 公钥密码体制的原理
采用两个相关密钥将加密和解密能力分开。一个密钥公开,用于加密数据;一个密钥为用户专用,是保密的,用于解密。
算法的特性:已知密码算法和加密密钥,求解解密密钥在计算上是不可行的
c = E P K B [ m ] m = D S K B [ c ] \begin{aligned}
c & = \mathcal{E}_{PK_B}[m]\\
m & = \mathcal{D}_{SK_B}[c]
\end{aligned} c m = E P K B [ m ] = D S K B [ c ]
公钥密码体制的认证、保密框图
c = E P K B [ E S K A [ m ] ] m = D P K A [ D S K B [ c ] ] \begin{aligned}
c &= \mathcal{E}_{PK_B}[\mathcal{E}_{SK_A}[m]]\\
m &= \mathcal{D}_{PK_A}[\mathcal{D}_{SK_B}[c]]
\end{aligned} c m = E P K B [ E S K A [ m ]] = D P K A [ D S K B [ c ]]
4.2.2. 公钥密码算法应满足的要求
接收方 B 产生密钥对(公钥 P K B \displaystyle{ P K _{ B } } P K B 和私钥 S K B \displaystyle{ S K _{ B } } S K B )是计算上容易的
发方 A 用收方的公开钥对消息 m \displaystyle{ m } m 加密以产生密文 c \displaystyle{ c } c ,即 c = E P K B [ m ] c = \mathcal{E}_{PK_B}[m] c = E P K B [ m ] 在计算上是容易的
收方 B 用自己的秘密钥对 c \displaystyle{ c } c 解密,即 m = D S K B [ C ] m=\mathcal{D}_{SK_B}[C] m = D S K B [ C ] 在计算上是容易的
敌手由 B 的公开钥 P K B \displaystyle{ P K _{ B } } P K B 求秘密钥 S K B \displaystyle{ S K _{ B } } S K B 在计算上是不可行的
敌手由密文 c \displaystyle{ c } c 和 B 的公开钥 P K B \displaystyle{ P K _{ B } } P K B 恢复明文 m \displaystyle{ m } m 在计算上是不可行的
加解密次序可对换,即 E P K B [ D S K B [ m ] ] = D S K B [ E P K B [ m ] ] \mathcal{E}_{PK_B}[\mathcal{D}_{SK_B}[m]]=\mathcal{D}_{SK_B}[\mathcal{E}_{PK_B}[m]] E P K B [ D S K B [ m ]] = D S K B [ E P K B [ m ]]
4.3. RSA 算法
做过实验,基本上不考了
4.3.2. 安全性
4.5. ElGamal 密码体制
4.5.1. 加解密算法
1. 密钥产生过程
选择一素数 p \displaystyle{ p } p 以及小于 p \displaystyle{ p } p 的随机数 x \displaystyle{ x } x ,g \displaystyle{ g } g 是 p \displaystyle{ p } p 的原根,计算 y ≡ g x m o d p y \equiv g^x \bmod p y ≡ g x mod p
y \displaystyle{ y } y 作为公开钥,x \displaystyle{ x } x 作为秘密钥
2. 加密过程
明文消息 M \displaystyle{ M } M 随机选一整数 k < p − 1 \displaystyle{ k < p - 1 } k < p − 1 ,计算 C 1 ≡ g k m o d p , C 2 ≡ y k M m o d p C_1 \equiv g^k \bmod p, C_2 \equiv y^kM \bmod p C 1 ≡ g k mod p , C 2 ≡ y k M mod p ,密文为 C = ( C 1 , C 2 ) \displaystyle{ C = \left( C _{ 1 } , C _{ 2 } \right) } C = ( C 1 , C 2 )
3. 解密过程
M = C 2 C 1 x m o d p M = {C_2 \over C_1^x} \bmod p\\ M = C 1 x C 2 mod p
C 2 C 1 x m o d p = y k M g k x m o d p = y k M y k m o d p = M m o d p {C_2 \over C_1^x} \bmod p={y^kM \over g^{kx} } \bmod p={y^kM \over y^k} \bmod p = M \bmod p C 1 x C 2 mod p = g k x y k M mod p = y k y k M mod p = M mod p
4.5.2. 安全性
安全性基于有限域上的离散对数难解性
加密算法是概率算法
不能抵御选择密文攻击
4.7. 椭圆曲线密码体制
4.7.5.椭圆曲线上的密码
1. Diffie-Hellman 密钥交换
首先取一个素数 p ≈ 2 180 p \approx 2^{180} p ≈ 2 180 和两个参数 a , b \displaystyle{ a , b } a , b ,则得方程
y 2 = x 3 + a x + b ( m o d p ) a , b ∈ G F ( p ) , 4 a 3 + 27 b 2 ≠ 0 ( m o d p ) \begin{aligned}
y^2=x^3 + a x + b \pmod{p} \\
a,b \in GF(p), 4 a^3 + 27 b^2 \ne 0 \pmod{p}
\end{aligned} y 2 = x 3 + a x + b ( mod p ) a , b ∈ GF ( p ) , 4 a 3 + 27 b 2 = 0 ( mod p )
表达的椭圆曲线及其上面的点构成的 Abel 群 E p ( a , b ) \displaystyle{ E _{ p } \left( a , b \right) } E p ( a , b ) 。第二步,取 E p ( a , b ) \displaystyle{ E _{ p } \left( a , b \right) } E p ( a , b ) 的一个生成元 G ( x 1 , y 1 ) \displaystyle{ G \left( x _{ 1 } , y _{ 1 } \right) } G ( x 1 , y 1 ) ,要求 G \displaystyle{ G } G 的阶为一个非常大的素数,G \displaystyle{ G } G 的阶是满足 n G = O \displaystyle{ n G = O } n G = O 的最小正整数 n \displaystyle{ n } n 。E p ( a , b ) \displaystyle{ E _{ p } \left( a , b \right) } E p ( a , b ) 和 G \displaystyle{ G } G 作为公开参数。
两用户 A 和 B 之间的密钥交换如下运行:
A 选一个小于 n \displaystyle{ n } n 的整数 n A \displaystyle{ n _{ A } } n A 作为秘密钥,并由 P A = n A G \displaystyle{ P _{ A } = n _{ A } G } P A = n A G 产生 E p ( a , b ) \displaystyle{ E _{ p } \left( a , b \right) } E p ( a , b ) 上的一点作为公开钥
B 类似地选取自己的秘密钥 n B \displaystyle{ n _{ B } } n B 和公开钥 P B \displaystyle{ P _{ B } } P B
A, B 分别由 K = n A P B \displaystyle{ K = n _{ A } P _{ B } } K = n A P B 和 K = n B P A \displaystyle{ K = n _{ B } P _{ A } } K = n B P A 产生双方共享的秘密钥
这是因为 K = n A P B = n A ( n B G ) = n B ( n A G ) = n B P A \displaystyle{ K = n _{ A } P _{ B } = n _{ A } \left( n _{ B } G \right) = n _{ B } \left( n _{ A } G \right) = n _{ B } P _{ A } } K = n A P B = n A ( n B G ) = n B ( n A G ) = n B P A
攻击者若想获取 K \displaystyle{ K } K ,则必须由 P A \displaystyle{ P _{ A } } P A 和 G \displaystyle{ G } G 求出 n A \displaystyle{ n _{ A } } n A ,或由 P B \displaystyle{ P _{ B } } P B 和 G \displaystyle{ G } G 求出 n B \displaystyle{ n _{ B } } n B ,即需要求椭圆曲线上的离散对数,因此是不可行的。
已知 n \displaystyle{ n } n 和 P \displaystyle{ P } P 求 K \displaystyle{ K } K 是简单的
已知 P \displaystyle{ P } P 和 K \displaystyle{ K } K 求 n \displaystyle{ n } n 在计算上是不可行的
中间人攻击
2. ElGamal 密码体制
原理
选择一素数 p \displaystyle{ p } p 以及小于 p \displaystyle{ p } p 的随机数 x \displaystyle{ x } x ,g \displaystyle{ g } g 是 p \displaystyle{ p } p 的原根,计算 y ≡ g x m o d p y \equiv g^x \bmod p y ≡ g x mod p 。( y , g , p ) \displaystyle{ \left( y , g , p \right) } ( y , g , p ) 作为公开钥,x \displaystyle{ x } x 作为秘密钥。
加密过程 明文消息 M \displaystyle{ M } M 随机选一整数 k < p − 1 \displaystyle{ k < p - 1 } k < p − 1 ,计算 C 1 ≡ g k m o d p , C 2 ≡ y k M m o d p C_1 \equiv g^k \bmod p, C_2 \equiv y^kM \bmod p C 1 ≡ g k mod p , C 2 ≡ y k M mod p ,密文为 C = ( C 1 , C 2 ) \displaystyle{ C = \left( C _{ 1 } , C _{ 2 } \right) } C = ( C 1 , C 2 )
解密过程
M = C 2 C 1 x m o d p M = {C_2 \over C_1^x} \bmod p\\ M = C 1 x C 2 mod p
C 2 C 1 x m o d p = y k M g k x m o d p = y k M y k m o d p = M m o d p {C_2 \over C_1^x} \bmod p={y^kM \over g^{kx} } \bmod p={y^kM \over y^k} \bmod p = M \bmod p C 1 x C 2 mod p = g k x y k M mod p = y k y k M mod p = M mod p
利用椭圆曲线实现 ElGamal 密码体制
首先选取一条椭圆曲线,并得 E p ( a , b ) \displaystyle{ E _{ p } \left( a , b \right) } E p ( a , b ) ,将明文消息 m \displaystyle{ m } m 通过编码嵌入到曲线上得点 P m \displaystyle{ P _{ m } } P m ,再对点 P m \displaystyle{ P _{ m } } P m 做加密变换。
取 E p ( a , b ) \displaystyle{ E _{ p } \left( a , b \right) } E p ( a , b ) 的一个点 G \displaystyle{ G } G ,E p ( a , b ) \displaystyle{ E _{ p } \left( a , b \right) } E p ( a , b ) 和 G \displaystyle{ G } G 作为公开参数。
用户 A 选 n A \displaystyle{ n _{ A } } n A 作为秘密钥,并以 P A = n A G \displaystyle{ P _{ A } = n _{ A } G } P A = n A G 作为公开钥。任一用户 B 若想向 A 发送消息 P m \displaystyle{ P _{ m } } P m ,可选取一随机正整数 k \displaystyle{ k } k ,产生以下点对作为密文
C m = { k G , P m + k P A } \displaystyle{ C _{ m } = \ \left\lbrace k G , P _{ m } + k P _{ A } \ \right\rbrace } C m = { k G , P m + k P A }
A 解密时,以密文点对中的第二个点减去用自己的秘密钥与第一个点的倍乘,即
P m + k P A − n A k G = P m + k ( n A G ) − n A k G = P m \displaystyle{ P _{ m } + k P _{ A } - n _{ A } k G = P _{ m } + k \left( n _{ A } G \right) - n _{ A } k G = P _{ m } } P m + k P A − n A k G = P m + k ( n A G ) − n A k G = P m
攻击者若由 C m \displaystyle{ C _{ m } } C m 得到 P m \displaystyle{ P _{ m } } P m ,就必须知道 k \displaystyle{ k } k 。而要得到 k \displaystyle{ k } k ,只有通过椭圆曲线上的两个已知点 G \displaystyle{ G } G 和 k G \displaystyle{ k G } k G ,这意味着必须求椭圆曲线上的离散对数,因此不可行。
技术蛋老师对椭圆曲线上密码的理解
椭圆曲线已知 n , G \displaystyle{ n , G } n , G ,求出 P = n G \displaystyle{ P = n G } P = n G 在计算上是容易的;而已知 G , P \displaystyle{ G , P } G , P 求出 n \displaystyle{ n } n 是困难的。
就像是让一个小朋友在一个大房间踢球,我们知道球的初始位置,一小时后我们回到房间,我们知道了球的终止位置,但是如果我们想知道小朋友在这一个小时一共踢了多少次,这是一个困难的问题。