回答:
秘密鍵には、公開鍵よりも多くの情報があります。公開鍵は暗号化指数(e)と係数(n)のみを伝達しますが、秘密鍵は復号化指数(d)と係数の2つの素因数(pとq)を追加で含みます。秘密鍵は本質的に公開鍵を持っています。
[暗号化:暗号文= message ^ e(mod n); 復号化:メッセージ=暗号文^ d(mod n)]
秘密鍵ファイルのすべてのデータを表示するには:
$ openssl rsa -in id_rsa -text -noout
編集:秘密鍵ファイルには明らかに暗号指数はありませんが、指数d_1とd_2があります。ここで、d_1 = d(mod p-1)とd_2 = d(mod q-1)です。これらは、解読を高速化するために使用されます-解読指数をより小さな並列指数呼び出しに分割できます。これは、big dとbig nの1つの大きなm = c ^ d(mod n)よりも高速になります。
残念ながら、キーが格納される形式を指定していません。OpenSSHキーエンコーディングを参照していると思います。この形式では、キーはbase64でエンコードされたデータブロックに格納されます。暗号化時のエンコーディングに応じて、通常、データを暗号化するときに何らかのパディングが行われます。したがって、結果のデータは暗号化ブロックサイズの倍数になります。
OpenSSHキーには、ある種のコメントや---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ----
、-----END RSA [PUBLIC|PRIVATE] KEY-----
マーカーとの間に挿入された追加のプロパティを含めることもできます。RFC4716を参照してください。
さらに、公開鍵の場合はモジュラスと公開指数が保存され、秘密鍵の場合は秘密指数が保存されます。参照してくださいウィキペディア上のRSA鍵生成を数学的なベースの詳細については。これらのキー間の数学的な接続を説明するWeb上の多くの場所があります。ここでこれらの説明のコピーが必要かどうかはわかりません。
理論的には、公開鍵情報から秘密鍵を計算することは可能ですが、これを行うことは、数学的には他の方法よりはるかに困難です。秘密鍵をすべての変数と公開鍵を含む「ソース」と見なして、計算の結果と見なしてください。すべての変数を知っていれば、何度でも繰り返し計算を実行するのは簡単ですが、結果だけを知っていれば、すべてのソース変数を取得することは困難です。これが、秘密鍵を安全な場所に保存するだけで十分である理由です。いつでも秘密鍵を使用して公開鍵を再計算できます。しかし、逆ではありません-理論的にはこれを行うことができますが、キーの長さによってはこれに何年もかかる可能性があります;)。