当前位置:新励学网 > 秒知问答 > 理解RSA算法

理解RSA算法

发表时间:2024-07-20 00:51:04 来源:网友投稿

如果公钥加密的信息只有私钥解得开,只要私钥不泄露,通信就是安全的.

欧拉函数,在数论中,对正整数n,欧拉函数φ(n)是小于或等于n的正整数中与n互质的数的数目.例如:φ(8)=4,因为1,3,5,7均与8互质.

通式:

如果n=1,则φ(1)=1。因为1与任何数(包括自身)都构成互质关系。

如果n是质数,则φ(n)=n-1。因为质数与小于它的每一个数,都构成互质关系。比如5与1、2、3、4都构成互质关系。

如果n是质数的某一个次方,即n=p^k(p为质数,k为大于等于1的整数),则

如果n可以分解成两个互质的整数之积n=p1×p2则φ(n)=φ(p1p2)=φ(p1)φ(p2)

如果两个正整数a和n互质,则n的欧拉函数φ(n)可以让下面的等式成立:

如果两个正整数a和n互质,那么一定可以找到整数b,使得ab-1被n整除,或者说ab被n除的余数是1。

这时b就叫做a的模反元素。比如3和11互质,那么3的模反元素就是4,因为(3×4)-1可以被11整除。显然模反元素不止一个,4加减11的整数倍都是3的模反元素{...,-18,-7,4,15,26,...},即如果b是a的模反元素,则b+kn都是a的模反元素。

比如,老张和老王是两名地下工作者,老张要向老王传达一个机密的文件.这时老张想到了RSA算法.(1)随机选择两个不相等的质数p,q.这时,老张选择了61和53.(2)计算p和q的乘积n.

n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中RSA密钥一般是1024位,重要场合则为2048位。(3)计算n的欧拉函数φ(n).根据上面所介绍的欧拉定理第四种情况:

(4)随机选择一个整数e,条件是1<e<φ(n),且e与φ(n)互质.这时,老张从1-3120之间,随机选择了17.(实际应用中,常常选择65537).(5)计算e对于φ(n)的模反元素d所谓模反元素就是指有一个整数d,可以使得ed被φ(n)除的余数为1。

这个公式等价于

于是找到模反元素d,实质上就是对下面这个二元一次方程求解。

那么已知e=17,φ(n)=3120,求x的值

这个方程可以用扩展欧几里得算法求解,此处省略具体过程。总之老张算出一组整数解为(x,y)=(2753,15),即d=2753。(6)将n和e封装成公钥,n和d封装成私钥n=3233,e=17,d=2753,所以公钥就是(3233,17),私钥就是(3233,2753),即公钥为(n,e),私钥为(n,d)。实际应用中公钥和私钥的数据都采用ASN.1格式表达。

老张进行了这些计算后,整理了下上面所提到的数字:

这六个数字之中,公钥用到了两个(n和e),其余四个数字都是不公开的。其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏。老张想,有没有可能在已知n和e的情况下,也就是知道公钥的情况下,推导出d?

结论:如果n可以被因数分解,d就可以算出,也就意味着私钥被破解。可是大整数的因数分解,是一件非常困难的事情.

有了公钥和密钥,就能进行加密和解密了。1.加密要用公钥(n,e)假设老张要向老王发送加密信息m,他就要用老王的公钥(n,e)对m进行加密。这里需要注意,m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n。所谓加密就是算出下式的c:

老王的公钥是(3233,17),老张的m假设是65,那么可以算出下面的等式:

于是c等于2790,老张就把2790发给了老王。

2.解密要用私钥(n,d)老王拿到老张发来的2790以后,就用自己的私钥(3233,2753)进行解密。可以证明下面的等式一定成立:(证明过程略,有兴趣可以看阮一峰的博客)

也就是说c的d次方除以n的余数为m。现在c等于2790,私钥是(3233,2753),那么老王算出

因此老王知道了老张加密前的原文就是65。

我们可以看到,如果不知道d,就没有办法从c求出m。而前面已经说过,要知道d就必须分解n,这是极难做到的,所以RSA算法保证了通信安全。你可能会问公钥(n,e)只能加密小于n的整数m,那么如果要加密大于n的整数,该怎么办?有两种解决方法:一种是把长信息分割成若干段短消息,每段分别加密;另一种是先选择一种对称性加密算法(比如DES),用这种算法的密钥加密信息,再用RSA公钥加密DES密钥。

免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。

如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!