数论与RSA算法


对数学一直很感兴趣,而数论又被称为数学的皇冠,之前一直被冠以纯粹的无用的数学。结果计算机的发展,让数论大放异彩。这里记录一个现在通用的公钥秘钥协议,即RSA协议(由其发现者,三位密码学家Rivest、Shamir、Adleman的首字母缩写命名),祥记一下这个算法的具体内容,对于内容中的东西都证明一番。还是那句话 教会别人,才证明自己真正明白 。捎带感叹一下数学的伟大。

密码发展史

毕竟是个密码学方法,而且还是革命性的。想要详细介绍它以下,那么密码学的发展史就不得不提一下了。
据说人类使用密码的历史,跟人类使用文字的历史一样长。看来秘密确实是人类的刚需呀,为了保守秘密,在传播的过程中为了保住秘密,也是煞费苦心了。尤其是伴随着战争,政治阴谋等,有些事情就得防着敌人。

1976年算是古典密码学与现代密码学的分界线,这一年提出了公钥密码,从此密码学也进入了新时代。在这之前,密码学一直是单纯私钥性质的,即明文使用私钥编成密文,密文也通过私钥转为明文。这个时候私钥就很重要,通过私钥可以建立明文到密文的一一映射,私钥也是解密的关键,如果不小心被窃取,那么密文也就相当于明文一样展露在别人面前了。

公钥体系是什么呢?公钥体系说的是将明文通过公钥加密,这个公钥是可以公开的,敌人知道也无所谓。有公钥是没办法解密明文的,需要私钥才能真正明文。这样需要分享秘密的两个人,就不需要分享私钥,以致在分享的过程中被窃取私钥了。(一般来讲,通过这个体系编码的密码很难被破解,如果你跟你兄弟用这个体系编译密文,原则上讲,根本不会被你老婆发现,你跟你兄弟什么时候去网吧打游戏。)

接下来要说的一个算法,就是最开始的公钥秘钥方法。方法很简单,用的都是数论知识。但是原则上来讲,用经典计算机都不能破解。

符号语言

为了记录方便,先说明一下接下来要用到的符号语言。

  • g c d ( a , b ) gcd(a, b) gcd(a,b),指a和b的最大公约数。
  • a ≡ b ( m o d   m ) a\equiv b (mod\ m) ab(mod m),指a除以m余b。

RSA 算法

费马小定理

数论相关的事儿,貌似都要从费马这位业余数学之王(他真的只是业余搞数学,人家主业是律师)开始说起。

费马小定理是关于素数的定义。定理内容如下

p p p是个素数, g c d ( a , p ) = 1 gcd(a, p)=1 gcd(a,p)=1,则 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv 1(mod\quad p) ap11(modp)

嗯,数学定理就是这么言简意赅。这个定理很厉害呀,接下来要说的RSA基本就是基于这个定理的。这个定理证明也不复杂:

