如何使用rsa对tcp进行rsa加密过程

3、RSA安全性的奥秘

4、RSA秘钥的生成算法

5、RSA明文的rsa加密过程算法

6、RSA密文的解密算法

7、窃听者破解秘钥的可能性

8、python编程模拟信息发送者的行为

9、 python编程模拟信息接收者的行为

10、python编程模拟窃听者破解秘钥的行为

对称rsa加密过程又称单秘钥rsa加密过程它的定义是:通信双方通过同一把秘钥对信息进行rsa加密过程和解密

其中m表礻要传递的信息明文,c表示对mrsa加密过程后的密文e表示秘钥,f(e)函数表示对mrsa加密过程的运算法则g(e)函数表示对c解密的运算法则(g(e)是f(e)的逆运算函数)

(1)rsa加密过程解密都用同一把秘钥,算法是公开的计算量较单一,rsa加密过程速度快rsa加密过程效率高

(2)适合需要rsa加密过程大量數据的场景

(1)虽然f(e)和g(e)函数可以设计的非常复杂,但是通信之前双方需要同步保存秘钥e而同步过程发生在共有环境

(2)如果窃听者在同步e的过程中,在共有环境劫持到e就可以通过大量数据穷举出f(e)的法则从而破解密文c得到明文m

(3)通信双方都保存着e,如果任意一方的e泄露那么二者的通信将不再安全

在1976年之前几乎所有的rsa加密过程方法都是对称rsa加密过程

非对称rsa加密过程又称双秘钥rsa加密过程,它的定义是:通信双方通过两个秘钥来对信息进行rsa加密过程和解密这两个秘钥分别是公开秘钥(公钥)和私有秘钥(私钥),且二者的算法存在某种数學关系但是这种数学关系无法被传统计算机破解

(1)秘钥分为公钥和私钥,公钥公开传递而私钥只保存在接收方,安全性更高

(2)通信之前二者无需同比私钥只需要同步公钥即可

(3)如果窃听者在共有环境劫持到密文c和公钥,但是以传统计算机的能力无法通过已知公鑰来破解出私钥(数学上可以证明)

(1)rsa加密过程解密时间花费较长速度慢

(2)适合对少量重要数据通信的场景

1977年,麻省理工(MIT)大学的三位数学家根据非对称rsa加密过程的思想设计出以他们三个人名字命名的RSA算法,该算法也是至今使用最广泛的非对称rsa加密过程算法如军事、银行等

三、RSA安全性的奥秘

RSA算法基于一个非常简单的数论事实:

如果将两个大素数相乘,则乘积计算十分容易;但是如果对这个乘积进行質因式分解却非常困难!

由于全世界的数学家至今无法用一个多项式来精准的表示素数,也无法证明素数的分布规律所以RSA算法的安全性就是利用了这个数学事实来设计的

四、RSA秘钥的生成算法

RSA秘钥的生成包括了公钥和私钥的生成,涉及到的数学知识有欧拉函数、互质、模反元素、欧几里得扩展算法、大整数的幂运算取模算法等这些数学算法我在《》文中已经说明

下面我们列出RSA秘钥的生成算法步骤

(1)随機选择两个不相等的素数p和q

(2)计算两个素数的乘积

(4)随机选择一个正整数e,e满足

其中我们用欧拉定理表示e和φ(n)互质

(5)计算e对于φ(n)的模反元素d

其中公钥可以在公共网络环境里传递而私钥由消息接收者私人保存

五、RSA明文的rsa加密过程算法

其中,m必须是整数且m<n

经过公钥(n, e)rsa加密过程的密文c,就是Sender要传送给Receiver的消息且c将暴露在网络公共环境中,可以被第三方窃听

六、RSA密文的解密算法

Receiver接受到从Sender发送到的密文c后需偠对密文c进行解密还原为明文m,而Receiver仅自己拥有生成的私钥(n, d)则Receiver使用自己的秘钥对c进行解密

至此,Receiver就将密文c还原为明文m

七、窃听者破解秘钥嘚可能性

下面分析窃听者破解秘钥的可能性我们知道窃听者可以在共用网络环境里窃听到的数据有

(2)公开传递的公钥(n, e)

则问题可以描述為:已知n, e, c,求m?

我们通过逆向过程来推导

(1)由于m需要私钥(n, d)来解密d未知,问题即转化为求d

(2)而d又是e和φ(n)的模反元素,φ(n)未知问题即轉化为求φ(n)?

(4)而n = p*qn是已知的,则问题即转化为求n的质因数分解

综上所述,只要窃听者能够将n质因数分解为p和q那么它就可以求出φ(n),从而求出d最后用(n, d)来破解出密文c得到明文m

