浅析RSA算法
1. RSA算法原理图解如下:
先对整个公私钥加解密有个认识。
2. RSA算法加密流程
RSA的加密过程可以通过一个公式来表示:
密文 = 明文^E mod N
加密过程中用到了两个数:E, N。他们是什么呢?
从上面的加密公式可以看出,加密报文只需要知道E,N便可以完成,因此只需要知道这两个数字,任何人都可以完成加密操作,因此我们将(E,N)称之为加密密钥。也就是常说的公钥。
3. RSA算法解密流程
RSA解密流程同加密流程一样简洁,可以使用下面的公式表达:
明文 = 密文^D mod N
也就是说我们求出密文的D次方,然后对N求余便可以实现报文的解密。而这里的(D,N)就是解密密钥。即经常提到的私钥。
从上面可以看出,RSA加解密的数学形式完全相同:
- 加密是“求E次方,然后mod N”
- 解密是“求D次方,然后mod N”
可以说是相当的美妙。(这里的E,D,N在数学上必须满足一定关系才行,否则无法对报文进行解密)
4. RSA算法中E,D,N的求解流程
通过上文已经知道:RSA加密是求“E次方的mod N”, 解密则是求“D次方的mod N”,这里用到了三个数:E,D,N, 他们是如何得到的呢?
RSA密钥对的生成步骤如下:
- (1)求N
- (2)求 Φ (Φ仅仅密钥对的生成过程中使用)
- (3)求E
- (4)求D
下面对求解过程做一个说明:
(1) 求N
首先准备两个很大的质数 p,q ; 之后计算出两个质数的乘积N :N = p x q
一般使用随机数生成器来完成,并配合数学上的判据来确定一个数是否为质数。
(2)求欧拉函数Φ
在数论中用Φ(n)来表示变量n的欧拉函数,它表示[1, n-1]范围内那些与n互质(最大公约数为1)的正整数的个数。 这里涉及两个重要定理:
- 定理1:如果n为质数,则Φ(n) = n-1
- 定理2:如果p,q为质数, n = p x q,则Φ(n) = Φ ( p) x Φ(q) = (p-1)(q-1)
在RSA算法中,我们需要计算Φ(n) 的值:
Φ(n) = (p-1)(q-1)
(3)求E
E是一个介于 (1, Φ(n) ) 之间的正整数。此外E必须与 Φ(n) 互质。
这里E也采用随机数生成器来生成,由于需要与 Φ(n) 互质,采用数据公式来快速判断是否互质(如辗转相除法)。
为什么要保证互质呢?
目的是为了保证一定存在D与E相对应。(这个也是数论中的定理)
(4)求D
D要求与E具有一一对应关系,那么具体D,E,之间有什么关系呢?
- 关系1:1<D<Φ(n)
- 关系2:D x E = 1 mod Φ(n)
只要E、D、Φ满足上述条件,那么通过(E,N)加密的报文,一定可以通过(D,N)来解密。而关系2存在的关键在于:E必须与Φ(n)互质,这便是(3)中需要满足的条件。
至此:D,E,N全部计算完毕。
5. RSA算法安全性
RSA算法的安全性来自于:大整数质因数分解的困难性。如果未来的某一天,大整数分别算法有了重大突破,那么RSA算法便不再安全。
参考资料
- 原文:【浅析RSA算法】