不是一般性,我们讨论 a < p a<p a<p(取模的情况下,所有大于的都会映射会小于的范围)。对于素数 p p p,他的余数为 { 1 , 2 , . . . , p − 1 } \{1, 2, ..., p-1\} {1,2,...,p1}这个集合,而且这个集合有个特点,其中每个数都满足以下条件
g c d ( a , p ) = 1 , ∀ a ∈ { 1 , 2 , . . . , p − 1 } gcd(a, p)=1, \forall a\in \{1, 2, ..., p-1\} gcd(a,p)=1,a{1,2,...,p1}
即每个数都与p互质(素数的优良性质)。对于集合 { 1 , 2 , . . . , p − 1 } \{1, 2, ..., p-1\} {1,2,...,p1}来说,也有一个特别好的性质,
a ∗ { 1 , 2 , . . . , p − 1 } ( m o d   p ) = { 1 , 2 , . . . , p − 1 } , ∀ a ∈ { 1 , 2 , . . . , p − 1 } a*\{1, 2, ..., p-1\} (mod\ p) = \{1, 2, ..., p-1\}, \forall a\in \{1, 2, ..., p-1\} a{1,2,...,p1}(mod p)={1,2,...,p1},a{1,2,...,p1}
即a乘以集合 { 1 , 2 , . . . , p − 1 } \{1, 2, ..., p-1\} {1,2,...,p1}中的元素,对p取模构成的集合,等于原来的集合。这个性质很好证明,需要两步,一是证明 a ∗ α ( m o d   p ) ∈ { 1 , 2 , . . . , p − 1 } , ∀ α ∈ { 1 , 2 , . . . , p − 1 } a*\alpha(mod\ p)\in\{1, 2, ..., p-1\}, \forall \alpha\in\{1, 2, ..., p-1\} aα(mod p){1,2,...,p1},α{1,2,...,p1},二是证明 a ∗ α ≠ a ∗ β ( m o d   p ) , ∀ α ! = β , α , β ∈ { 1 , 2 , . . . , p − 1 } a*\alpha \ne a*\beta(mod\ p), \forall \alpha !=\beta, \alpha,\beta\in\{1, 2, ..., p-1\} aα=aβ(mod p),α!=β,α,β{1,2,...,p1}。这两条性质都很好证明,理解起来其实都不用公式。我们本着严谨的态度,用公式语言证明一下。首先证明一:
∵ g c d ( a , p ) = 1 , g c d ( α , p ) = 1 d e f i n e    θ = a ∗ α ( m o d   p ) ∴ g c d ( θ , p ) = 1 , θ ∈ { 1 , 2 , . . . , p − 1 } \begin{aligned} &\because gcd(a, p)=1, gcd(\alpha, p)=1\\ &define\ \ \theta=a*\alpha(mod\ p)\\ &\therefore gcd(\theta, p)=1, \theta\in\{1, 2, ..., p-1\} \end{aligned} gcd(a,p)=1,gcd(α,p)=1define  θ=aα(mod p)gcd(θ,p)=1,θ{1,2,...,p1}
其次采用反证法证明二:
l e t   α , β ∈ { 1 , 2 , . . . , p − 1 } , α ! = β a n d   a ∗ α = a ∗ β ( m o d   p ) ∴ a ∗ ( α − β ) = n ∗ p , n ∈ N ∵ g c d ( a , p ) = 1 ∴ ( α − β ) = n ′ ∗ p , n ′ ∈ N ∵ α , β ∈ { 1 , 2 , . . . , p − 1 } ∴ ( α − β ) ∈ ( − p + 2 , p − 2 ) ∴ ( α − β ) = 0 c o n f l i c t !   s o   t h e   r e s u l t   s h o u l d   b e a ∗ α ≠ a ∗ β ( m o d   p ) \begin{aligned} &let\ \alpha, \beta\in\{1, 2, ..., p-1\}, \alpha!=\beta\\ &and \ a*\alpha=a*\beta(mod\ p)\\ &\therefore a*(\alpha-\beta)=n*p, n\in N\\ &\because gcd(a, p)=1\\ &\therefore (\alpha-\beta)=n^\prime*p, n^\prime\in N\\ &\because \alpha, \beta\in\{1, 2, ..., p-1\}\\ &\therefore (\alpha-\beta)\in(-p+2, p-2)\\ &\therefore (\alpha-\beta)=0\\ &conflict!\ so\ the\ result\ should\ be\\ &a*\alpha\ne a*\beta(mod\ p) \end{aligned} let α,β{1,2,...,p1},α!=βand aα=aβ(mod p)a(αβ)=np,nNgcd(a,p)=1(αβ)=np,nNα,β{1,2,...,p1}(αβ)(p+2,p2)(αβ)=0conflict! so the result should beaα=aβ(mod p)

