公钥密码体制-RSA (二)

前言

有了上面的数论基础之后,我们就可以来看 RSA 算法的神奇之处了。

算法描述

我们先把整个加解密过程简单流程描述一下。加解密过程如下:
加密: C = M e   m o d   n C = M^e\,mod\,n C=Memodn
解密: M = C d   m o d   n = ( M e ) d   m o d   n = M e d   m o d   n M = C^d\,mod\,n = (M^e)^d\,mod\,n=M^{ed}\,mod\,n M=Cdmodn=(Me)dmodn=Medmodn

其中,M 表示待加密的明文,C 表示加密后的密文,e,n,d 均为整数,如果能找到合适的这三个数能让上面的过程满足,就可以把PU = {e,n}当作公钥,PR = {d,n}当作私钥,进行公钥密码体制的加解密了。

计算方法

问题转化

问题:寻找 e,d,n 使所有 M < n M < n M<n, 能使 M e d   m o d   n = M M^{ed}\,mod\,n=M Medmodn=M, 成立。
解:

  • 先选定两个素数, p , q p, q p,q
  • 计算 n = p q n = pq n=pq
  • 选定 e,使 e , ϕ ( n ) e, \phi(n) e,ϕ(n) 互素,这个一般会选 3, 7, 65537 等素数,也可以随机选择
  • 可以计算得到 d, 使 e d ≡   1   m o d   ϕ ( n ) ed\equiv\,1\,mod\,\phi(n) ed1modϕ(n), 这个可以通过扩展欧几里德算法得到

这样 就得到了 e , d e,d e,d,那么选择出来的 e , d , p , q , n e,d,p,q,n e,d,p,q,n 能使上式成立么?

证明

ϕ ( n ) = k \phi(n) = k ϕ(n)=k,
因为 e d ≡ 1   m o d   ϕ ( n ) ed \equiv 1\,mod\,\phi(n) ed1modϕ(n), 即 e d   m o d   ϕ ( n ) = 1 ed\,mod\,\phi(n)=1 edmodϕ(n)=1
所以 e d = t k + 1 ed = tk + 1 ed=tk+1
则:
M e d   m o d   n = M t k + 1   m o d   n = ( M ∗ M t k ) m o d   n M^{ed}\,mod\,n = M^{tk+1}\,mod\,n=(M*M^{tk})mod\,n Medmodn=Mtk+1modn=(MMtk)modn
M e d   m o d   n = [ ( M   m o d   n ) ∗ ( M t k   m o d   n ) ] m o d   n M^{ed}\,mod\,n = [(M\,mod\,n)*(M^{tk}\,mod\,n)]mod\,n Medmodn=[(Mmodn)(Mtkmodn)]modn
M e d   m o d   n = [ ( M   m o d   n ) ∗ ( ( M k m o d   n ) t m o d   n ) ] m o d   n M^{ed}\,mod\,n = [(M\,mod\,n)*((M^kmod\,n)^tmod\,n)]mod\,n Medmodn=[(Mmodn)((Mkmodn)tmodn)]modn
因为 M k   m o d   n = M ϕ ( n ) m o d   n M^k\,mod\,n = M^{\phi(n)}mod\,n Mkmodn=Mϕ(n)modn, 根据欧拉定理,当 M 和n 互素时, M ϕ ( n ) m o d   n = 1 M^{\phi(n)}mod\,n=1 Mϕ(n)modn=1
所以 M k m o d   n = 1 M^kmod\,n=1 Mkmodn=1
M e d   m o d   n = [ ( M   m o d   n ) ∗ ( 1 t m o d   n ) ] m o d   n M^{ed}\,mod\,n = [(M\,mod\,n)*(1^tmod\,n)]mod\,n Medmodn=[(Mmodn)(1tmodn)]modn
M e d   m o d   n = M   m o d   n M^{ed}\,mod\,n=M\,mod\,n Medmodn=Mmodn
因为 M < n M < n M<n, 所以 M   m o d   n = M M\,mod\,n = M Mmodn=M
M e d   m o d   n = M M^{ed}\,mod\,n=M Medmodn=M
证明完毕,说明此时 e,d,n 满足 RSA 算法要求,就可以使用公钥PU={e,n}和私钥PR={d,n}了。

场景描述

假设通信双方是 Alice 和 Bob, Bob 想给 Alice 发消息如 88,场景是怎样的呢。

  • Alice 选取两个素数 p,q,比如 17,11
  • Alice 计算 n = p q = 17 ∗ 11 = 187 n = pq = 17*11= 187 n=pq=1711=187
  • Alice 计算 ϕ ( n ) = ( p − 1 ) ∗ ( q − 1 ) = 16 ∗ 10 = 160 \phi(n) = (p-1)*(q-1)=16*10=160 ϕ(n)=(p1)(q1)=1610=160
  • Alice 选择一个小于 ϕ ( n ) \phi(n) ϕ(n)且与它互素的数,如 e = 7 e=7 e=7
  • 通过计算得到 d, 使 d e ≡   1 ( m o d   160 ) de\equiv\,1(mod\, 160) de1(mod160), 因为 23 ∗ 7 = 161 = 1 ∗ 160 + 1 23*7=161=1*160+1 237=161=1160+1, 所以 d = 23 d=23 d=23
  • Alice 把 {7,187} 发给 Bob, 自己保存 {23,187}
  • Bob 计算 C = M e   m o d   n C = M^e\,mod\,n C=Memodn, 即 8 8 7   m o d   187 = 11 88^7\,mod\,187=11 887mod187=11, 把 11 发给 Alice
  • Alice 计算 M = C d   m o d   n M = C^d\,mod\,n M=Cdmodn, 即 1 1 23   m o d   187 = 88 11^{23}\,mod\,187=88 1123mod187=88,得到原文。

安全性

攻击者拿到 e,n 要想算出 d, 即用公式 e d ≡   1   m o d   ϕ ( n ) ed\equiv\,1\,mod\,\phi(n) ed1modϕ(n), 此时如果知道 ϕ ( n ) \phi(n) ϕ(n)即能用扩展欧几里德算法得到 d,并且如果知道 p,q 那么是可以通过 ϕ ( n ) = ϕ ( p q ) = ϕ ( p ) ∗ ϕ ( q ) = ( p − 1 ) ∗ ( q − 1 ) \phi(n)=\phi(pq)=\phi(p)*\phi(q)=(p-1)*(q-1) ϕ(n)=ϕ(pq)=ϕ(p)ϕ(q)=(p1)(q1)计算得来的,但是从 n 分解出两个质因数除了暴力破解没有更加有效的算法,如果 n 选择较大的话,破解时间将以年计,所以我们认为该算法是安全的。目前要求较高的密钥选择在 1 0 75 10^{75} 1075以上,对应的密钥长度可以达到 1024 位。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值