如何计算RSA加密环境中数字的Modular Multiplicative inverse?

时间:2010-07-27 14:41:10

标签: security math cryptography rsa

如何计算RSA加密环境中数字的Modular Multiplicative inverse?

5 个答案:

答案 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