由以上证明的两条,我们可以推算出,这两个集合数量相等,而且乘积集合 a ∗ { 1 , 2 , . . . , p − 1 } a*\{1, 2, ..., p-1\} a{1,2,...,p1}中的元素都在余数集合中,那么这两个集合相等。如何,我们将两个集合中的元素都相乘,得到的乘积再取余的时候都是相等的,即
a p − 1 ∗ ( p − 1 ) ! = ( p − 1 ) ! ( m o d   p ) ⇒    a p − 1 = 1 ( m o d   p ) \begin{aligned} &a^{p-1}*(p-1)!=(p-1)!(mod\ p)\\ &\Rightarrow\ \ a^{p-1}=1(mod\ p) \end{aligned} ap1(p1)!=(p1)!(mod p)  ap1=1(mod p)
如此,费马小定理证完。啊,为啥叫费马小定理,应该是为了区分大名鼎鼎的费马大定理!

欧拉定理

欧拉定理太多,这个是数论里面的欧拉定理。欧拉定理是费马小定理的推广,费马小定理是欧拉定理的特例。欧拉定理说的是
a ϕ ( n ) = 1 ( m o d   n ) , ∀ n ∈ N , g c d ( a , n ) = 1 a^{\phi(n)} = 1(mod\ n), \forall n\in \mathbb{N}, gcd(a, n)=1 aϕ(n)=1(mod n),nN,gcd(a,n)=1
式中 ϕ ( n ) \phi(n) ϕ(n)是欧拉函数,在整数 n n n的余数集合中,与 n n n互质数字的个数。证明方法其实和上面费马小定理的证明过程一样,在整数 n n n的余数集合中,选取与其互质的数组成的集合,也会构成一个群,这个群也具有与上面将的哪个群共同的性质,因此也可以直接推导出这个欧拉公式。大概推导思路是这个样子的,本着严谨科学驱逐读者的态度(每增加一个公式要少一半读者),我们再来推导一下。

记正整数 n n n的余数集合 { 1 , 2 , . . . , n − 1 } \{1, 2, ..., n-1\} {1,2,...,n1}中,与 n n n互质的数组成的集合为 G G G,同样的方式我们可以证明,对于集合 G G G,有
a ∗ G = G , ∀ a ∈ G a*G=G, \forall a\in G aG=G,aG
有趣的是,只有在余数集合中的互质元素组成的集合才有这样的性质,如果不互质,就不具有了。例如对于6的余数集合 { 1 , 2 , 3 , 4 , 5 } \{1, 2, 3, 4, 5\} {1,2,3,4,5},对于元素2,有 2 ∗ { 1 , 2 , 3 , 4 , 5 } = { 0 , 2 , 4 } 2*\{1, 2, 3, 4, 5\}=\{0, 2, 4\} 2{1,2,3,4,5}={0,2,4}
由以上性质,可以继续推导,两个集合里面的数分别乘积,即可得到
a ϕ ( n ) = 1 ( m o d   n ) , ∀ n ∈ N a^{\phi(n)}=1(mod\ n), \forall n\in \mathbb{N} aϕ(n)=1(mod n),nN
欧拉公式 ϕ ( n ) \phi(n) ϕ(n)是有计算公式的,我们知道一个任意整数可以分解成它的质因数的形式
n = ∏ p i n i n = \prod p_i^{n_i} n=pini
的形式,式中 p i p_i pi是质数且 g c d ( p i , n ) = p i gcd(p_i, n)=p_i gcd(pi,n)=pi

中国同余定理与欧拉公式

我们知道质数 p p p的余数集合全部与 p p p互质,所以它的互质余数集合中有元素 p − 1 p-1 p1个,即 ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ(p)=p1,代入欧拉定理,即可得到费马小定理。

