如何计算RSA加密环境中数字的Modular Multiplicative inverse?
答案 0 :(得分:3)
Direct Modular Exponentiation
直接模幂运算方法,作为扩展欧几里德算法的替代方法,如下:
来源:http://en.wikipedia.org/wiki/Modular_multiplicative_inverse
答案 1 :(得分:3)
使用Extended Euclidean Algorithm,这在实践中明显快于直接模幂运算。
答案 2 :(得分:2)
Modular multiplicative inverse维基百科文章中详细介绍了两种算法。
答案 3 :(得分:0)
如果您需要为DSA算法计算w
,可以使用以下命令:
w = s^-1 mod q
实际上是
w = s^(q-2) mod q
请参阅:http://en.wikipedia.org/wiki/Modular_multiplicative_inverse#Using_Euler.27s_theorem
答案 4 :(得分:0)
我制定了一个更简单的反函数
def privateExponent(p,q,e):
totient=(p-1)*(q-1)
for k in range(1,e):
if (totient*k+1) % e==0:
return (totient*k+1)/e
return -1 # shouldnt get here
方程式d * e = 1(mod totient)可以重写为d * e = 1 + k * totient(对于k的某个值),程序只搜索k的第一个值,使得方程可被整除e(公众指数)。如果e很小(通常建议使用),这将起作用。
我们可以将所有bignum操作移出循环以提高其性能。
def privateExponent(p,q,e):
totient=(p-1)*(q-1)
t_mod_e=totient % e
k=0
total=1
while total!=0:
k+=1
total=(total+t_mod_e) % e
return (k*totient+1)/e
事实证明,对于e = 3,我们实际上不必搜索,因为答案总是2 *((p-1)*(q-1)+1)/ 3