RSA加密算法已知公钥对,求d

RSA加密算法中求d

  • 1 非对称加密算法RSA密匙生成步骤
  • 2 已知n、e,如何求出d
  • 3 用一个例子说明辗转相除法

1 非对称加密算法RSA密匙生成步骤

  1. 选择两个质数 p , q
  2. 计算 n , n = p*q
  3. 计算欧拉函数值 φ(pq) = (p-1)*(q-1)
  4. 选择整数 e ,要求满足 1 < e < φ(pq)
  5. 计算 d ,要求满足 ed ≡ 1 mod φ(pq) 也就是 ed mod φ(pq) = 1
  6. 保存密匙对

从以上6个步骤中我们可以看到,一共出现了6个“字母”,分别是:p , q , n , φ(pq) , e , d
最后生成的 公匙 为:( n , e ) , 私钥 为:( n , d )

2 已知n、e,如何求出d

要求 d ,就要先知道 φ(pq) ,就要知道 p 和 q ,意思就是6个字母都知道了。
那在知道n的情况下要求 p 和 q ,就要用到因式分解,所以说要是快速因式分解算法被找到了,那 RSA 算法的安全性就要大大降低了。这里扯远了,收。

在知道公钥,也就是 n 和 e 的情况下,求 d :

  1. 通过 n 推导出 p , q (因式分解)
  2. 通过 p , q 推导出 φ(pq)
  3. 通过 e*d ≡ 1 mod φ(pq) 求得 d

前两步都很好理解,那第三步按照正常的 ed = 1 + kφ(pq) 算的话可以会把人搞䨻。所有就有了辗转相除法在这边的运用。

3 用一个例子说明辗转相除法

还是拿经典的老题目了(课上和搜的博客都是这个,故称之为老!)
例:已知(e=17,n=3233),求另一个密钥。

  1. n=3233,自己算出 3233 = 61 * 53 , 就令 p=61, q=53
  2. φ(pq)=(61-1)*(53-1)=3120
  3. 由 ed ≡ 1 mod φ(pq) 得式:17d ≡ 1 mod 3120 => d = 2753

这里 d 就是用辗转相除法求得的,具体过程如下:

序号 a b c d
0 3120 17 d0=2753
1 17 9 183 d1=2
2 9 8 1 d2=-1
3 - 1 1 d3=1

d3=1 是固定的,就是最后一行的值,d2=0-c3*d3,d1=d3-c2*d2,d0=d2-c1*d1.
d0或者a0+d0即为d. 这里要注意,当d0<0时d=a0+d0.
di = di+2 - ci+1 *di+1.

a0÷b0=c1…b1
a1=b0
a1÷b1=c2…b2

在辗转相除法表中a0就是φ(pq),b0就是e
辗转相除法的终止条件是bk=1

网上看到的
问:一个数很大的数如何快速分解成两个素数的乘积?
答:这只有硬算,没有加速算法。这没有加速算法是密码学得以成立的最根本的原因。也就是说,如果能做到这个,RSA之类的密码学就有问题了

想要更多的了解的话可以去看看这些链接
RSA算法原理

你可能感兴趣的:(rsa,密码学)