Aller au contenu
ecdsa.com
Python cryptographycryptography (Python)

Message d’erreur

Could not deserialize key data. The data may be in an incorrect format, it may be encrypted with an unsupported algorithm, or it may be an unsupported key type (e.g. EC curves with explicit parameters).

Également affiché sous la forme

  • ValueError: Could not deserialize key data. The data may be in an incorrect format, it may be encrypted with an unsupported algorithm, or it may be an unsupported key type (e.g. EC curves with explicit parameters). Details: ASN.1 parsing error: short data (needed at least 48 additional bytes)
  • Could not deserialize key data. The data may be in an incorrect format, the provided password may be incorrect, it may be encrypted with an unsupported algorithm, or it may be an unsupported key type (e.g. EC curves with explicit parameters).
  • ValueError: ('Could not deserialize key data. The data may be in an incorrect format, it may be encrypted with an unsupported algorithm, or it may be an unsupported key type (e.g. EC curves with explicit parameters).', [<OpenSSLError(code=503841036, lib=60, reason=524556, reason_text=unsupported)>

Vérifié sur plusieurs versions : cryptography 45.0 et les versions ultérieures ajoutent « Details: … » (par exemple « ASN.1 parsing error: short data »). Les versions 43 et 44 lèvent le texte sous forme de tuple avec des objets d’erreur OpenSSL et ajoutent « the provided password may be incorrect » à la phrase (et emploient aussi ce message pour les mots de passe erronés) ; les versions 36 à 42 lèvent la forme tuple sans cette mention.

Python cryptography — ValueError from load_pem_private_key / load_der_private_key / load_der_public_key

Ce que cela signifie

La bibliothèque cryptography a trouvé des données de clé qu’elle n’a pas pu transformer en objet clé. Pour une entrée PEM, les lignes d’encadrement étaient correctes (sinon vous verriez « Unable to load PEM file ») : le problème vient donc du DER qu’elles encadrent. Il est tronqué, sa structure n’est pas celle qu’attend le chargeur, ou il décrit une clé que cryptography refuse de charger – des clés EC avec des paramètres de courbe explicites, ou des clés chiffrées avec un algorithme qu’elle ne prend pas en charge. Les versions récentes ajoutent « Details: … » avec la raison ASN.1 de bas niveau.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Vérifier d’abord la clé avec OpenSSL

    Si `openssl asn1parse` échoue déjà, le fichier est endommagé : procurez-vous une nouvelle copie. Si OpenSSL le charge mais pas cryptography, examinez l’encodage de la courbe ou l’algorithme de chiffrement.

    bash
    openssl asn1parse -in key.pem | head -20     # does the DER parse at all?
    openssl pkey -in key.pem -noout -text | head  # private key: type, curve, size
    openssl pkey -pubin -in pub.pem -noout -text   # public key
  2. 2.

    Utiliser le chargeur adapté à la clé

    Choisissez entre les chargeurs PEM, DER et OpenSSH d’après les données elles-mêmes, et utilisez les chargeurs de clés publiques pour les clés publiques.

    python
    from cryptography.hazmat.primitives import serialization
    
    def load_any_private_key(data: bytes, password: bytes | None = None):
        if data.lstrip().startswith(b"-----BEGIN OPENSSH PRIVATE KEY-----"):
            return serialization.load_ssh_private_key(data, password)
        if data.lstrip().startswith(b"-----BEGIN"):
            return serialization.load_pem_private_key(data, password)
        return serialization.load_der_private_key(data, password)
  3. 3.

    Convertir les paramètres explicites en courbe nommée

    OpenSSL 3 écrit par défaut les clés EC avec des courbes nommées : réexporter la clé une seule fois corrige donc les clés à paramètres explicites pour toutes les bibliothèques.

    bash
    # Re-encode an EC key with a named curve instead of explicit parameters
    openssl pkey -in explicit.pem -out named.pem
    openssl ec -in named.pem -param_out -noout -text | grep "ASN1 OID"   # e.g. prime256v1

Erreurs associées

Parcourir toute la base de données des erreurs de signature