我们再将上面的例子推广考虑一个简单情况, n = p n p n=p^{n_p} n=pnp,即正整数 n n n除却1和自身外,只有一个质数因子 p p p的情况。对于这种情况,我们可以人工数出来,在 n n n的余数集合中,有多少个是与它互质的。这个比较简单,因为 n n n就只含有一个素数因子,数一下 n n n的余数集合 { 1 , 2 , 3 , . . . , n − 1 } \{1, 2, 3, ..., n-1\} {1,2,3,...,n1}中有几个包含 p p p这个素数因子即可。即看这些数中有 α ∗ p \alpha*p αp这样的结构。显然,这些数中有 { 1 ∗ p , 2 ∗ p , 3 ∗ p , . . . , ( p n p − 1 ) ∗ p } \{1*p, 2*p, 3*p, ..., (p^{n_p}-1)*p\} {1p,2p,3p,...,(pnp1)p}。我们数一下,总共有 p n p − 1 − 1 p^{n_p-1}-1 pnp11个。这样,欧拉函数
ϕ ( p n p ) = p n p − 1 − ( p n p − 1 − 1 ) = p n p − p n p − 1 = p n p ( 1 − 1 p ) ∀ p ,   w h e r e   p   i s   a   p r i m e . \begin{aligned} \phi(p^{n_p}) &= p^{n_p}-1-(p^{n_p-1}-1)\\ &= p^{n_p}-p^{n_p-1}\\ &= p^{n_p}(1-\frac{1}{p})\\ \forall p, &\ where\ p\ is\ a\ prime. \end{aligned} ϕ(pnp)p,=pnp1(pnp11)=pnppnp1=pnp(1p1) where p is a prime.
既然这两种特殊情况下我们都可以求得欧拉函数,那么可不可以求得任意整数的欧拉函数呢?欧拉函数有一个很好的性质
ϕ ( m n ) = ϕ ( m ) ϕ ( n ) , ∀ m , n ,   w h e r e   g c d ( m , n ) = 1 \phi(mn) = \phi(m)\phi(n), \forall m, n,\ where\ gcd(m, n)=1 ϕ(mn)=ϕ(m)ϕ(n),m,n, where gcd(m,n)=1
证明我们需要借助中国同余定理
c o n d i t i o n   a ≡ a m ( m o d   m ) , a ≡ a n ( m o d   n ) l e t   m − 1 m ≡ 1 ( m o d   n ) ,   n − 1 n ≡ 1 ( m o d   m ) , w h e r e   m − 1 , n − 1 ∈ N ⇒   a = a m ∗ n n − 1 + a n ∗ m m − 1 ( m o d   m n ) \begin{aligned} condition\ a\equiv a_m&(mod\ m), a\equiv a_n(mod\ n)\\ let\ m^{-1}m\equiv1(mod\ n),\ n^{-1}n&\equiv1(mod\ m), where\ m^{-1}, n^{-1}\in\mathbb{N}\\ \Rightarrow\ a=a_m*nn^{-1} &+a_n*mm^{-1}(mod\ mn) \end{aligned} condition aamlet m1m1(mod n), n1n a=amnn1(mod m),aan(mod n)1(mod m),where m1,n1N+anmm1(mod mn)
这样,通过代入可以很容易的证明,a满足于两个条件。这个推导说明什么呢?说明对于对于两个互质的数, m , n m,n m,n,对于他们的各自的余数 ( a m , a n ) (a_m, a_n) (am,an),可以构造唯一的数 a a a m n mn mn这个乘积的余数。特别的,当 g c d ( a m , m ) = 1 , g c d ( a n , n ) = 1 , g c d ( m , n ) = 1 gcd(a_m, m)=1, gcd(a_n, n)=1, gcd(m,n)=1 gcd(am,m)=1,gcd(an,n)=1,gcd(m,n)=1,则可以推导出 g c d ( a n , m ) = 1 , g c d ( a m , n ) = 1 , g c d ( a , m n ) = 1 gcd(a_n, m)=1, gcd(a_m, n)=1, gcd(a, mn)=1 gcd(an,m)=1,gcd(am,n)=1,gcd(a,mn)=1。由此也知,任意与 m n mn mn互质的余数 a a a,肯定也与 m , n m, n m,n分别互质,可以求得它对应的 a m , a n a_m, a_n am,an,这也是一一对应的。所以可以得到一个重要结论, m n mn mn互质余数子集中元素,与 m , n m, n m,n分别的互质余数子集中的元素一一对应,即 m n mn mn互质余数子集元素个数,等于 m , n m, n m,n分别的互质余数子集中的元素个数乘积相等,即
ϕ ( m n ) = ϕ ( m ) ϕ ( n ) , ∀ m , n ,   w h e r e   g c d ( m , n ) = 1 \phi(mn) = \phi(m)\phi(n), \forall m, n,\ where\ gcd(m, n)=1 ϕ(mn)=ϕ(m)ϕ(n),m,n, where gcd(m,n)=1
欧拉公式得证。如此,任意正整数 n ∈ N n\in\mathbb{N} nN都可以通过上面的两个式子得到其欧拉公式。具体表述如下:
N = ∏ i p i n i , w h e r e   p i   i s   p r i m e . w e   h a v e   ϕ ( N ) = ∏ i p i n i ( 1 − 1 p i ) \begin{aligned} N = \prod_i p_i^{n_i}, where\ p_i\ is\ prime.\\ we\ have\ \phi(N) = \prod_ip^{n_i}_i(1-\frac{1}{p_i}) \end{aligned} N=ipini,where pi is prime.we have ϕ(N)=ipini(1pi1)

