【密码学基础】02 数论基础

本文介绍了数论的基础知识,包括整除与同余的概念、素数及其相关定理,并探讨了离散对数问题。适合初学者快速入门。

  数论是研究整数性质的学科,在密码学中广泛应用了数论中一些重要结论,比如素数、离散对数问题等。数论的概念和结论都比较抽象,而且涉及大量的证明,初学时忽略这些细节,而涉及到具体密码算法时掌握更多的细节或许是合理的学习方法。下面将介绍数论中的主要内容,包括整除的整除和同余、素数的基本性质和应用等。

更新历史:

  • 2021年07月18日完成初稿

  数论的知识是比较抽象的,对于只需要简单的数论背景知识的初学者而言,显然长篇大论般的理论和证明是不利于学习的,因此在这里将数论基础分为了「基础篇」和「扩展篇」,基础篇省去了定理的扩展描述和证明,而扩展篇则增加了数论知识的广度和深度,对于初学者而言可以自学习基础篇了解数论中的几个基本概念即可,等到后面涉及数论知识点后重新翻看基础篇和扩展篇即可。

基础篇

  在密码学中,最重要的两大块数论基础知识为整除和同余、素数及其定理,下面将简单介绍关于数论基础知识。

1. 整除和同余

  整除是小学阶段的概念,对此不多介绍,只介绍数论中整除的定义与使用的符号。

  • 整除:设 a , b , m ∈ Z a, b, m\in Z a,b,mZ ∃ m \exists m m使得 a = m b a = mb a=mb成立,则称非零整数 b b b整除 a a a,记作 b ∣ a b|a ba,此时称 b b b a a a的因子, a a a b b b的倍数。举一些例子,比如 2 ∣ 6 , 3 ∣ 6 2|6, 3|6 26,36等。

除数与被除数
  需要熟知一个容易混淆的概念,被除数    ÷    \;\div\; ÷除数    =    \;=\; =商…余数,因此整除描述了「除数」整除「被除数」的情况,比如 6    ÷    3 = 2......0 6\;\div\;3=2......0 6÷3=2......0,描述了 3 3 3整除 6 6 6的情况,在中文中除和除以是不同的概念,一定要区分好。

  在上面,假设有 m ∣ a    , m ∣ b m|a\;,m|b ma,mb说明 m m m a a a的因子,也是 b b b的因子,因此称 m m m a a a b b b的公因子,由于 1 1 1是任何整数的因子,故公因子一定存在(至少为 1 1 1),而令人感兴趣的是两个整数的最大公因子(Greatest Common Divisor)是多少。

  • 最大公因子:设 a , b , m ∈ Z a, b, m \in Z a,b,mZ,而且 m ∣ a , m ∣ b m|a, m|b ma,mb,若 m m m是整除 a a a b b b的最大整数,那么 m m m称为 a a a b b b的最大公因子,记作 m = g c d ( a , b ) m = gcd(a, b) m=gcd(a,b)

互素
  利用最大公因子,可以定义一个常用的概念,即互素:称整数 a , b a,b a,b是互素的,当且仅当 g c d ( a , b ) = 1 gcd(a,b)=1 gcd(a,b)=1

  求解最大公因子有非常有效的算法——欧几里得算法(Euclidean Algorithm),不过欧几里得算法利用了余数的概念,因此下面先介绍余数的概念。整除理解起来还比较简单,在带余除法中定义了余数的概念:

  • 带余除法 ∀ n ∈ Z + \forall n \in Z^+ nZ+ ∀ a ∈ Z \forall a \in Z aZ ∃ q , r ∈ Z \exists q,r \in Z q,rZ 0 ≤ r < n 0\leq r <n 0r<n使得 a = q n + r a=qn+r a=qn+r,其中 q = ⌊ a / n ⌋ q=\lfloor a/n \rfloor q=a/n ⌊ ⌋ \lfloor \rfloor 为向下取整。

  可以看到,其中的 q q q即为商,而 r r r即为余数,按照上面的公式有 r = a − ⌊ a / n ⌋ × n r=a-\lfloor a/n \rfloor \times n r=aa/n×n,在这里用一个更加简洁的符号表达 r r r,那就是模运算符号 m o d mod mod,记作 r = a    m o d    n r=a\;mod\;n r=amodn,这里称 n n n是模数,该运算称为模 n n n运算。

  回到求解最大公因子,对于任意整数 a a a b b b可以通过下面的方式计算 g c d ( a , b ) gcd(a,b) gcd(a,b),不断使用带余除法,直至余数为 0 0 0,此时的除数即为最大公因子,即有下面的过程

