回答:
https://polarssl.org/kb/cryptography/asn1-key-structures-in-der-and-pem(「BEGIN RSA PRIVATE KEY」のページを検索)を参照してください(念のため、後世のアーカイブリンク)。
BEGIN RSA PRIVATE KEY
PKCS#1であり、単なるRSAキーです。これは基本的にはPKCS#8のキーオブジェクトですが、前にバージョンまたはアルゴリズム識別子がありません。BEGIN PRIVATE KEY
PKCS#8であり、鍵タイプが鍵データ自体に含まれていることを示します。リンクから:
暗号化されていないPKCS#8でエンコードされたデータは、タグで開始および終了します。
-----BEGIN PRIVATE KEY----- BASE64 ENCODED DATA -----END PRIVATE KEY-----
base64でエンコードされたデータには、次のDER構造が存在します。
PrivateKeyInfo ::= SEQUENCE { version Version, algorithm AlgorithmIdentifier, PrivateKey BIT STRING } AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL }
したがって、RSA秘密鍵の場合、OIDは1.2.840.113549.1.1.1であり、PrivateKey鍵データのビットストリングとしてRSAPrivateKeyがあります。
とは対照的にBEGIN RSA PRIVATE KEY
、RSAキーを常に指定するため、キータイプOIDは含まれません。BEGIN RSA PRIVATE KEY
はPKCS#1
:
RSA秘密鍵ファイル(PKCS#1)
RSA秘密鍵PEMファイルは、RSA鍵に固有です。
次のタグで開始および終了します。
-----BEGIN RSA PRIVATE KEY----- BASE64 ENCODED DATA -----END RSA PRIVATE KEY-----
base64でエンコードされたデータには、次のDER構造が存在します。
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 genpkey -algorithm RSA -out key.pem
CRTパラメータを含むPKCS#8キーを生成します。
openssl genrsa
コマンドを使用できます。を使用openssl req
して秘密キーとcrtの両方を生成すると、最終的にPKCS#8キーになります。genpkey
マニュアルの状態The use of the genpkey program is encouraged over the algorithm specific utilities because additional algorithm options and ENGINE provided algorithms can be used.
。ただし、一部のソフトウェア(mysql
)はPKCS#1鍵のみを使用できます。PKCS#8からPKCS#1への変換は、で行うことができますopenssl rsa -in key.pem -out key.pem
。逆の変換はで行うことができますopenssl pkey -in key.pem -out key.pem
。
見てください<openssl/pem.h>
。BEGINマーカーが表示されます。
上記のリンクからコンテンツをコピーしてクイックリファレンス:
#define PEM_STRING_X509_OLD "X509 CERTIFICATE"
#define PEM_STRING_X509 "CERTIFICATE"
#define PEM_STRING_X509_PAIR "CERTIFICATE PAIR"
#define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE"
#define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST"
#define PEM_STRING_X509_REQ "CERTIFICATE REQUEST"
#define PEM_STRING_X509_CRL "X509 CRL"
#define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY"
#define PEM_STRING_PUBLIC "PUBLIC KEY"
#define PEM_STRING_RSA "RSA PRIVATE KEY"
#define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY"
#define PEM_STRING_DSA "DSA PRIVATE KEY"
#define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY"
#define PEM_STRING_PKCS7 "PKCS7"
#define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA"
#define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY"
#define PEM_STRING_PKCS8INF "PRIVATE KEY"
#define PEM_STRING_DHPARAMS "DH PARAMETERS"
#define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS"
#define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS"
#define PEM_STRING_DSAPARAMS "DSA PARAMETERS"
#define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY"
#define PEM_STRING_ECPARAMETERS "EC PARAMETERS"
#define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
#define PEM_STRING_PARAMETERS "PARAMETERS"
#define PEM_STRING_CMS "CMS"