Différences entre la clé privée "BEGIN RSA" et la clé privée "BEGIN""

Salut j'écrivais un programme qui importe des clés privées d'un fichier .pem et crée un objet clé privée pour l'utiliser plus tard.. le problème que j'ai rencontré est que certains pem d'en-tête de fichiers commencent par

-----BEGIN PRIVATE KEY-----

alors que d'autres commencent par

-----BEGIN RSA PRIVATE KEY-----

grâce à ma recherche, je savais que les premiers étaient PKCS#8 formaté, mais je ne pouvais pas savoir à quel format l'autre appartient.

95
demandé sur jww 2013-11-19 11:08:02

2 réponses

voir https://polarssl.org/kb/cryptography/asn1-key-structures-in-der-and-pem (rechercher sur la page" BEGIN RSA PRIVATE KEY") ( lien d'archive pour la postérité, juste au cas où).

BEGIN RSA PRIVATE KEY est PKCS#1 et est juste une clé RSA. Il s'agit essentiellement de l'objet clé de PKCS#8, mais sans Identificateur de version ou d'algorithme. BEGIN PRIVATE KEY est PKCS#8 et indique que le type de clé est inclus dans données de la clé elle-même. Du lien:

les données encodées PKCS#8 non cryptées commencent et se terminent par les tags:

-----BEGIN PRIVATE KEY-----
BASE64 ENCODED DATA
-----END PRIVATE KEY-----

dans les données codées de base64, la structure DER suivante est présente:

PrivateKeyInfo ::= SEQUENCE {
  version         Version,
  algorithm       AlgorithmIdentifier,
  PrivateKey      BIT STRING
}

AlgorithmIdentifier ::= SEQUENCE {
  algorithm       OBJECT IDENTIFIER,
  parameters      ANY DEFINED BY algorithm OPTIONAL
}

ainsi, pour une clé privée RSA, L'IO est 1.2.840.113549.1.1.1 et il y a une clé RSAPrivateKey comme chaîne de bits de données de clé PrivateKey.

par opposition à BEGIN RSA PRIVATE KEY , qui spécifie toujours une clé RSA et n'inclut donc pas un type de clé OID. BEGIN RSA PRIVATE KEY est PKCS#1 :

fichier de Clé Privée RSA (PKCS#1)

le fichier PEM de clés privées RSA est spécifique aux clés RSA.

il commence et se termine avec les étiquettes:

-----BEGIN RSA PRIVATE KEY-----
BASE64 ENCODED DATA
-----END RSA PRIVATE KEY-----

dans les données codées de base64, la structure DER suivante est présente:

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
}
117
répondu Jason C 2014-11-06 19:34:56

regardez <openssl/pem.h> . Il donne des marqueurs de début possibles.

copier le contenu à partir du lien ci-dessus pour une référence rapide:

#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"
13
répondu vishnu viswanath 2018-09-07 04:44:40