当我有p = 163,q = 311和e = 281时,我正在使用欧几里得算法。这是我到目前为止所拥有的
N = p * q = 50693
Totient Symbol(n) = 162 x 310 = 50220
1. 50220 = 178(281) + 202
2. 281 = 1 (202) + 79
3. 202 = 2 (79) + 44
4. 79 = 1 (44) + 35
5. 44 = 1 (35) + 9
6. 35 = 3 (9) + 8
7. 9 = 1 (8) + 1
8. 8 = 8 (1) + 0
然后我继续回到替换
A. 9 = 1 (8) + 1 === 1 = 9-1(8)
B. 8 = 35 – 3(9)
C. 1 = 1(9)-1(35-3(9)) -
D. 1 = 3(9) – 1(35) + 1(9) add similar items
E. 1 = 4(9) -1(35)
9 = 44 – 1(35)
1 = 4 (44-1(35)) – 1(35)
1 = 4(44)-4(35)-1(35)
1 = 4(44) – 5(35)
取35(5)旁边的值,从totient中减去它 50220 - 5 = 50215 d = 50215
这是错误的,因为我使用在线计算来验证。任何人都可以指出我在这里正确的方向,我认为后面的替代是错误的
答案 0 :(得分:0)
有两种不同的方法可以计算RSA d
值,φ(phi / totient)方法和λ(lambda /最小公倍数)方法。虽然最初的RSA论文(和RFC 2313)使用phi,但现代实现(和RFC 2437)使用lambda。
容易值很容易:(p-1)(q-1)= 50220。 对于lambda(p-1,q-1),我们需要先计算GCD(p-1,q-1),该例子使用Euclidian algorithm的减法形式:
GCD(162, 310)
GCD(162, 148)
GCD(14, 148)
GCD(14, 134)
GCD(14, 120)
GCD(14, 106)
GCD(14, 92)
GCD(14, 78)
GCD(14, 64)
GCD(14, 50)
GCD(14, 36)
GCD(14, 22)
GCD(14, 8)
GCD(6, 8)
GCD(6, 2)
GCD(4, 2)
GCD(2, 2)
GCD = 2
(a,b)的最小公倍数是a * b / GCD(a, b)
。因此lambda值是totient / GCD,或25110
。
现在,为了计算dPhi = ModInv(e, phi)
或dLambda = ModInv(e, lambda)
,我们可以使用Extended Euclidean Algorithm:
ModInverse(281, 50220)
r=50220, newR=281, t= 0, newT= 1
r= 281, newR=202, t= 1, newT= -178
r= 202, newR= 79, t= -178, newT= 179
r= 79, newR= 44, t= 179, newT= -536
r= 44, newR= 35, t= -536, newT= 715
r= 35, newR= 9, t= 715, newT=-1251
r= 9, newR= 8, t=-1251, newT= 4468
r= 8, newR= 1, t= 4468, newT=-5719
r= 1, newR= 0, t=-5719, newT=50220
Correcting the sign of t
dPhi = 44501
ModInverse(281, 25110)
r=25110, newR=281, t= 0, newT= 1
r= 281, newR=101, t= 1, newT= -89
r= 101, newR= 79, t= -89, newT= 179
r= 79, newR= 22, t= 179, newT= -268
r= 22, newR= 13, t= -268, newT= 983
r= 13, newR= 9, t= 983, newT=-1251
r= 9, newR= 4, t=-1251, newT= 2234
r= 4, newR= 1, t= 2234, newT=-5719
r= 1, newR= 0, t=-5719, newT=25110
Correcting the sign of t
dLambda = 19391
您似乎已经正确地完成了扩展欧几里德算法的下行步骤,但是不熟悉反向传播计算(与内联形式相反)我没有看到您在哪里产生了值或算术错误。< / p>