拡張ユークリッドアルゴリズム を使用する必要があることはわかっていますが、どの計算を実行する必要があるのか正確にはわかりません。私には膨大な数があります。ありがとう
まあ、d
はd * e == 1 modulo (p-1)(q-1)
となるように選択されているので、そのために ユークリッドアルゴリズム を使用できます( モジュラー乗法逆数を見つける ) 。
アルゴリズムの理解に興味がない場合は、 BigInteger#modInverse を直接呼び出すだけです。
d = e.modInverse(p_1.multiply(q_1))
その場合、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) = 1
とcgd(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)=60
( Sidudozoの回答 から借用)を指定すると、上記の式の対応する値を代入します。cgd(e, φ(n)) = es + φ(n)t = 1
⇔17s + 60t = 1
。
シドドーゾの答え の最後に、s = -7
を取得します。したがって、d = s + φ(n)
⇔d = -7 + 60
⇒d = 53
。
結果を確認してみましょう。条件はed mod φ(n) = 1
でした。
見て17 * 53 mod 60 = 1正しい!