对于 RSA,我如何计算秘密指数?
Posted
技术标签:
【中文标题】对于 RSA,我如何计算秘密指数?【英文标题】:For RSA, how do i calculate the secret exponent? 【发布时间】:2011-03-13 16:28:19 【问题描述】:给定 p 和 q 两个素数,以及 phi=(p-1)(q-1) 和公共指数 (0x10001),我如何获得秘密指数 'd'?
我读到我必须这样做:d = e-1 mod phi 使用 modular inversion 和 euclidean equation 但我无法理解上述内容公式映射到模块化反演 wiki 页面上的 a-1 ≡ x mod m 公式,或者它如何映射到欧几里德 GCD 方程。
有人可以帮忙吗,干杯
【问题讨论】:
至少在 java 中看起来像,我需要的只是 d=(java.math.BigInteger)e.modInverse(phi); 是的,应该这样做......祝你好运! 我投票结束这个问题,因为它是数学,而不是编程。 【参考方案1】:你可以用extended Euclidean algorithm解出同余中的d
de = 1 mod phi(m)
对于 RSA 加密,e
是加密密钥,d
是解密密钥,加密
和解密均由取幂 mod m
执行。如果您加密消息a
使用密钥e
,然后使用密钥d
对其进行解密,您计算 (ae)d = ade mod @987654332 @。但
因为de = 1 mod phi(m)
,Euler's totient theorem 告诉我们 ade 是全等的
到一个1 mod m -- 换句话说,你得到了原来的a
。
没有已知的有效方法来获取解密密钥d
,只知道
加密密钥e
和模数m
,不知道分解m = pq
,所以
RSA 加密被认为是安全的。
【讨论】:
我对这里的代码很幸运:en.wikipedia.org/wiki/… 只需向该函数输入 a=e, b=phi 即可得到 x,y - y 被丢弃,x 是秘密指数 d ! @Chris:很遗憾 Euler 和 Euclid 没能活下来以收取他们在专利收入中的份额。这么久,感谢所有的数学! 为了完整起见,另一种具有相同基本性能的计算方法是 d = e**(phi(phi(m))-1) mod phi(m)。 @GregS:身份成立,但我不同意性能具有可比性。用欧几里得算法找到一个逆 mod n 可以在 O(log n) 时间内完成。但是找到 phi(n) 与分解 n 一样困难,对于任何 k 都没有已知的 O( (log n)^k ) 算法。如果原始 p 和 q 选择得当,(p-1) 和 (q-1) 本身就会有很大的素因数,使得 phi(phi(m)) 难以计算。 @Jim:同意,你必须知道 phi(phi(m)) 否则毫无意义。如果 p-1=2*p' 和 q-1=2*q',其中 p' 和 q' 是素数,则 phi(phi(m)) 是 2*p'*q'。这样的 p 和 q 称为安全素数,在 RSA 实现中很常见(尽管没有必要)。以上是关于对于 RSA,我如何计算秘密指数?的主要内容,如果未能解决你的问题,请参考以下文章
OpenSSL 生成 RSA 公钥时,默认指数为 65535,如何更改?