私は本当にこれを理解していません:
によると: http://www.madboa.com/geek/openssl /#key-rsa 、秘密鍵から公開鍵を生成できます。
openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
私の最初の考えは、それらが一緒にペアで生成されるということでした。 RSA秘密鍵に合計が含まれていますか?それとも公開鍵?
openssl genrsa -out mykey.pem 1024
実際に公開鍵と秘密鍵のペアを生成します。ペアは生成されたmykey.pem
ファイルに格納されます。
openssl rsa -in mykey.pem -pubout > mykey.pub
公開鍵を抽出してそれを印刷します。 ここ はこれをよりよく説明しているページへのリンクです。
編集:例のセクションを確認してください ここ 。秘密鍵の公開部分だけを出力するには
openssl rsa -in key.pem -pubout -out pubkey.pem
SSH目的で使用可能な公開鍵を取得するには、 ssh-keygen を使用します。
ssh-keygen -y -f key.pem > key.pub
OpenSSHで使用するために公開鍵を抽出しようとしているなら、公開鍵を少し違った方法で取得する必要があります
$ ssh-keygen -y -f mykey.pem > mykey.pub
この公開鍵フォーマットはOpenSSHと互換性があります。公開鍵をremote:~/.ssh/authorized_keys
に追加してください。
SSH-KEYGEN(1)
のドキュメント
ssh-keygen -y [-f input_keyfile]
-y このオプションはプライベートOpenSSHフォーマットファイルを読み込み、OpenSSH公開鍵を標準出力に出力します。
Opensslを含むRSA秘密鍵を生成するほとんどのソフトウェアでは、秘密鍵は PKCS#1 RSAPrivatekey オブジェクトまたはその変形として表されます。
A.1.2 RSA秘密鍵の構文
RSA秘密鍵はASN.1タイプで表す必要があります
RSAPrivateKey:RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- p prime2 INTEGER, -- q exponent1 INTEGER, -- d mod (p-1) exponent2 INTEGER, -- d mod (q-1) coefficient INTEGER, -- (inverse of q) mod p otherPrimeInfos OtherPrimeInfos OPTIONAL }
ご覧のとおり、この形式にはモジュラスと公開指数を含むいくつかのフィールドがあり、したがって RSA公開鍵 の情報の厳密なスーパーセットです。
公開鍵は、PEMファイルに格納されていません。秘密鍵ファイルには、次のDER構造があります。
openssl rsa -text -in mykey.pem
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
そのため、公開鍵を計算するのに十分なデータ(モジュラスと公開指数)があります。これがopenssl rsa -in mykey.pem -pubout
の動作です。
以下の私の答えは少し長いですが、うまくいけば、それは前の答えで欠けているいくつかの詳細を提供します。いくつかの関連する文から始めて、最後に最初の質問に答えます。
RSAアルゴリズムを使用して何かを暗号化するには、法と暗号化(公開)指数ペア(n、e)が必要です。それがあなたの公開鍵です。 RSAアルゴリズムを使用して何かを復号化するには、法と復号化(プライベート)指数ペア(n、d)が必要です。それがあなたの秘密鍵です。
RSA公開鍵を使用して何かを暗号化するには、平文を数字として扱い、それをe係数nのべき乗にします。
ciphertext = ( plaintext^e ) mod n
RSA秘密鍵を使用して何かを復号化するには、あなたの暗号文を数字として扱い、それをd剰余nのべき乗にします。
plaintext = ( ciphertext^d ) mod n
Opensslを使用して秘密(d、n)鍵を生成するには、次のコマンドを使用できます。
openssl genrsa -out private.pem 1024
Opensslを使用して秘密鍵から公開(e、n)鍵を生成するには、次のコマンドを使用できます。
openssl rsa -in private.pem -out public.pem -pubout
上記のopensslコマンドによって生成されたprivate.pemプライベートRSAキーの内容を分析するには、次のコマンドを実行します(出力はここでラベルに切り捨てられます)。
openssl rsa -in private.pem -text -noout | less
modulus - n
privateExponent - d
publicExponent - e
prime1 - p
prime2 - q
exponent1 - d mod (p-1)
exponent2 - d mod (q-1)
coefficient - (q^-1) mod p
秘密鍵は(n、d)のペアだけで構成されてはいけませんか? 6つの追加コンポーネントがあるのはなぜですか?これにはe(公開指数)が含まれているので、公開RSA鍵はprivate.pem秘密RSA鍵から生成/抽出/派生することができます。残りの5つのコンポーネントは、復号化プロセスをスピードアップするためにあります。 5つの値を事前計算して保存することで、RSAの復号化を4倍速くすることができます。復号化はこれら5つの要素がなくてもうまくいきますが、便利な場合はもっと速くできます。高速化アルゴリズムは、 中国剰余定理 に基づいています。
はい、private.pem RSA秘密鍵には、実際にはこれら8つの値すべてが含まれています。前のコマンドを実行しても、それらはその場では生成されません。次のコマンドを実行して出力を比較してください。
# Convert the key from PEM to DER (binary) format
openssl rsa -in private.pem -outform der -out private.der
# Print private.der private key contents as binary stream
xxd -p private.der
# Now compare the output of the above command with output
# of the earlier openssl command that outputs private key
# components. If you stare at both outputs long enough
# you should be able to confirm that all components are
# indeed lurking somewhere in the binary stream
openssl rsa -in private.pem -text -noout | less
RSA秘密鍵のこの構造は、 PKCS#1 v1.5 によって代替の( second )表現として推奨されています。 PKCS#1 v2.0 standardは、eとdの指数を代替表現から完全に除外します。 PKCS#1 v2.1 および v2.2 は、必要に応じてより多くのCRT関連のコンポーネントを含めることによって、代替表現へのさらなる変更を提案します。
Public.pem RSA公開鍵の内容を確認するには、次のコマンドを実行します(出力はここでラベルに切り捨てられます)。
openssl rsa -in public.pem -text -pubin -noout
Modulus - n
Exponent (public) - e
ここに驚きはありません。約束通り、それはちょうど(n、e)ペアです。
最後に最初の質問に答えます。上に示したように、opensslを使用して生成されたプライベートRSAキーには、パブリックキーとプライベートキーの両方のコンポーネントと、その他のコンポーネントが含まれています。秘密鍵から公開鍵を生成/抽出/派生すると、opensslはそれらのコンポーネントのうちの2つ(e、n)を別のファイルにコピーして、それが公開鍵になります。
ここでは、このコードの最初の部分で秘密鍵となるRSA鍵を作成していますが、公開鍵のペアも持っているので、実際の公開鍵を取得するためには次のようにします。
openssl rsa -in mykey.pem -pubout > mykey.pub
あなたがより多くの情報のためにそれを得ることを望みなさい これをチェックしなさい
最初にRSA鍵生成について簡単に要約します。
公開鍵はモジュラスと公開指数で構成されています。
最小秘密鍵はモジュラスと秘密指数で構成されます。既知のモジュラスとプライベート指数から対応するパブリック指数に進むための計算上実行可能な確実な方法はありません。
しかしながら:
したがって、最も実用的なRSA実装では、秘密鍵から公開鍵を取得できます。これが不可能なRSAベースの暗号システムを構築することは可能でしょうが、それは行われたことではありません。
Use the following commands:
1. openssl req -x509 -nodes -days 365 -sha256 -newkey rsa:2048 -keyout mycert.pem -out mycert.pem
Loading 'screen' into random state - done
Generating a 2048 bit RSA private key
.............+++
..................................................................................................................................................................+++
writing new private key to 'mycert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
2. If you check there will be a file created by the name : mycert.pem
3. openssl rsa -in mycert.pem -pubout > mykey.txt
writing RSA key
4. If you check the same file location a new public key : mykey.txt will be created.