こんにちは、.pem
ファイルから秘密鍵をインポートし、後で使用する秘密鍵オブジェクトを作成するプログラムを書いていました。直面した問題は、pem
ファイルのヘッダーが
-----BEGIN PRIVATE KEY-----
他の人が
-----BEGIN RSA PRIVATE KEY-----
私の検索を通じて、最初のものはPKCS#8
でフォーマットされていることは知っていましたが、もう一方はどのフォーマットに属しているのかわかりませんでした。
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 (p1) exponent2 INTEGER, -- d mod (q-1) coefficient INTEGER, -- (inverse of q) mod p otherPrimeInfos OtherPrimeInfos OPTIONAL }
<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"