a = q 1 b + r 1      ( 0 < r 1 < b ) b = q 2 r 1 + r 2 ( 0 < r 2 < r 1 ) r 1 = q 3 r 2 + r 3 ( 0 < r 3 < r 2 ) . . . r n − 2 = q n r n − 1 + r n ( 0 < r n < r n − 1 ) r n − 1 = q n + 1 r n + 0 ⇒ g c d ( a , b ) = r n a = q_1b + r_1\qquad\;\;(0<r_1<b)\\ b = q_2r_1 + r_2\qquad(0<r_2<r_1)\\ r_1 = q_3r_2 + r_3\qquad(0<r_3<r_2)\\ ...\\ r_{n-2} = q_nr_{n-1} + r_n\quad(0<r_n<r_{n-1})\\ r_{n-1}=q_{n+1}r_n+0\quad \Rightarrow gcd(a,b)=r_n\\ a=q1b+r1(0<r1<b)b=q2r1+r2(0<r2<r1)r1=q3r2+r3(0<r3<r2)...rn2=qnrn1+rn(0<rn<rn1)rn1=qn+1rn+0gcd(a,b)=rn

  欧几里得算法证明并利用了等式: g c d ( a , b ) = g c d ( b , r 1 ) = . . . = g c d ( r n − 1 , r n ) = g c d ( r n , 0 ) = r n gcd(a,b) = gcd(b,r_1)=...=gcd(r_{n-1},r_n)=gcd(r_n,0)=r_n gcd(a,b)=gcd(b,r1)=...=gcd(rn1,rn)=gcd(rn,0)=rn。下面是欧几里得算法的实现:

# 利用Euclid算法计算最小公因数gcd(a, b)
def Euclid_gcd(a, b):
    r1 = max(abs(a), abs(b))     # 令r1等于绝对值大的数
    r2 = min(abs(a), abs(b))     # 令r2等于绝对值小的数
    if r2 == 0:
        return r1
    else:
        return Euclid_gcd(r2, r1%r2)

  尽管整除是一种很好的性质,但不是所有整数都具备,大部分情况而言,对于两个整数相除还是会存在余数。注意到一种情况,两个不同的数 a , b a,b a,b都是除以另一个数 n n n可能获得相同的余数,这种情况称为关于模 n n n是同余的:

  • 同余:若 a    m o d    n = b    m o d    n a\;mod\;n=b\;mod\;n amodn=bmodn,那么称整数 a a a b b b是模 n n n同余的,记作 a ≡ b ( m o d    n ) a\equiv b(mod\;n) ab(modn)

  同余运算中,最重要的是模数 n n n,比如 6 6 6 11 11 11 5 5 5同余,而模 3 3 3就不同余了。因此考虑一般情况,对于模 n n n运算,考察所有整数 Z = { 0 , ± 1 , ± 2 , ± 3 , . . . } Z=\{0, \pm 1, \pm 2, \pm 3, ...\} Z={ 0,±1,±2,±3,...} ∀ a ∈ Z \forall a\in Z aZ,根据定义 a    m o d    n ∈ { 0 , 1 , 2 , . . . , n − 1 } a\;mod\;n\in \{0, 1, 2,..., n-1\} amodn{ 0,1,2,...,n1},因此对于任何整数只要进行模 n n n运算之后,所有整数都被限制到有限的集合中,那么必然会出现同余的情况,依据此可以定义下面两个概念:

  • 剩余类集:模 n n n运算的所有余数的集合,记作 Z n = { 0 , 1 , 2 , . . . , n − 1 } Z_n=\{0, 1, 2,..., n-1\} Zn={ 0,1,2,...,n1}
  • 剩余类:所有模 n n n同余的整数的集合,一般用最小的非负整数作为代表,记作 [ 0 ] , [ 1 ] , [ 2 ] , . . , [ n − 1 ] [0],[1],[2],..,[n-1] [0],[1],[2],..,[n1]

  下面举一个例子:计算 ∀ a ∈ Z ,    a    m o d    3 \forall a\in Z,\;a\;mod\;3 aZ,amod3
