web-dev-qa-db-ja.com

RSA:拡張ユークリッドアルゴリズムを使用した秘密鍵の計算

私は高校生でRSAに関する論文を書いていますが、いくつかの非常に小さな素数で例を示しています。システムがどのように機能するかは理解していますが、拡張ユークリッドアルゴリズムを使用して秘密鍵を計算することは一生できません。

これが私がこれまでにしたことです:

  • 素数p = 37とq = 89を選び、N = 3293を計算しました
  • (p-1)(q-1)= 3168を計算しました
  • Eと3168が互いに素になるように、数eを選択しました。私はこれを標準のユークリッドアルゴリズムでチェックしていますが、それは非常にうまく機能します。私のe = 25

ここで、秘密鍵dを計算する必要があります。これは、ed = 1(mod 3168)を満たす必要があります。

拡張ユークリッドアルゴリズムを使用して、de + tN = 1となるdを見つけます。-887•25 + 7•3168 = 1になります。私は7を捨てて、d = -887を取得します。ただし、メッセージを復号化しようとすると、これは機能しません。

私の本から、dは2281である必要があり、それは機能することがわかっていますが、どのようにしてその数に到達するのかわかりません。

誰か助けてもらえますか?私は過去4時間この問題を解決しようとしましたが、どこでも答えを探してきました。私は拡張ユークリッドアルゴリズムを手作業で行っていますが、結果が機能するので、私の計算は正しいはずです。

前もって感謝します、

マッド

20
mads

あなたはとても近くにいるので、自分を蹴るつもりです。

3168-887 = 2281。

具体的には、mod xがある場合、Aは0<=a<xを満たす必要があります。そうでない場合は、この範囲に入るまで、必要な回数だけxを加算または減算します。これはモジュラー演算と呼ばれます。

線形合同と数論について読みたいと思うかもしれません。これらのトピックは英国の学位レベルの数学(私が推測する大学と呼ぶもの)なので、少し奇妙に思えても心配しないでください。線形合同は、-887 mod 31682281 mod 3168が同じクラスの一部であり、必要な範囲で2281 mod 3168となるクラスであるため、実際には同じものであると単純に言います。 2281+3168 mod 3168もそのクラスに含まれます。

楽しんで!

P.S. PARI/GPは、理論家が計算に使用するユーティリティ番号です。一見の価値があるかもしれません。

20
user257111