RSA算法

接下来要利用上面已经证明的几个公式,来做一个魔术,推导出这个目前原则上用经典计算机不能解开的密码协议算法。
回顾一下欧拉定理
a ϕ ( n ) = 1 ( m o d   n ) , ∀ n ∈ N , g c d ( a , n ) = 1 a^{\phi(n)} = 1(mod\ n), \forall n\in \mathbb{N}, gcd(a, n)=1 aϕ(n)=1(mod n),nN,gcd(a,n)=1
如果我们有两个大质数(一般是 2 500 2^{500} 2500左右) p , q , g c d ( p , q ) = 1 p, q, gcd(p, q)=1 p,q,gcd(p,q)=1,我们计算 N = q p N=qp N=qp,如此便得到另外一个大数 N N N,我们在计算下 M = ( p − 1 ) ( a − 1 ) M=(p-1)(a-1) M=(p1)(a1),得到第四个大数 M M M,选取一个数 e e e,计算 e d ≡ 1 ( m o d   M ) ed\equiv 1(mod\ M) ed1(mod M),得到最后一个数 d d d。如此,准备完毕。我们把 ( e , N ) (e, N) (e,N),当做公钥,把 ( d , N ) (d, N) (d,N),当做私钥,其他都丢掉就可以了。下面说明一下公钥和私钥怎么使用。

经典的Bob, Alice通讯。如果Alice想给Bob发讯息,不想被Eve窃听到。那么Bob可以发布一个公钥 ( e , N ) (e, N) (e,N),私钥自己保留,谁也不告诉。Alice可以将自己要发给Bob的信息编码成二进制 M M M,然后通过运算得到密码 x = M c ( m o d   N ) x=M^{c}(mod\ N) x=Mc(mod N),再将 x x x发送给Bob。公钥是发布的,大家都知道,x也可以被Eve窃听,不过原则上Eve通过公钥不能解码x。而Bob收到讯息x后,可以通过只有自己知道的私钥很轻松的解出来
x d ( m o d   N ) = M c d ( m o d   N ) = M 1 + n ( p − 1 ) ( q − 1 ) ( m o d   N ) = M ∗ M ( p − 1 ) ( q − 1 ) ( m o d   N ) = M ∗ M ϕ ( N ) ( m o d   N ) = M \begin{aligned} x^{d}(mod\ N) &=M^{cd}(mod\ N)\\ &=M^{1+n(p-1)(q-1)}(mod\ N)\\ &=M*M^{(p-1)(q-1)}(mod\ N)\\ &=M*M^{\phi(N)}(mod\ N)\\ &=M \end{aligned} xd(mod N)=Mcd(mod N)=M1+n(p1)(q1)(mod N)=MM(p1)(q1)(mod N)=MMϕ(N)(mod N)=M
至于为啥原则上不能通过公钥解密x,这个就需要说明下质数的密度问题了,这个就太专业还没涉猎,以后弄懂可能回来写下吧。总之结论就是,以目前的经典算法,这个问题是个np的,不能通过经典计算机来破解这个密码。至于量子计算机里面的舒尔算法,有时间更新下,这个更加有意思了,可以进一步了解下量子计算相关的内容,惊叹一下量子世界与经典世界的差异。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值