但是,人类目前对于大数的质因式分解非常的困难其本质就是人类无法用一个精确的多项式來描述素数,导致计算机只能通过穷举筛选法来尝试质因数分解而当分解的数字n非常大的时候(1024位或者2048位长度),计算机穷举分解的时間可能需要几百年或千年因此,基于这个数论知识和对素数理论的匮乏窃听者破解密文c的可能性,从有限的时间上无限接近于0

八、python编程模拟信息发送者的行为

(2)用公钥对信息明文mrsa加密过程为密文c将c公开发送给Receiver

九、python编程模拟信息接收者的行为

(1)生成秘钥:公钥+私钥

(2)公开公钥,保存私钥

(3)用自己的私钥对Sender发送的密文c解密

十、python编程模拟窃听者破解秘钥的行为

第三方窃听者有如下行为:

(1)从公共網络上获取公钥和密文

(2)尝试对n进行质因数分解

(3)如果质因数分解成功则成功解密密文

(2)Sender要传送的明文m=123456,用公钥rsa加密过程后传递密文c

(1)Receiver用自己的私钥正确的从密文c解密出了明文m并且时间效率非常高

(2)Hacker虽然成功的破解了密文c,但在这个实验里我们选取的两个素數p=8887q=13163非常小,质因数分解n=p*q=都花费了大约43秒那么在真实环境里p和q的长度都是1024位,在有限的时间内大数的质因数分解根本不可能

RSA算法的安铨性,建立在如下两个方面

1)从数学的角度:人类没有证明出精准的素数表达式和分布规律

(2)从计算机的角度:传统计算机无法突破其并行计算能力的瓶颈

基于这两个角度要想破解RSA算法,可以依赖于

(1)证明:哥德巴赫猜想(1+1=2)

但是未来无论人类基于什么理论完全破解RSA算法银行、军事的rsa加密过程解密体系算法一定都会提前进行更换

}

上期()为大家介绍了:互质歐拉函数欧拉定理模反元素 这四个数论的知识点而这四个知识点是理解RSArsa加密过程算法的基石,忘了的同学可以快速的回顾一遍

三、RSA加解密过程及公式论证

三、RSA加解密过程及公式论证

今天的内容主要分为三个部分:

  • rsa密钥生成过程: 讲解如何生成公钥和私钥
  • rsa加解密演示: 演示rsa加密过程解密的过程
  • rsa公式论证:解密公式的证明

1、rsa密钥生成过程

大家都知道rsarsa加密过程算法是一种非对称rsa加密过程算法,也就意味着rsa加密过程和解密是使用不同的密钥而这不同的密钥是如何生成的呢?下面我们来模拟下小红是如何生成公钥和私钥的

(1)随机选择两個不相等的质数p和q

小红随机选择选择了6153。(实际应用中这两个质数越大,就越难破解)

(2)计算p和q的乘积n

n的长度就是密钥长度3233写成②进制是,一共有12位所以这个密钥就是12位。实际应用中RSA密钥一般是1024位,重要场合则为2048

(3)计算n的欧拉函数φ(n)

这里利用我们上篇讲箌的欧拉函数求解的第四种情况:

又因为61和53都是质数,所以可以根据欧拉函数求解的第二种情况:

小红就在1到3120之间随机选择了17。(实际應用中常常选择65537)

(5)计算e对于φ(n)的模反元素d

让我们来回顾一下什么是模反元素:
所谓“模反元素”就是指有一个整数d,可以使得ed除以φ(n)的余数为1公式表示:

所以我们要求的模反元素d就是对上面的二元一次方程求解

根据扩展欧几里得算法(辗转相除法)求解:

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

所以我们取d=d+kφ(n)=-367+1x,到这里所有的计算已经全部完毕!

(6)将n和e封装成公钥n和d封装成私钥

让我们来回顾一下我们一共出现的6个數字:

在这个例子中n=3233,e=17d=2753,所以公钥就是 (n,e)=(3233,17)私钥就是**(n,d)=()**,这样小红就将公钥公布出去自己保存好私钥就可以啦!

至此我们公钥、私钥就生荿完毕,是不是觉得并不是很难呢是不是有点怀疑私钥会不会被人破解呢?下面我们来看看如何才能暴力破解私钥

(7)rsa算法可靠性

回顧我们一共生成了六个数字:p q n φ(n) e d,这六个数字之中公钥用到了两个(n和e),其余四个数字都是不公开的其中最关键的是d,因为n和d组成叻私钥一旦d泄漏,就等于私钥泄漏

那么,有无可能在已知n和e的情况下推导出d?

  1. n=pq只有将n因数分解,才能算出p和q

结论:如果n可以被因數分解d就可以算出,也就意味着私钥被破解

看到这里有同学可能会惊呼:原来破解RSA算法的方法这个简单??

可是大整数的因数分解,是一件非常困难的事情也许你可以对3233进行因数分解(61×53),但是你没办法对下面的大整数分解:

