我知道我需要使用extended euclidean algorithm,但我不确定我需要做什么计算。我有很多人。感谢
答案 0 :(得分:13)
嗯,d
被选为d * e == 1 modulo (p-1)(q-1)
,因此您可以使用Euclidean algorithm(finding 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) = 1
和cgd(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 = 1
⇔17s + 60t = 1
。
在Sidudozo's answer结束时,我们获得s = -7
。因此d = s + φ(n)
⇔d = -7 + 60
⇒d = 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
p
和q
而没有任何花哨符号的情况下,找到私有指数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=11
和 e=17
。
然后是 n=p*q=77
和 f(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)
。
希望对您有所帮助。谢谢!