web-dev-qa-db-ja.com

RSAでp、q、eを指定してdを見つける方法は?

拡張ユークリッドアルゴリズム を使用する必要があることはわかっていますが、どの計算を実行する必要があるのか​​正確にはわかりません。私には膨大な数があります。ありがとう

12
user1816690

まあ、dd * e == 1 modulo (p-1)(q-1)となるように選択されているので、そのために ユークリッドアルゴリズム を使用できます( モジュラー乗法逆数を見つける ) 。

アルゴリズムの理解に興味がない場合は、 BigInteger#modInverse を直接呼び出すだけです。

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

その場合、p = 11、q = 7、e = 17、n = 77、φ(n)= 60お​​よびd =?

最初に式の値を置き換えます:-

ed modφ(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)が何であるかは、8 = 17 – 1(9)ステップ7から簡単に言うとわかります。これで、ステップAを次のように書き直すことができます。-

1 = 9 -1(17 – 1(9)) <==ここでは9 = 1(9)なので、次のように書き換えることができます:-

1 = 1(9)-1(17)+1(9)<==グループの類似用語。この場合、1(9) with 1(9) – 2(9)と追加します。

1 = 2(9)-1(17)

ステップC:–(9)が何であるかがわかる9 = 60 – 3(17)ステップ4から。ステップBを次のように書き直すことができます。

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

1 = 2(60)-6(17)-1(17)<==類似用語をグループ化します。この場合、6(17) with 1(17)と追加すると、7(17)になります。

1 = 2(60)-7(17)<==この段階で停止できます。これ以上代入する必要はないので、次の値を17とします。つまり、7です。これをトージェントで減算します。

60-7 = d

したがって、dの値は53です。

シドドーゾの答え を増やして、いくつかの重要な点を明確にしたいと思います。

まず、dを計算するために拡張ユークリッドアルゴリズムに何を渡すべきですか?

ed mod φ(n) = 1cgd(e, φ(n)) = 1を忘れないでください。

拡張ユークリッドアルゴリズムはcgd(a,b) = as + btという式に基づいているため、cgd(e, φ(n)) = es + φ(n)t = 1となります。ここで、dは、s + φ(n)と等しい必要があります。

ed mod φ(n) = 1条件。

したがって、e=17φ(n)=60Sidudozoの回答 から借用)を指定すると、上記の式の対応する値を代入します。cgd(e, φ(n)) = es + φ(n)t = 117s + 60t = 1

シドドーゾの答え の最後に、s = -7を取得します。したがって、d = s + φ(n)d = -7 + 60d = 53

結果を確認してみましょう。条件はed mod φ(n) = 1でした。

見て17 * 53 mod 60 = 1正しい!

1
AndreyWD