. . . , − 9 , − 6 , − 3 , 0 , 3 , 6 , 9 , . . .    m o d    3 = 0 . . . , − 8 , − 5 , − 2 , 1 , 4 , 7 , 10 , . . .    m o d    3 = 1 . . . , − 7 , − 4 , − 1 , 2 , 5 , 8 , 11 , . . .    m o d    3 = 2 ..., -9, -6, -3, 0, 3, 6, 9, ...\;mod\;3=0\\ ..., -8, -5, -2, 1, 4, 7, 10, ...\;mod\;3=1\\ ..., -7, -4, -1, 2, 5, 8, 11, ...\;mod\;3=2\\ ...,9,6,3,0,3,6,9,...mod3=0...,8,5,2,1,4,7,10,...mod3=1...,7,4,1,2,5,8,11,...mod3=2

  则 Z 3 = { 0 , 1 , 2 } Z_3=\{0, 1, 2\} Z3={ 0,1,2},而剩余类有 3 3 3个,分别是:
[ 0 ] = { . . . , − 9 , − 6 , − 3 , 0 , 3 , 6 , 9 , . . . } [ 1 ] = { . . . , − 8 , − 5 , − 2 , 1 , 4 , 7 , 10 , . . . } [ 2 ] = { . . . , − 7 , − 4 , − 1 , 2 , 5 , 8 , 11 , . . . } [0]=\{..., -9, -6, -3, 0, 3, 6, 9, ...\}\\ [1]=\{..., -8, -5, -2, 1, 4, 7, 10, ...\}\\ [2]=\{..., -7, -4, -1, 2, 5, 8, 11, ...\}\\ [0]={ ...,9,6,3,0,3,6,9,...}[1]={ ...,8,5,2,1,4,7,10,...}[2]={ ...,7,4,1,2,5,8,11,...}

  上面讲述了很多同余的概念,之所以关注这些是为了进行剩余类上的模运算:

  • 模运算:称二元运算 a    m o d    n = r a\;mod\;n=r amodn=r是模 n n n运算, r r r a a a n n n的值,且 0 ≤ r < n 0\leq r <n 0r<n

  可以证明对于任意两个整数 a a a b b b有下面的结论,即:

  • [ ( a    m o d    n ) + ( b    m o d    n ) ]    m o d    n = ( a + b )    m o d    n [(a\;mod\;n)+(b\;mod\;n)]\;mod\;n=(a+b)\;mod\;n [(amodn)+(bmodn)]modn=(a+b)modn
  • [ ( a    m o d    n ) − ( b    m o d    n ) ]    m o d    n = ( a − b )    m o d    n [(a\;mod\;n)-(b\;mod\;n)]\;mod\;n=(a-b)\;mod\;n [(amodn)(bmodn)]modn=(ab)modn
  • [ ( a    m o d    n ) × ( b    m o d    n ) ]    m o d    n = ( a × b )    m o d    n [(a\;mod\;n)\times (b\;mod\;n)]\;mod\;n=(a\times b)\;mod\;n [(amodn)×(bmodn)]modn=(a×b)modn
  • 加法交换律 ( a + b )    m o d    n = ( b + a )    m o d    n (a+b)\;mod\;n=(b+a)\;mod\;n (a+b)modn=(b+a)modn
  • 乘法交换律 ( a × b )    m o d    n = ( b × a )    m o d    n (a\times b)\;mod\;n=(b\times a)\;mod\;n (a×b)modn=(b×a)modn
  • 加法消去律 a + b = a + c ⇒ b = c    ( m o d    n ) a+b=a+c\Rightarrow b=c\;(mod\;n) a+b=a+cb=c(modn)
  • 乘法消去律 a a a在模 n n n运算中存在乘法逆元时): ∀ a ≠ 0 , a × b = a × c ⇒ b = c    ( m o d    n ) \forall a\neq 0, a\times b=a\times c\Rightarrow b=c\;(mod\;n) a=0,a×b=a×cb=c(modn)

  消去律的成立与否与逆元的存在与否有很大关系,下面是加法逆元和乘法逆元的定义:

  • 加法逆元 a , b ∈ Z n a,b\in Z_n a,bZn,若 ( a + b )    m o d    n = 0 (a+b)\;mod\;n=0 (a+b)modn=0,则 a a a b b b互为加法逆元,记 a a a的加法逆元为 − a -a a
  • 乘法逆元 a , b ∈ Z n a,b\in Z_n a,bZn,若 ( a × b )    m o d    n = 1 (a\times b)\;mod\;n=1 (a×b)modn=1,则 a a a b b b互为乘法逆元,记 a a a的乘法逆元为 a − 1 a^{-1} a1

  由于加法逆元一定存在,故加法消去律一定成立,而但当且仅当 g c d ( a , n ) = 1 gcd(a,n)=1 gcd(a,n)=1时, a a a才在模 n n n运算中存在乘法逆元,故乘法消去律在该条件下才成立。

