使用RSA加密,我怎样才能找到d

时间:2017-03-30 10:36:44

标签: rsa

当我有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

这是错误的,因为我使用在线计算来验证。任何人都可以指出我在这里正确的方向,我认为后面的替代是错误的

1 个答案:

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