它等于两个质素的乘积:

这也是目湔维基百科记录的人类分解的最大整数(232个十进制位768个二进制位),除了暴力破解还没有发现别的有效方法。所以限制人类分解大整數的是计算机的计算能力相信如果有一天真正的量子计算机问世后,又会引发一轮安全rsa加密过程竞赛!

小红有了公钥和私钥这样就可以進行加解密了于是小红拉着小明一起来测试一下!

(1)rsa加密过程要用公钥 (n,e)

假设小明先测试性的给小红发一个字母m=“A”,我们都知道在通信传输中只能传输0和1所以我们先将“A”转ascii码为65,所以m=65m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n

所谓”rsa加密过程”,就是使鼡下面的rsa加密过程公式算出下式的密文c:

小明通过计算器一算c=2790所以他就把2790发给小红了。

(2)解密要用私钥(n,d)

小红拿到小明发过来的密文c=2790僦用下面的公式进行解密出明文m:

而小红的私钥为:(n,d) = (),所以得到下面的等式:

0

小红通过计算器一算得m=65,然后小红对照着ascii码表得出65对应得芓母为A

至此,整个加解密过程就演示完了我们来总结一下:

  1. 小明选取发送的消息m=A=65,注意m要小于n如果消息大于n,则可以分段rsa加密过程!
  2. 小红获取到小明的密文c=2790

我们可以看到其实RSArsa加密过程算法最核心的就是用公式来加解密,那么我们会有个疑问为什么解密公式一定可鉯得到明文m呢?也就是说这个公式是怎么推导出来的公式一定成立吗?

感兴趣的同学我们可以来一起证明一下解密公式这也是整个RSArsa加密过程算法的最后最核心的一个知识点了。这里我会一步一步的推理尽可能通俗易懂;

首先让我们再来回顾一下我们一共出现的8个数字

  1. c:小明用公钥rsa加密过程后的密文

验证rsa算法成立,主要就是验证解密公式成立:

将c代入要我们要证明的那个解密公式:

上式等同于下面的公式原因如下

原因:我们都知道下面的二元一次方程分解,只有第一项不包含n而所有包含n的项在对n 取余 的操作中都可以消掉。因此得出叻上面那个结论

又因为生成密钥的第五步中我们取e并求了他对φ(n)的模反元素d:

所以我们只要证明这个公式成立,就证明解密公式的成立也就证明了RSA算法的成立。

下面我们分两种情况来验证上面的例子

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

证明:因为m与n互质,得

当m与n互质时证明原式成功!!!

(2) m与n不是互质关系

此时m与n不互质,所以m与n必定有除1以外的公因子洏又因为n等于质数p质数q的乘积,所以m必然等于kpkq

m = kp为例,考虑到这时m与质数q必然互质则根据欧拉定理和欧拉函数(第二种:当q为质數,则φ(q)=q-1)使下面的式子成立:

同上(m与n互质中)证明原理可得:

上式中等式左边(kp)^ed对p取模为0,右边kp对p取模也为0所以tq一定能整除p,但q是與p互质的所以t必然能整除p,设t=rp得

又因为生成密钥的第五步中我们取e并求了他对φ(n)的模反元素d:

当m与n不互质时,证明原式成功!!!

感興趣的同学可以扫描下方二维码关注我的微信公众号:裸睡的猪

}

&nbsp;RSArsa加密过程验签是对安全性要求比較高的机构间通信常用的方式密钥足够长的情况下,当前的计算能力还不足以解密(不过量子计算机...未来谁知道呢!)然而,我发现還是有人对这种过程一知半解比如你们的加签算法用的什么?回答RSA......比如有些机构会对生成的密钥对再用Base64进行编码这样使用的时候就需偠对应的解码,这个过程都被封装在工具类里面了所以大家看代码的时候尽量多进去看看源码。RSA只是一个rsa加密过程的算法加签需要先對内容进行HASH然后再rsa加密过程,比如SHA1WithRSA就是一个常用的RSA加签算法

&nbsp;A机构生成A的密钥对,把公钥给到B;同样的B把自己的公钥给A。这样A在生成rsa加密过程报文的时候会用B的公钥rsa加密过程明文,然后用A的私钥对明文进行加签OK,此时只有B的私钥才能解密报文而私钥只有B才有,即使報文被截获第三方也无法解密。如果A的公钥是公开的(实际上可能也不公开)那么第三方能解析出报文的HASH结果,也只是Hash结果...无法获得奣文B接受到请求后,用自己的私钥解密报文然后对报文进行验签,如果不一致那么也不会响应请求,这样的模式通信过程的安全性就可以得到保障了。具体过程如下图所示:


}

我要回帖

更多关于 rsa 加密 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信