2. 素数及其定理

  素数是数论的核心概念,比如著名的哥德巴赫猜想等就与素数有关。素数的定义很简单,与之对应的还有合数的概念:

  • 素数:正因子只有 1 1 1和它本身的正整数称为素数,而且规定 1 1 1不是素数,常记作 p p p
  • 合数:合数是指正整数中不是素数的数,其除 1 1 1和它本身之外,还有其他因子

因此, 2 2 2是最小的素数,除 2 2 2以外,素数都为奇数,最小的合数为 4 4 4。合数有一个非常重要的性质,称为算术基本定理:

  • 算术基本定理:任何合数都可以唯一分解为若干个素数的乘积。

  即对于任何整数 a > 1 a>1 a>1可以唯一分解为 a = p 1 a 1 p 2 a 2 . . . p n a n a=p_1^{a_1} p_2^{a_2}... p_n^{a_n} a=p1a1p2a2...pnan ∀ i ∈ { 1 , 2 , . . . , n } \forall i\in \{1, 2, ..., n\} i{ 1,2,...,n} p i p_i pi是素数( p 1 < p 2 < . . . < p n p_1<p_2<...<p_n p1<p2<...<pn), a i a_i ai是正整数。

  关于素数,有两个常用的定理——费马小定理和欧拉定理,这两个定理在密码学中应用十分广泛。

  • 费马小定理:若 p p p是素数,则对任何与 p p p互素的正整数 a a a有,则有 a p − 1 ≡ 1 ( m o d    p ) a^{p-1}\equiv 1(mod\;p) ap11(modp)

  该定理还有另外一种形式:若 p p p是素数,且 a ∈ Z + a\in Z^+ aZ+,那么 a p ≡ a ( m o d    p ) a^p\equiv a(mod\;p) apa(modp)。因此可以总结费马小定理为:若 p p p是素数,则 ∀ a ∈ Z + \forall a\in Z^+ aZ+ a p ≡ a ( m o d    p ) a^p\equiv a(mod\;p) apa(modp),进一步地,若 a a a p p p互素,则有 a p − 1 ≡ 1 ( m o d    p ) a^{p-1}\equiv 1(mod\;p) ap11(modp)

  • 欧拉定理:对于任意互素的正整数 a a a n n n有: a ϕ ( n ) ≡ 1 ( m o d    n ) a^{\phi(n)}\equiv 1(mod\;n) aϕ(n)1(modn)

  其中 ϕ ( n ) \phi(n) ϕ(n)称为欧拉函数,是指小于等于 n n n的与 n n n互素的正整数个数,常采用下面几个公式计算 ϕ ( n ) \phi(n) ϕ(n)

  • n n n是素数,则 ϕ ( n ) = n − 1 \phi(n)=n-1 ϕ(n)=n1
  • n = p q n=pq n=pq,其中 p p p q q q均为素数,那么 ϕ ( n ) = ϕ ( p ) ϕ ( q ) \phi(n)=\phi(p)\phi(q) ϕ(n)=ϕ(p)ϕ(q),进一步地若 p p p q q q互素( g c d ( p , q ) = 1 gcd(p,q)=1 gcd(p,q)=1),那么 ϕ ( n ) = ϕ ( p ) ϕ ( q ) \phi(n)=\phi(p)\phi(q) ϕ(n)=ϕ(p)ϕ(q)也成立
  • n = p t n=p^t n=pt,其中p是素数,那么 ϕ ( n ) = p t − p t − 1 \phi(n)=p^t-p^{t-1} ϕ(n)=ptpt1

  总结一下,对于费马定理和欧拉定理,如果计算 a x ≡ b ( m o d    n ) a^x\equiv b(mod\;n) axb(modn)中的一些参数,那么如果 n n n是素数,那么考虑费马定理,若 n n n不是素数则考虑欧拉定理。

  最后,介绍一下离散对数问题(Discrete logarithm),离散对数问题是包括Diffie-Hellman密钥交换算法和数字签名算法(DSA)在内的许多公钥算法的基础。在介绍离散对数问题之前,还需要介绍一下本原根的概念,它是离散对数的基础。

  • 本原根:使得 a m ≡ 1 ( m o d    n ) a^m\equiv 1(mod\;n) am1(modn)的最小正整数 m m m称为 a a a的阶,若 m = ϕ ( n ) m=\phi(n) m=ϕ(n) a a a称为 n n n的本原根

  本原根的定义是抽象的,实际上,若考虑 X X X为小于等于 n n n且与 n n n互素的正整数集合,即 X = { x 1 , x 2 , . . . , x ϕ ( n ) } X=\{x_1, x_2, ..., x_{\phi(n)}\} X={ x1,x2,...,xϕ(n)},其中 ∀ i ∈ { 1 , 2 , . . . , ϕ ( n ) } \forall i\in\{1, 2, ..., \phi(n)\} i{ 1,2,...,ϕ(n)} g c d ( x i , n ) = 1 gcd(x_i, n)=1 gcd(xi,n)=1 a a a n n n的本原根当且仅当集合 { ( a 1    m o d    n ) , ( a 2    m o d    n ) , . . . , ( a ϕ ( n )    m o d    n ) } = X \{(a^1\;mod\;n), (a^2\;mod\;n),...,(a^{\phi(n)}\;mod\;n)\}=X { (a1modn),(a2modn),...,(aϕ(n)modn)}=X

  根据定义,对于一个素数 p p p(本原根定义中不要求素数)而言,由于 ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ(p)=p1,且上述定义的集合 X = { 1 , 2 , . . . , p − 1 } X=\{1,2,...,p-1\} X={ 1,2,...,p1},故设 a a a为本原根,则 a a a满足:

