RSA 公钥密码系统背后的数学原理

介绍

RSA 是一种非对称的公开密钥算法,它需要一对公钥和私钥,消息发送者使用公钥对消息进行加密,消息接收者使用私钥对消息进行解密。这个算法的特殊之处在他的加密、解密算法和公钥都是公开的,只有私钥是保密的,而试图破解的人即使拿到公钥和加密的消息,在知道加密、解密算法的情况下,依然无法对消息进行解密。下面我们看看它的加密、解密算法长什么样。

RSA 算法

  p \ p  p   q \ q  q 是两个非常大的素数,   n = p × q \ n=p \times q  n=p×q   a \ a  a   b \ b  b 是正整数,满足   a × b ≡ 1 ( m o d   φ ( n ) ) \ a \times b \equiv 1 (mod\ \varphi(n))  a×b1(mod φ(n))   φ ( n ) \ \varphi(n)  φ(n) 表示小于   n \ n  n 且与   n \ n  n 互素的正整数个数。这里,   b \ b  b   n \ n  n 就是公钥,对外公开,   a \ a  a 就是私钥,对外保密。假设消息明文为   x \ x  x,密文为   y \ y  y   x \ x  x   y \ y  y 是小于   n \ n  n 的正整数,则:
加密函数为:   e ( x ) = x b   m o d   n \ e(x)=x^b\ mod\ n  e(x)=xb mod n
解密函数为:   d ( y ) = y a   m o d   n \ d(y)=y^a\ mod\ n  d(y)=ya mod n
这个算法要能按照预期工作,必须保证两点:

  1. 解密后的消息和原来的消息一样,也就是   x = d ( e ( x ) ) \ x=d(e(x))  x=d(e(x))
  2. 根据公开的   b \ b  b   n \ n  n 无法破解保密的   a \ a  a

在介绍证明方法前,我们先来看一个简化的例子:
假设   p = 3 , q = 5 , n = 15 \ p=3,q=5,n=15  p=3q=5n=15,小于 15 且与 15 互素的正整数有:1、2、4、7、8、11、13、14,也就是一共有 8 个,所以   φ ( 15 ) = 8 \ \varphi(15)=8  φ(15)=8,找到   a = 11 , b = 3 \ a=11,b=3  a=11b=3 满足   a × b = 33 ≡ 1 ( m o d   8 ) \ a\times b=33 \equiv 1 (mod\ 8)  a×b=331(mod 8),所以在这里例子里,公钥就是 15 和 3,私钥就是 11。当某个明文消息   x = 12 \ x=12  x=12,加密的过程是   y = 1 2 3   m o d   15 = 1728   m o d   15 = 3 \ y=12^3\ mod\ 15=1728\ mod\ 15=3  y=123 mod 15=1728 mod 15=3。接收者得到密文 3 后解密的过程是:   3 11   m o d   15 = 177147   m o d   15 = 12 \ 3^{11}\ mod\ 15=177147\ mod\ 15=12  311 mod 15=177147 mod 15=12,可以看到解密后的 12 和原先的明文是一模一样的。

这里用的是简化的例子,实际上   p \ p  p   q \ q  q 是两个非常大的素数,比如说现在的 RSA 算法要求   n \ n  n 是 1024 位甚至 2048 位,也就是   2 1024 \ 2^{1024}  21024   2 2048 \ 2^{2048}  22048,对于那么大的数字,寻找素数   p \ p  p   q \ q  q 以及计算   n \ n  n 并不困难,但是对给定的   n \ n  n 做素因数分解成   p \ p  p   q \ q  q 是极其困难的,同样的,因为   φ ( n ) \ \varphi(n)  φ(n) 的计算也依赖于   p \ p  p   q \ q  q,所以计算出   φ ( n ) \ \varphi(n)  φ(n) 也非常困难,而   a × b ≡ 1 ( m o d   φ ( n ) ) \ a \times b \equiv 1 (mod\ \varphi(n))  a×b1(mod φ(n)),所以要根据   n \ n  n   b \ b  b 计算出   a \ a  a 也就几乎是不可能的。

证明方法介绍

