RSA算法详解

什么是RSA

前面文章咱们讲了AES算法,AES算法是一种是对称加密算法,本文咱们来介绍一个十分经常使用的非对称加密算法RSA。算法

非对称加密算法也叫公钥密码算法,经过生成的公私钥来对明文密文进行加密解密。 RSA的名字是由它的三个开发者Ron Rivest, Adi Shamir和 Leonard Adleman的首字母而来的。 安全

RSA公司在1983年为RSA算法申请了专利。加密

RSA的加密

RSA的加密能够用下面的公式来表示:spa

image.png

经过公式咱们能够知道RSA的密文是经过明文的E次方再对N进行mod运算获得的。这个加密过程只用到了阶乘和取模运算,能够算是很是简单明了了。3d

简洁的才是最好的,这可能也是RSA算法这么通用的缘由吧。blog

若是知道了E和N,那么就能够获得密文,因此咱们把E和N的组合称为公钥,能够这样表示 公钥{E,N}。 教程

如何选择E和N是一个复杂的数学过程,咱们会在后面讲到。开发

RSA的解密

先看一下RSA解密的公式:get

image.png

经过公式能够看到,明文是经过密文的D次方,再和N取模获得的。这里的N和加密的N是同一个数字。博客

D和N的组合表示为私钥{D,N}。

N,E,D的生成

知道了RSA的加密和解密原理以后,接下来咱们就要探讨一下加密和解密过程当中的N,E,D是怎么生成的。

生成过程以下:

1. 生成N

生成N的公式以下:

image.png

p和q是两个很大的质数,过小的话容易被破译,太大的话会影响计算速度。一般p和q的大小为1024比特。这两个数是经过伪随机数生成器生成的。伪随机数生成器不能直接生成质数,它是经过不断的重试获得的。

2. 求L

L是一个中间数,它和p,q同样,不会出如今RSA的加密和解密过程。

L的计算公式以下:

image.png

L是p-1和q-1的最小公倍数

3. 求E

E就是用来加密的公钥了,E是一个比1大,比L小的数。而且E和L必须互质。只有E和L互质才能计算出D值。

image.png

这里E也是经过伪随机数生成器来生成的。

找到了E和N,咱们的公钥就生成了。

4. 求D

计算D的公式以下:

image.png

破解RSA

若是想破解RSA, 对于密码破解者来讲,他知道了公钥{E,N}, 知道了密文,根据公式:

image.png

有没有可能直接经过已知的三个变量,求出未知变量明文呢?

这个求解实际上是一个离散对数的问题。目前尚未发现求离散对数的高效的方法。能够说是很是困难的。

那么有没有可能通够暴力破解来得出密钥中的D呢?

目前RSA算法中p和q的长度通常为1024比特以上,生成的N的长度为2048比特以上,E和D的长度和N差很少,若是要暴力破解2048比特的D是很是困难的。

由公式:

image.png

可知,若是破解者知道了L的值,那么就能够轻易的求出D。而L是经过p和q计算出来的,因此p和q必定要保密,不然跟密码泄露是同样的。

由于 N= p * q , 而p和q都是质数, N又是已知的,那么咱们可不能够经过质因数分解来获得 p和q呢?

目前来讲,尚未有效的对大整数进行质因素分解的高效算法,因此目前来讲RSA算法仍是很安全的,可是一旦有这样的算法出现,那么RSA将会很容易被攻破。

因此官方推荐:1024比特的RSA算法不该该被用于新的用途。2048比特的RSA算法能够用到2030年,4096比特的算法能够用到2031年。

更多教程请参考 flydean的博客

相关文章
相关标签/搜索