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,自己算出 323