Pular para o conteúdo
ecdsa.com
Python cryptographyPython (cryptography)

Mensagem de erro

Incorrect password, could not decrypt key

Também aparece como

  • ValueError: Incorrect password, could not decrypt key
  • Bad decrypt. Incorrect password?

Texto por versão (conferido em cada uma): 45.0 e posteriores, “Incorrect password, could not decrypt key”; 43 e 44 relatam uma senha errada como “Could not deserialize key data… the provided password may be incorrect…”; 42 e anteriores, “Bad decrypt. Incorrect password?”.

Python cryptography — ValueError from load_pem_private_key / load_der_private_key / pkcs12.load_key_and_certificates

O que significa

A chave está criptografada, e a biblioteca cryptography tentou descriptografá-la com a senha que você forneceu, mas a descriptografia falhou. Chaves privadas criptografadas não trazem nenhuma “dica de senha” — o único sinal é que os bytes descriptografados não formam uma chave válida —, por isso esta mensagem sempre significa que os bytes que você passou não são a frase secreta usada na criptografia.

Por que acontece

Como corrigir

  1. 1.

    Ler exatamente os bytes da frase secreta

    Remova apenas as quebras de linha, nunca outros espaços em branco, e mantenha a frase secreta em bytes da origem até a função de carregamento.

    python
    from pathlib import Path
    
    passphrase = Path("/run/secrets/key_passphrase").read_bytes().rstrip(b"\r\n")
    key = serialization.load_pem_private_key(pem, password=passphrase)
  2. 2.

    Confirmar a frase secreta fora do código

    Se o OpenSSL aceita a frase secreta digitada à mão, mas seu código falha, a diferença está na forma como o código a lê (quebra de linha, codificação). Se o OpenSSL também falha, a frase secreta está simplesmente errada.

    bash
    # Prompts for the passphrase; "bad decrypt" means the passphrase is wrong, not the file
    openssl pkey -in encrypted.pem -noout && echo "passphrase OK"
    printf '%s' "$KEY_PASSPHRASE" | wc -c    # length without a trailing newline

Erros relacionados

Ver toda a base de erros de assinatura