RSA加密算法

定义

  对任意明文m,取一个整数 N N N,使得 N = p q N=pq N=pq,其中 p 、 q p、q pq为两大素数,常超过200位;取正整数 e e e,满足 ( e , φ ( N ) ) = 1 (e,\varphi(N))=1 (e,φ(N))=1 d d d满足 e d ≡ 1   ( m o d   φ ( N ) ) ed\equiv 1\ (mod\ \varphi(N)) ed1 (mod φ(N))。则对于任意 1 ≤ m < N 1\leq m <N 1m<N,若加密算法为 c ≡ m e   ( m o d   N ) c\equiv m^e \ (mod\ N) cme (mod N),那么由密文c可通过 c d   ( m o d   N ) c^d\ (mod\ N) cd (mod N)计算得明文m。
  其中公钥 P K : e 、 N PK:e、N PK:eN私钥 S K : d 、 p 、 q SK:d、p、q SK:dpq

  由于大整数分解存在难题,十分耗时,因此只提供 N N N而不提供其分解方式则要通过密文求明文将会很麻烦,几乎不可能实现,因此该加密方法是经典的加密算法。为何在不知 p 、 q p、q pq的情况下很难反解出明文,下面将具体描述加密和解密的过程。

加密

  显然,用户可使用公钥 P K : e 、 N PK:e、N PK:eN对明文m进行加密使其变为密文c,加密公式
c ≡ m e   ( m o d   N ) c\equiv m^e \ (mod\ N) cme (mod N)

解密

  因为有:
e d ≡ 1   ( m o d   φ ( N ) ) ed\equiv 1\ (mod\ \varphi(N)) \\ ed1 (mod φ(N))  且由欧拉定理,对 ( a , p ) = 1 (a,p)=1 (a,p)=1有:
a φ ( p ) ≡ 1   ( m o d   p ) a^{\varphi(p)}\equiv 1\ (mod\ p) aφ(p)1 (mod p)  所以将 p 、 q p、q pq分开考虑,对 c ≡ m e   ( m o d   p ) c\equiv m^e \ (mod\ p) cme (mod p)有:
c d ≡ ( m e ) d ≡ m e d ≡ m e d   ( m o d   φ ( p ) ) ≡ m   ( m o d   p ) c^d \equiv (m^e)^d \equiv m^{ed}\equiv m^{ed\ (mod\ \varphi(p))}\equiv m\ (mod\ p) cd(me)dmedmed (mod φ(p))m (mod p)  同理对 q q q也有:
c d ≡ m   ( m o d   q ) c^d\equiv m\ (mod\ q) cdm (mod q)  又因为 ( p , q ) = 1 , N = p q (p,q)=1,N=pq (p,q)=1,N=pq,因此有解密公式
m ≡ c d   ( m o d   N ) m\equiv c^d\ (mod\ N) mcd (mod N)
  因为求解 d d d的过程需要用到 φ ( N ) \varphi(N) φ(N),又因 N = p q 且 ( p , q ) = 1 N=pq且(p,q)=1 N=pq(p,q)=1,故有 φ ( N ) = φ ( p ) φ ( q ) \varphi(N)=\varphi(p)\varphi(q) φ(N)=φ(p)φ(q)。当不知密钥 p 、 q p、q pq时,先要对 N N N进行分解才能求得 φ ( N ) \varphi(N) φ(N),由于该过程耗时,所以安全有保障。而当知道 p 、 q 、 d p、q、d pqd时,则很容易求解,因此解密会很轻松。
  由于 d 、 N d、N dN可能很大,因此,也可先求得:
d p = d   ( m o d   p ) d q = d   ( m o d   q ) d_p=d\ (mod\ p)\\ d_q=d\ (mod\ q) dp=d (mod p)dq=d (mod q)  再令:
m 1 ≡ c d p   ( m o d   p ) m 2 ≡ c d q   ( m o d   q ) m_1\equiv c^{d_p}\ (mod\ p) \\ m_2\equiv c^{d_q}\ (mod\ q) m1cdp (mod p)m2cdq (mod q)  又因
m ≡ c d   ( m o d   N ) m\equiv c^d\ (mod\ N) mcd (mod N)  所以有:
m ≡ c d ≡ c d   ( m o d   φ ( p ) ) ≡ c d p ≡ m 1   ( m o d p ) m ≡ c d ≡ c d   ( m o d   φ ( q ) ) ≡ c d q ≡ m 2   ( m o d q ) m\equiv c^d\equiv c^{d\ (mod\ \varphi(p))}\equiv c^{d_p}\equiv m_1\ (mod p) \\ m\equiv c^d\equiv c^{d\ (mod\ \varphi(q))}\equiv c^{d_q}\equiv m_2\ (mod q) mcdcd (mod φ(p))cdpm1 (modp)mcdcd (mod φ(q))cdqm2 (modq)  由中国剩余定理可计算得:
m ≡ k 1 m 1 + k 2 m 2   ( m o d   N ) m\equiv k_1 m_1 + k_2 m_2\ (mod\ N) mk1m1+k2m2 (mod N)

举例

  我们取较小数模拟RSA算法过程,但实际中是很大的数。
  令 N = p q = 7 ∗ 13 = 91 N=pq=7*13=91 N=pq=713=91,则 φ ( N ) = φ ( p ) φ ( q ) = 6 ∗ 12 = 72 \varphi(N)=\varphi(p)\varphi(q)=6*12=72 φ(N)=φ(p)φ(q)=612=72,令 e = 11 e=11 e=11,显然 ( e , φ ( N ) ) = ( 11 , 72 ) = 1 (e,\varphi(N))=(11, 72)=1 (e,φ(N))=(11,72)=1成立。

加密:
  取明文 m = 5 m=5 m=5,则通过加密公式加密后有密文:
c ≡ m e ≡ 5 11 ≡ 73   ( m o d   91 ) c\equiv m^e\equiv 5^{11}\equiv 73\ (mod\ 91) cme51173 (mod 91)解密:
  因为:
e d ≡ 11 d ≡ 1   ( m o d   φ ( N ) ) ≡ 1   ( m o d   72 ) ed\equiv 11d\equiv 1\ (mod\ \varphi(N))\equiv 1\ (mod\ 72) ed11d1 (mod φ(N))1 (mod 72)  所以:
d ≡ 59   ( m o d   72 ) d\equiv 59\ (mod\ 72) d59 (mod 72)  所以明文:
m ≡ c d ≡ 7 3 59 ≡ 5   ( m o d   N ) m\equiv c^d\equiv 73^{59}\equiv 5\ (mod\ N) mcd73595 (mod N)  解密成功!

参考资料

[1]. RSA加密原理解析
[2]. CTF中RSA攻击方法总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

D-A-X

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

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

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

打赏作者

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

抵扣说明:

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

余额充值