См. 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)
Файл PEM закрытого ключа RSA специфичен для ключей 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
}