{ ( a 1    m o d    p ) , ( a 2    m o d    p ) , . . . , ( a ϕ ( p )    m o d    p ) } = { ( a 1    m o d    p ) , ( a 2    m o d    p ) , . . . , ( a p − 1    m o d    p ) } = { 1 , 2 , . . . , p − 1 } \{(a^1\;mod\;p),(a^2\;mod\;p),...,(a^{\phi (p)}\;mod\;p)\} \\ = \{(a^1\;mod\;p),(a^2\;mod\;p),...,(a^{p-1}\;mod\;p)\} \\ = \{1,2,...,p-1\}\qquad\qquad\qquad\qquad\qquad\qquad { (a1modp),(a2modp),...,(aϕ(p)modp)}={ (a1modp),(a2modp),...,(ap1modp)}={ 1,2,...,p1}

  因此对于任何整数 b b b b    m o d    p ∈ { 1 , 2 , . . . , p − 1 } b\;mod\;p\in \{1,2,...,p-1\} bmodp{ 1,2,...,p1},故一定存在 i ∈ { 1 , 2 , . . . , p − 1 } i\in \{1,2,...,p-1\} i{ 1,2,...,p1}使得 a i ≡ b ( m o d    p ) a^i\equiv b(mod\;p) aib(modp),此时 i i i就被称为以 a a a为底模 p p p运算的 b b b的离散对数,记作 i = d l o g a , p b i=dlog_{a,p}b i=dloga,pb

  • 离散对数:若 a i ≡ b ( m o d    p ) a^i\equiv b(mod\;p) aib(modp),此时 i i i就被称为以 a a a为底模 p p p运算的 b b b的离散对数,记作 i = d l o g a , p b i=dlog_{a,p}b i=dloga,pb

  离散对数是基于本原根的概念,只有存在本原根时才存在唯一的以 a a a为底模 m m m的离散对数,而模数 m m m一般选为素数,因为素数存在本原根。最后介绍一下离散对数难题:

  • 离散对数难题:对于方程 y = g x    m o d    p y=g^x\;mod\;p y=gxmodp,已知 g , x , p g,x,p g,x,p可以很容易计算 y y y,而已知 y , g , p y,g,p y,g,p很难计算 x x x,是指数级别复杂度的,因此计算离散对数是计算困难的。

