【问题标题】:Using RSA encryption, how can i find d使用 RSA 加密,我怎样才能找到 d
【发布时间】:2017-03-30 10:36:43
【问题描述】:

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

这是错误的,因为我使用了在线计算来验证。谁能在这里指出我正确的方向,我认为后面的替换是错误的

【问题讨论】:

    标签: rsa


    【解决方案1】:

    有两种不同的方法来计算 RSA d 值,φ(phi / totient)方法和 λ(lambda / 最小公倍数)方法。虽然最初的 RSA 论文(和 RFC 2313)使用 phi,但现代实现(和 RFC 2437)使用 lambda。

    totient 值很简单:(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
    

    您似乎正确地完成了扩展欧几里得算法的递减步骤,但不熟悉反向传播计算(与内联形式相反)我看不出您在哪里犯了值或算术错误。

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      相关资源
      最近更新 更多