Aller au contenu
ecdsa.com

PKCS #8

Le conteneur de clé privée indépendant de l’algorithme (PrivateKeyInfo, RFC 5208 ; OneAsymmetricKey, RFC 5958), stocké en PEM sous la forme -----BEGIN PRIVATE KEY----- ou, s’il est protégé par mot de passe, -----BEGIN ENCRYPTED PRIVATE KEY-----.
Autres graphiesPKCS#8PrivateKeyInfoBEGIN PRIVATE KEYOneAsymmetricKey

PrivateKeyInfo est une SEQUENCE composée d’une version, du privateKeyAlgorithm (un AlgorithmIdentifier), du champ privateKey de type OCTET STRING et d’attributs facultatifs ; la chaîne d’octets contient la clé propre à l’algorithme (une RSAPrivateKey PKCS #1, une ECPrivateKey SEC 1, une graine Ed25519 de 32 octets enveloppée selon la RFC 8410, une graine ML-DSA ou une clé ML-DSA développée). La version 2 de la RFC 5958 ajoute une clé publique facultative.

EncryptedPrivateKeyInfo l’enveloppe dans un chiffrement fondé sur un mot de passe, aujourd’hui PBES2 (RFC 8018). OpenSSL 3.6 écrit du PBES2 avec PBKDF2-HMAC-SHA256 et AES-256-CBC lorsqu’on lui demande de chiffrer ; les clés plus anciennes peuvent utiliser PBES1 avec DES ou RC2, que les bibliothèques modernes refusent.

Comme il nomme l’algorithme, PKCS #8 est le format qu’attendent la plupart des bibliothèques : OpenSSL 3 l’écrit par défaut, et PKCS8EncodedKeySpec de Java, x509.ParsePKCS8PrivateKey de Go, createPrivateKey de Node et l’import pkcs8 de WebCrypto l’utilisent tous. Convertissez les autres formats avec openssl pkcs8 -topk8 -nocrypt ou openssl pkey.

Normes et références

Tous les termes