在RSA加密中,如何找到d,给定p,q,e和c?

时间:2013-05-01 00:06:02

标签: encryption rsa

我知道我需要使用extended euclidean algorithm,但我不确定我需要做什么计算。我有很多人。感谢

6 个答案:

答案 0 :(得分:13)

嗯,d被选为d * e == 1 modulo (p-1)(q-1),因此您可以使用Euclidean algorithmfinding the modular multiplicative inverse)。

如果您对理解算法不感兴趣,可以直接致电BigInteger#modInverse

 d = e.modInverse(p_1.multiply(q_1))

答案 1 :(得分:13)

鉴于此,p = 11,q = 7,e = 17,n = 77,φ(n)= 60且d =?

首先从公式中替换值: -

edmodφ(n)= 1

17 d mod 60 = 1

下一步: - 取n的总和,左手边是60,右手边是[e]。

60 = 17

第3步: - 询问17到60的次数。这是3.5 ......忽略余数并取3。

60 = 3(17)

步骤4: - 现在你需要平衡这个等式60 = 3(17),这样左手边等于右手边。怎么样?

60 = 3(17)+ 9< ==如果你将3乘以17得到51然后加9,即60.这意味着双方现在相等。

步骤5: - 现在左手拿17圈,右手拿9圈。

17 = 9

步骤6: - 询问9次进入17次。这是1.8 ......

17 = 1(9)

步骤7: - 步骤4: - 现在你需要平衡这17 = 1(9)

17 = 1(9)+ 8< ==如果你将1乘以9得到9然后再加上8,那就是17.这意味着双方现在相等。

步骤8: - 再次将9放在左手边,将8放在右手边。

9 = 1(8)

9 = 1(8)+ 1< ==一旦达到+1以平衡您的等式,您可以停止并开始进行替换。

步骤A: - 步骤8中的最后等式9 = 1(8)+ 1可写如下: 1. = 9 - 1(8)

步骤B: - 我们通过简单的说法8 = 17 - 1(9)从步骤7知道什么是(8)。现在我们可以将步骤A重写为: -

1 = 9 -1(17 - 1(9))< ==这里因为9 = 1(9)我们可以重写为: -

1 = 1(9)-1(17)+1(9)< ==组相似的术语。在这种情况下,你添加1(9)与1(9) - 即2(9)。

1 = 2(9)-1(17)

步骤C: - 我们通过简单的说法9 = 60 - 3(17)从步骤4知道什么是(9)。现在我们可以将步骤B重写为: -

1 = 2(60-3(17)-1(17)

1 = 2(60)-6(17)-1(17)< ==组相似的术语。在这种情况下,你添加6(17)与1(17) - 即7(17)。

1 = 2(60)-7(17)< ==在这个阶段我们可以停下来,没有更多可以替代,因此取下一个17的值。那就是7.用tot tot减去它。

60-7 = d

因此d = 53的值。

答案 2 :(得分:1)

我只想补充Sidudozo's answer并澄清一些重点。

首先,我们应该向Extended Euclidean Algorthim传递什么来计算d

请记住ed mod φ(n) = 1cgd(e, φ(n)) = 1

知道Extended Euclidean Algorthim基于公式cgd(a,b) = as + bt,因此cgd(e, φ(n)) = es + φ(n)t = 1,其中d应等于s + φ(n)以满足

ed mod φ(n) = 1条件。

因此,鉴于e=17φ(n)=60(借用Sidudozo's answer),我们会替换上述公式中的相应值: cgd(e, φ(n)) = es + φ(n)t = 117s + 60t = 1

Sidudozo's answer结束时,我们获得s = -7。因此d = s + φ(n)d = -7 + 60d = 53

让我们验证结果。条件是ed mod φ(n) = 1

17 * 53 mod 60 = 1 。正确!

答案 3 :(得分:1)

Thilo批准的答案是错误的,因为它使用Euler's totient function而不是Carmichael's totient function来找到d。尽管RSA密钥生成的原始方法使用的是Euler函数,但是d通常是使用Carmichael的函数派生的,原因是我不愿赘述。给定d pq而没有任何花哨符号的情况下,找到私有指数e所需的数学公式如下:

d = e^-1*mod(((p-1)/GCD(p-1,q-1))(q-1))

这是为什么?因为d是在关系

中定义的

de = 1*mod(λ(n))

λ(n)是Carmichael的函数,

λ(n)=lcm(p-1,q-1)

可以扩展到

λ(n)=((p-1)/GCD(p-1,q-1))(q-1)

因此将其插入定义d的原始表达式中

de = 1*mod(((p-1)/GCD(p-1,q-1))(q-1))

然后将其重新排列为最终公式

d = e^-1*mod(((p-1)/GCD(p-1,q-1))(q-1))

更多相关信息,请参见here

答案 4 :(得分:0)

只需使用此公式,

d =(1 + K(phi))/ e。 (当e和phi为小数时非常有用)

比方说,e = 3,phi = 40 我们假设K = 0、1、2 ...直到您的d值不是小数

假设K = 0,则 d =(1 + 0(40))/ 3 =0。(如果是十进制数,则增加K值,不必费心查找十进制的确切值)

假设K = 2,则 d =(1 + 2(40)/ 3)= 81/3 = 27

d = 27。

假设K在实践中将变得指数般容易。

答案 5 :(得分:0)

取值 p=7, q=11e=17。 然后是 n=p*q=77f(n)=(p-1)(q-1)=60 的值。 因此,我们的公钥对是,(e,n)=(7,77) 现在为了计算 d 的值,我们有约束,

e*d == 1 mod (f(n)), [here "==" represents the **congruent symbol**].
17*d == 1 mod 60
(17*53)*d == 53 mod 60, [7*53=901, which gives modulus value 1]
1*d == 53 mod 60

因此,这给出了 d=53 的值。 因此,我们的私钥对将是 (d,n)=(53,77)

希望对您有所帮助。谢谢!