SSHキー:id_rsaがid_rsa.pubよりも大きいのはなぜですか?


8

私の秘密鍵(~/.ssh/id_rsa)は1766バイトのファイルですが、公開鍵(~/.ssh/id_rsa.pub)の長さは396バイトしかありません。なぜ大きな違いがあるのですか?秘密鍵がAESを使用して暗号化されているためですか?AES暗号文は通常、平文と同じ長さではありませんか?

回答:


17

秘密鍵には、公開鍵よりも多くの情報があります。公開鍵は暗号化指数(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)よりも高速になります。


2

残念ながら、キーが格納される形式を指定していません。OpenSSHキーエンコーディングを参照していると思います。この形式では、キーはbase64でエンコードされたデータブロックに格納されます。暗号化時のエンコーディングに応じて、通常、データを暗号化するときに何らかのパディングが行われます。したがって、結果のデータは暗号化ブロックサイズの倍数になります。

OpenSSHキーには、ある種のコメントや---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ---------END RSA [PUBLIC|PRIVATE] KEY-----マーカーとの間に挿入された追加のプロパティを含めることもできます。RFC4716を参照してください。

さらに、公開鍵の場合はモジュラスと公開指数が保存され、秘密鍵の場合は秘密指数が保存されます。参照してくださいウィキペディア上のRSA鍵生成を数学的なベースの詳細については。これらのキー間の数学的な接続を説明するWeb上の多くの場所があります。ここでこれらの説明のコピーが必要かどうかはわかりません。

理論的には、公開鍵情報から秘密鍵を計算することは可能ですが、これを行うことは、数学的には他の方法よりはるかに困難です。秘密鍵をすべての変数と公開鍵を含む「ソース」と見なして、計算の結果と見なしてください。すべての変数を知っていれば、何度でも繰り返し計算を実行するのは簡単ですが、結果だけを知っていれば、すべてのソース変数を取得することは困難です。これが、秘密鍵を安全な場所に保存するだけで十分である理由です。いつでも秘密鍵を使用して公開鍵を再計算できます。しかし、逆ではありません-理論的にはこれを行うことができますが、キーの長さによってはこれに何年もかかる可能性があります;)。


公開鍵から秘密鍵を計算するには、高速で効率的な因数分解が必要です。その欠如が、公開鍵暗号化(少なくともRSA)のセキュリティに依存しています。
Andrew

これは正しいです。高速な因数分解アルゴリズムを見つけ、基本的にはRSA暗号化のセキュリティを破ります。あるいは、離散対数を歩くことの難しさの概念に基づくECC(楕円曲線暗号)を使用することもできます。ただし、誰かがこの問題の効率的な解決策を見つけた場合...
SkyBeam
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.