1. ホーム
  2. openssl

[解決済み】"BEGIN RSA PRIVATE KEY" と "BEGIN PRIVATE KEY" の違いについて

2022-04-12 11:42:08

質問

こんにちは 私は、秘密鍵を .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、PrivateKey鍵データビットストリングとしてRSAPrivateKeyが存在するわけです。

とは対照的に BEGIN RSA PRIVATE KEY は常にRSAキーを指定するため、キータイプのOIDは含まれません。 BEGIN RSA PRIVATE KEYPKCS#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
}