仅p,q已知
p=
q=
n=p*q=
φ(n)=(p-1)*(q-1)
随机选择e,e必须与φ(n)互为质数,gcd(e,φ(n))=1.
(质数:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59... ...)
e最好选择最小的质数,对于d的求解是最方便的,e越大则d越大。
d*e mod φ(n)=1
d=[φ(n)*m+1]/e 其中m从(0、1、2、3、4... ...一直代入)直到计算出的d为整数,且d<φ(n).
另外一种计算方式:
按RSA算法规定有如下
p*q =N
(p-1) * (q-1) = n
e*d ==(1 mod n)
等价如下
e*d -n*k =1
作一系列相除运算, 不记得就是大数当被除数求余就行了
分两种情况
1.最后的k系数不为1
例:令p=47,q=71,求用RSA算法加密的公钥和私钥。
计算如下:
(1)n=pq=47*71=3337;
(2)φ(n)=(p-1)*(q-1)=46*70=3220;
(3)随机选取e=79(满足与3220互质的条件);
(4)则私钥d应该满足:79*d mod 3220 = 1;
那么这个式子(4)如何解呢?这里就要用到欧几里得算法(又称辗转相除法),解法如下:
(a)式子(4)可以表示成79*d-3220*k=1(其中k为正整数);
(b)将3220对79取模得到的余数60代替3220,则变为79*d-60*k=1;
(c)同理,将79对60取模得到的余数19代替79,则变为19*d-60*k=1;
(d)同理,将60对19取模得到的余数3代替60,则变为19*d-3*k=1;
(e)同理,将19对3取模得到的余数1代替19,则变为d-3*k=1;
当d的系数最后化为1时,(注:当k的系数先化为1时,令d=1,再带入)
令k=0,代入(e)式中,得d=1; (注 d系数先为1时, 此处第1个式子代入 k=0)
将d=1代入(d)式,得k=6;
将k=6代入(c)式,得d=19;
将d=19代入(b)式,得k=25;
将k=25代入(a)式,得d=1019,这个值即我们要求的私钥d的最终值。
2. k系数为1的情况
原式: 20*d mod 2000001 = 1,求d;
用辗转相除法可转换为下列式子:
(1) 20*d – 2000001*k = 1;
(2) 20*d – 1*k = 1;
此时k的系数已经化为1;
令d=1,带入(2)式中,得k=19; (注:若k的系数为1,则把d=1供入原式,求出k)
令k=19,带入(1)式中,得d=1900001;
解得:d=1900001