Não é possível descriptografar a chave privada, mesmo sabendo que a senha

9

Acho que meu problema se resume ao fato de que há algo errado com a chave, mas não posso apenas descriptografá-la, para uma investigação mais aprofundada, sem analisá-la. Mas eu não tenho certeza.

Estou tentando usar o método padrão:

openssl rsa -in ./id_rsa -out ./id_rsa.decrypted

Acho que conheço a senha, porque quando digito uma incorreta, recebo:

Enter pass phrase for ./id_rsa:
unable to load Private Key
140256774473360:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:544:
140256774473360:error:0906A065:PEM routines:PEM_do_header:bad decrypt:pem_lib.c:483

" descriptografia incorreta " é bastante clara. Agora, quando introduzo minha frase secreta aparentemente boa, volto:

Enter pass phrase for ./id_rsa:
unable to load Private Key
139662870623888:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:asn1_lib.c:153:
139662870623888:error:0D068066:asn1 encoding routines:ASN1_CHECK_TLEN:bad object header:tasn_dec.c:1314:
139662870623888:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=RSA
139662870623888:error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib:rsa_ameth.c:115:
139662870623888:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:asn1_lib.c:153:
139662870623888:error:0D068066:asn1 encoding routines:ASN1_CHECK_TLEN:bad object header:tasn_dec.c:1314:
139662870623888:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=PKCS8_PRIV_KEY_INFO
139662870623888:error:0907B00D:PEM routines:PEM_READ_BIO_PRIVATEKEY:ASN1 lib:pem_pkey.c:132:

Ele também falhou ao carregar a chave, mas agora falhou no analisador asn1, nada sobre a senha.

De alguma forma, posso obter a versão não criptografada da chave e usar outras ferramentas para ver o que há de errado?

Vi algumas postagens em que algo mudou e as possíveis causas de chaves aparentemente boas falham ao analisar, mas todas elas funcionaram na versão não criptografada. Mas o único método que vi para decodificar a chave é o acima.

luk32
fonte
O nome sugere que o arquivo pode ter sido gerado por ssh-keygen. Você já tentou ssh-keygendescriptografar também? ssh-keygen -p -f keyfilealterará a senha em um arquivo de chave (substituirá o arquivo, então crie uma cópia primeiro). Ao especificar uma senha vazia como a nova, ela descriptografará o arquivo.
kasperd
@kasperd Sim, diz uma senha incorreta. Todas as outras ferramentas dizem que é uma frase incorreta, exceto o openssl. Mas, pelo comportamento do openssl, acho que é bom, não uso as chaves há algum tempo, mas é uma das minhas senhas "padrão", para que caiba. Não ssh-keygenusa openssl sob o capô?
Luk32
@dawud Eu tentei, mas acho que essa ferramenta assume que a entrada já está decodificada, não pede senha e diz "cabeçalho muito longo" imediatamente. Acho que é o próximo passo para ver o que há de errado com a chave deles, depois que eu recebo a versão descriptografada.
Luk32
1
Eu poderia ter pedido uma cópia do arquivo e a senha correta para reproduzir os sintomas. Mas pude ver alguns problemas nessa abordagem. Portanto, estou apenas adivinhando aqui e não tenho uma boa maneira de testar se minhas suposições vão funcionar além de perguntar a você.
kasperd
1
Ao testar seu comando de descriptografia openssl em um arquivo deliberadamente corrompido, recebi o mesmo erro com uma senha correta e uma senha inválida. Isso me levou a duvidar da possibilidade de o arquivo criptografado ter sido corrompido ao longo do tempo devido a bitflips aleatórios.
kasperd

Respostas:

9

Acredito que sua chave privada foi modificada, pois consegui duplicar a mesma mensagem de erro alterando um único caractere em uma chave protegida por frase secreta de exemplo que acabei de criar.

Você pode reproduzir isso da seguinte maneira -

  1. Criar chave privada protegida por frase secreta
  2. Descriptografe a chave privada para garantir que ela funcione.
  3. Altere um único caractere dentro do arquivo que contém a chave privada criptografada.
  4. Tente decifrá-lo agora.
[testuser @ whitehat .ssh] $ openssl rsa -in id_rsa -out id_rsa.decrypted
Digite a frase secreta para id_rsa:
escrevendo chave RSA
[testuser @ whitehat .ssh] $ ls -al id_rsa *
-rw -------. 1 testuser testuser 951 24 de março 15:01 id_rsa
-rw-rw-r--. 1 testuser testuser 887 24 de março 15:02 id_rsa.decrypted
-rw-r - r--. 1 testuser testuser 236 Mar 24 14:52 id_rsa.pub
[testuser @ whitehat .ssh] $ vim id_rsa
[testuser @ whitehat .ssh] $ openssl rsa -in id_rsa -out id_rsa.decrypted
Digite a frase secreta para id_rsa:
incapaz de carregar a chave privada
139900595279688: erro: 0D07207B: rotinas de codificação asn1: ASN1_get_object: cabeçalho muito longo: asn1_lib.c: 150:
139900595279688: erro: 0D068066: rotinas de codificação asn1: ASN1_CHECK_TLEN: cabeçalho de objeto inválido: tasn_dec.c: 1306:
139900595279688: erro: 0D07803A: rotinas de codificação asn1: ASN1_ITEM_EX_D2I: erro asn1 aninhado: tasn_dec.c: 381: Type = RSA
139900595279688: erro: 04093004: rotinas rsa: OLD_RSA_PRIV_DECODE: lib RSA: rsa_ameth.c: 115:
139900595279688: erro: 0D07207B: rotinas de codificação asn1: ASN1_get_object: cabeçalho muito longo: asn1_lib.c: 150:
139900595279688: erro: 0D068066: rotinas de codificação asn1: ASN1_CHECK_TLEN: cabeçalho de objeto inválido: tasn_dec.c: 1306:
139900595279688: erro: 0D07803A: rotinas de codificação asn1: ASN1_ITEM_EX_D2I: erro asn1 aninhado: tasn_dec.c: 381: Type = PKCS8_PRIV_KEY_INFO
139900595279688: erro: 0907B00D: rotinas PEM: PEM_READ_BIO_PRIVATEKEY: lib ASN1: pem_pkey.c: 132:
[testuser @ whitehat .ssh] $ 

Informações da versão do SO e openssl

[testuser @ whitehat /] $ lsb_release -a
Versão LSB:: core-4.0-amd64: core-4.0-noarch: graphics-4.0-amd64: graphics-4.0-noarch: printing-4.0-amd64: printing-4.0-noarch
ID do distribuidor: científico
Descrição: Scientific Linux release 6.2 (Carbon)
Lançamento: 6.2
Codinome: Carbono
[testuser @ whitehat /] $ rpm -q openssl
openssl-1.0.1e-30.el6_6.5.x86_64
Daniel t.
fonte
1

Acabei aqui porque tinha o mesmo problema, mas o meu foi causado pela interface de exportação de certificados do AWS ACM. (Certificados de CA privados podem ser exportados com uma senha)

Algo sobre a frase secreta específica que usei ... Não sei exatamente o que causou o problema, mas provavelmente era o comprimento ou os símbolos usados.

O resultado final foi que eu tinha uma chave com uma senha curta / diferente do que eu esperava.

Espero que ajude alguém ...

hoje
fonte