公钥密码体制-RSA (二)

本文介绍了RSA公钥加密算法的基本原理及其实现步骤。包括选择素数、计算欧拉函数、确定公钥私钥等内容,并通过实例演示了加密解密的过程。

前言

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

算法描述

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

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

计算方法

问题转化

问题:寻找 e,d,n 使所有 M<nM < nM<n, 能使 Med mod n=MM^{ed}\,mod\,n=MMedmodn=M, 成立。
解:

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

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

证明

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

场景描述

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

  • Alice 选取两个素数 p,q,比如 17,11
  • Alice 计算 n=pq=17∗11=187n = pq = 17*11= 187n=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=7e=7e=7
  • 通过计算得到 d, 使 de≡ 1(mod 160)de\equiv\,1(mod\, 160)de1(mod160), 因为 23∗7=161=1∗160+123*7=161=1*160+1237=161=1160+1, 所以 d=23d=23d=23
  • Alice 把 {7,187} 发给 Bob, 自己保存 {23,187}
  • Bob 计算 C=Me mod nC = M^e\,mod\,nC=Memodn, 即 887 mod 187=1188^7\,mod\,187=11887mod187=11, 把 11 发给 Alice
  • Alice 计算 M=Cd mod nM = C^d\,mod\,nM=Cdmodn, 即 1123 mod 187=8811^{23}\,mod\,187=881123mod187=88,得到原文。

安全性

攻击者拿到 e,n 要想算出 d, 即用公式 ed≡ 1 mod ϕ(n)ed\equiv\,1\,mod\,\phi(n)ed1modϕ(n), 此时如果知道 ϕ(n)\phi(n)ϕ(n)即能用扩展欧几里德算法得到 d,并且如果知道 p,q 那么是可以通过ϕ(n)=ϕ(pq)=ϕ(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 选择较大的话,破解时间将以年计,所以我们认为该算法是安全的。目前要求较高的密钥选择在 107510^{75}1075以上,对应的密钥长度可以达到 1024 位。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值