扩展篇

  相比于基础篇,扩展篇增加了很多内容,尤其是定理的证明,不过对于初学者而言,不需要对此有很深刻的理解,初学时跳过即可。

1. 整数的整除和同余

  数论中主要研究整数的性质,特别是两个整数之间的关系,其中整除和同余是经常被讨论的。

1.1 整除和余数

  在小学里,我们学过这样一个公式:被除数    ÷    \;\div\; ÷除数    =    \;=\; =商…余数。整除的含义即为余数为0 ,而当余数不为0时,此时就需要用余数表示不能整除的部分,下面就从整除出发,介绍整数的整除和余数的基本概念。

1.1.1 带余除法

  尽管整除理解起来很简单,但还是需要给出整除的形式化定义:

  • 整除:设 a , b , m ∈ Z a, b, m\in Z a,b,mZ ∃ m \exists m m使得 a = m b a = mb a=mb成立,则称非零整数 b b b整除 a a a,记作 b ∣ a b|a ba,此时称 b b b a a a的因子, a a a b b b的倍数。

  特殊地,任何不等于 0 0 0的整数都整除 0 0 0,即 ∀ a ≠ 0 , a ∣ 0 \forall a \neq 0, a|0 a=0,a0,而且 1 1 1整除任何整数,即 ∀ a ∈ Z , 1 ∣ a \forall a \in Z, 1|a aZ,1a

  不过大多数时候都可能除不尽,即余数不为 0 0 0,那么就会有余数(remainder)的概念。在数论中,带余除法描述了这一情形,下面是带余除法的形式化定义:

  • 带余除法 ∀ n ∈ Z + \forall n \in Z^+ nZ+ ∀ a ∈ Z \forall a \in Z aZ ∃ q , r ∈ Z \exists q,r \in Z q,rZ 0 ≤ r < n 0\leq r <n 0r<n使得 a = q n + r a=qn+r a=qn+r,其中商 q = ⌊ a / n ⌋ q=\lfloor a/n \rfloor q=a/n ⌊ ⌋ \lfloor \rfloor 为向下取整,而余数 r = a − ⌊ a / n ⌋ × n r=a-\lfloor a/n \rfloor \times n r=aa/n×n

  下面是带余除法的图示表示,可以看到 a a a q q q是同号的,因为需要保证余数是非负整数。

1.1.2 最大公因子

  在整除定义中提到了因子的概念, m ∣ a m|a ma说明 m m m a a a的因子,若 m ∣ a m|a ma m ∣ b m|b mb说明 m m m a , b a,b a,b的因子,称为 a a a b b b的公因子,由于 1 1 1是任何整数的因子,故公因子一定存在(至少为 1 1 1),而关注最多的的是最大的公因子:

  • 最大公因子(Greatest Common Divisor):设 a , b , m ∈ Z a, b, m \in Z a,b,mZ,而且 m ∣ a , m ∣ b m|a, m|b ma,mb,若 m m m是整除 a a a b b b的最大整数,那么 m m m称为 a a a b b b的最大公因子,记作 m = g c d ( a , b ) m = gcd(a, b)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stu_Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值