最后我们看下   x = d ( e ( x ) ) \ x=d(e(x))  x=d(e(x)) 的证明,这里介绍的是《应用近世代数》(见参考资料)一书中的证明方法,这个方法只需要用到 Euler 定理,比较容易看懂,过程如下:
∵ e ( x ) = x b   m o d   n ∴ e ( x ) = ( x b − c n )   m o d   n ∴ d ( e ( x ) ) = ( x b − c n ) a   m o d   n ∴ d ( e ( x ) ) = x a b   m o d   n ∵   a b ≡ 1 ( m o d   φ ( n ) ) ∴ a b = t φ ( n ) + 1 ∴ d ( e ( x ) ) = x t φ ( n ) + 1   m o d   n \because e(x)=x^b\ mod\ n\\ \therefore e(x)=(x^b-cn)\ mod\ n\\ \therefore d(e(x))=(x^b-cn)^a\ mod\ n\\ \therefore d(e(x))=x^{ab}\ mod\ n\\ \because \ ab \equiv 1 (mod\ \varphi(n))\\ \therefore ab=t\varphi(n)+1\\ \therefore d(e(x))=x^{t\varphi(n)+1}\ mod\ n e(x)=xb mod ne(x)=(xbcn) mod nd(e(x))=(xbcn)a mod nd(e(x))=xab mod n ab1(mod φ(n))ab=tφ(n)+1d(e(x))=xtφ(n)+1 mod n
也就是说只需要证明   x t φ ( n ) + 1   m o d   n = x \ x^{t\varphi(n)+1}\ mod\ n=x  xtφ(n)+1 mod n=x 就可以了,分两种情况讨论:
  x \ x  x   n \ n  n 互素:
根据 Euler 定理:   x φ ( n ) ≡ 1   m o d   n \ x^{\varphi(n)} \equiv 1\ mod\ n  xφ(n)1 mod n,所以   x t φ ( n ) + 1   m o d   n = x \ x^{t\varphi(n)+1}\ mod\ n=x  xtφ(n)+1 mod n=x
  x \ x  x   n \ n  n 不是互素:
  x = s p \ x=sp  x=sp
根据 Euler 函数,
φ ( n ) = ( p − 1 ) ( q − 1 ) φ ( q ) = q − 1 \varphi(n)=(p-1)(q-1)\\ \varphi(q)=q-1 φ(n)=(p1)(q1)φ(q)=q1
再根据 Euler 定理,
x ( q − 1 ) = ( s p ) q − 1 ≡ 1   m o d   q x t φ ( n ) = x t ( p − 1 ) ( q − 1 ) ≡ 1   m o d   q ∴ x t φ ( n ) = r q + 1 ∴ x t φ ( n ) + 1 = x t φ ( n ) ⋅ x = r q x + x = r q s p + x = r s n + x ≡ x   m o d   n ∴ x t φ ( n ) + 1   m o d   n = x x^{(q-1)}=(sp)^{q-1} \equiv 1\ mod\ q\\ x^{t\varphi(n)}=x^{t(p-1)(q-1)} \equiv 1\ mod\ q\\ \therefore x^{t\varphi(n)}=rq+1\\ \therefore x^{t\varphi(n)+1}=x^{t\varphi(n)}\cdot x=rqx+x=rqsp+x=rsn+x \equiv x\ mod\ n\\ \therefore x^{t\varphi(n)+1}\ mod\ n=x x(q1)=(sp)q11 mod qxtφ(n)=xt(p1)(q1)1 mod qxtφ(n)=rq+1xtφ(n)+1=xtφ(n)x=rqx+x=rqsp+x=rsn+xx mod nxtφ(n)+1 mod n=x
证毕。可以看到在有了 Euler 定理后,配上一些技巧性的操作,就可以比较容易地证明   x = d ( e ( x ) ) \ x=d(e(x))  x=d(e(x)),也就是保证了解密后的消息和原来的消息一样。下面我们看下 Euler 定理长什么样。

Eurler 函数和 Eurler 定理

Eurler 函数

  n \ n  n 是一个正整数,   φ ( n ) \ \varphi(n)  φ(n) 表示小于   n \ n  n 且与   n \ n  n 互素的正整数个数。当   n \ n  n 是一个素数时,显然有   φ ( n ) = n − 1 \ \varphi(n)=n-1  φ(n)=n1,若   n \ n  n 的素因数分解是   n = p × q \ n=p \times q  n=p×q,则   φ ( n ) = ( p − 1 ) ( q − 1 ) \ \varphi(n)=(p-1)(q-1)  φ(n)=(p1)(q1),证明方法见参考资料。

Eurler 定理

若正整数   a \ a  a   n \ n  n 互素,则   a φ ( n ) ≡ 1   m o d   n \ a^{\varphi(n)} \equiv 1\ mod\ n  aφ(n)1 mod n,证明方法需要用到子群的阶数和指数关系,非常的巧妙,祥见参考资料。

参考资料

《应用近世代数》(第 3 版)胡冠章 王殿军 编著 清华大学出版社 ISBN 978-7-302-12566-2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

朱峥嵘(朱髯)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值