RSA加密算法已知公钥对,求d
Posted nufe_wwt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RSA加密算法已知公钥对,求d相关的知识,希望对你有一定的参考价值。
RSA加密算法中求d
1 非对称加密算法RSA密匙生成步骤
- 选择两个质数 p , q
- 计算 n , n = p*q
- 计算欧拉函数值 φ(pq) = (p-1)*(q-1)
- 选择整数 e ,要求满足 1 < e < φ(pq)
- 计算 d ,要求满足 ed ≡ 1 mod φ(pq) 也就是 ed mod φ(pq) = 1
- 保存密匙对
从以上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 :
- 通过 n 推导出 p , q (因式分解)
- 通过 p , q 推导出 φ(pq)
- 通过 e*d ≡ 1 mod φ(pq) 求得 d
前两步都很好理解,那第三步按照正常的 ed = 1 + kφ(pq) 算的话可以会把人搞䨻。所有就有了辗转相除法在这边的运用。
3 用一个例子说明辗转相除法
还是拿经典的老题目了(课上和搜的博客都是这个,故称之为老!)
例:已知(e=17,n=3233),求另一个密钥。
- n=3233,自己算出 3233 = 61 * 53 , 就令 p=61, q=53
- φ(pq)=(61-1)*(53-1)=3120
- 由 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加密算法已知公钥对,求d的主要内容,如果未能解决你的问题,请参考以下文章
浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