RSA生成密钥对的过程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/82725708

一 点睛

RSA的加密是求“E次方的mod N”,解密是求“D次方的mod N”,这里提到了三个数——E、D和N,它们到底是怎样生成的呢?

由于E和N是公钥,D和N是私钥,因此求E、D和N这三个数就是生成密钥对。RSA密钥对的生成步骤如下:

1 求N

2 求L(L是仅在生成密钥对的过程中使用的数)

3 求E

4 求D

二 生成密钥对过程

1 求N

首先准备两个很大的质数。

这两个很大的质数为p和q。

p和q太小的话,密码会变得容易破译,但太大的话计算时间又会变得很长。例如,假设p和q的大小都是512比特,相对于155位的十进制数字。

要求出这样大的质数,需要通过伪随机数生成器生成一个512bit大小的数,再判断这个数是不是质数。如果伪随机数生成的数不是质数,就需要再用伪随机数重新生成另外一个数。

判断一个数是不是质数并不是看它能不能分解质因数,而是通过数学上的方法来完成,判断质数的方法包括费马测试和米勒.拉宾测试等。

准备好两个很大的质数之后,再将这两个数相乘,其结果就是数N。也就是说,数N可以用下列公式来表达。

N=p*q  (p、q为质数)

2 求L

L这个数在RSA的加密和解密过程中都不会出现,它只出现在生成密钥对的过程中。

L是p-1和q-1的最小公倍数。如果用lcm(X,Y)来表示“X和Y的最小公倍数”,则L可以写成下列形式。

L=lcm(p-1,q-1)(L是p-1和q-1的最小公倍数)

3 求E

E是一个比1大,比L小的数。此外,E和L的最大公约数(gcd)必须为1.如果用gcd(X、Y)来表示X和Y的最大公约数,则E和L之间存在下列关系。

1<E<L

gcd(E,L)=1    E和L的最大公约数为1(E和L互质)

要找出满足gcd(E,L)=1的数,还是要使用伪随机数生成器。通过伪随机数生成器在1<E<L的范围内生成E的候选数,然后再判断是否满足gcd(E,L)=1这个条件。求最大公约数可以使用欧几里得的辗转相除法。

简单说,之所以要加上E和L的最大公约数为1这个条件,是为了保证一定存在在解密时需要使用的数D。

到此,已经求出了E和N,也就是说已经生成了密钥对中的公钥。

4 求D

数D是由数E计算得到的。D、E和L之间必须具备下列关系。

1<D<L

E*D mod L =1

只要数D满足上面条件,则通过E和N进行加密的密文,就可以通过D和N进行解密。

简单来说,E*D mod L =1 保证了对密文进行解密时能够得到原来的明文。

到此就求出了D和N,也就是说我们生成了密钥对中的私钥。

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/82725708