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

Posted nufe_wwt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RSA加密算法已知公钥对,求d相关的知识,希望对你有一定的参考价值。

RSA加密算法中求d

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 就是用辗转相除法求得的,具体过程如下:

序号abcd
0312017d0=2753
1179183d1=2
2981d2=-1
3-11d3=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加密算法已知公钥对,求d的主要内容,如果未能解决你的问题,请参考以下文章

rsa算法中p,q,n,e,d一般大小都为多少啊?

浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥

RSA 公钥加密算法

php rsa加密 已有明文和公钥 只需加密

假设需要加密明文信息为m=85,选择:e=7,p=11,q=13,说明使用RSA算法加密和解密过程及结果。

使用rsa进行http传输加密