No puedo descifrar la clave privada aunque conozco la frase de contraseña

9

Creo que mi problema se reduce al hecho de que algo está mal con la clave, pero no puedo descifrarlo, para una mayor investigación, sin analizarlo. Pero no estoy seguro.

Estoy tratando de usar el método estándar:

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

Creo que conozco la frase de contraseña, porque cuando ingreso una incorrecta me sale:

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

" descifrar mal " es bastante claro. Ahora, cuando ingreso mi frase de contraseña aparentemente buena, regreso:

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:

También no pudo cargar la clave, pero ahora falló en el analizador asn1, nada sobre la frase de contraseña.

¿De alguna manera puedo obtener una versión sin cifrar de la clave y usar otras herramientas para ver qué está mal?

He visto algunas publicaciones que dicen que algo cambió y las posibles causas de claves aparentemente buenas no se analizan, pero todas funcionaron en una versión sin cifrar. Pero el único método que he visto para descifrar la clave es el anterior.

luk32
fuente
El nombre sugiere que el archivo puede haber sido generado por ssh-keygen. ¿Has intentado usar ssh-keygenpara descifrarlo también? ssh-keygen -p -f keyfilecambiará la frase de contraseña en un archivo de claves (sobrescribirá el archivo, así que cree primero una copia). Al especificar una frase de contraseña vacía como la nueva frase de contraseña, descifrará el archivo.
Kasperd
@kasperd Sí, dice una frase de contraseña incorrecta. Cualquier otra herramienta dice que es una frase incorrecta, excepto openssl. Pero por el comportamiento de OpenSSL creo que es bueno, no he usado la clave durante algún tiempo, pero es una de mis contraseñas "estándar", por lo que encajaría. ¿No ssh-keygenusa openssl debajo del capó?
luk32
@dawud Lo probé, pero creo que esta herramienta asume que la entrada ya está decodificada, no pide frase de contraseña y dice "encabezado demasiado largo" de inmediato. Creo que es el siguiente paso para ver qué está mal con la clave, después de obtener la versión descifrada.
luk32
1
Podría haber pedido una copia del archivo y la frase de contraseña correcta para reproducir los síntomas. Pero pude ver algunos problemas en ese enfoque. Así que solo estoy adivinando aquí, y no tengo una buena manera de probar si mis conjeturas van a funcionar de otra manera que preguntarte.
Kasperd
1
Al probar su comando de descifrado openssl en un archivo dañado deliberadamente, recibí el mismo error con una contraseña correcta e inválida. Esto me lleva a dudar de la posibilidad de que este sea un caso de que el archivo cifrado se haya dañado con el tiempo debido a errores aleatorios.
Kasperd

Respuestas:

9

Creo que su clave privada se modificó, ya que pude duplicar el mismo mensaje de error al cambiar un solo carácter en una clave protegida de frase de paso de muestra que acabo de crear.

Puede reproducir esto de la siguiente manera:

  1. Crear clave privada protegida con frase de contraseña
  2. Descifre la clave privada para asegurarse de que funciona.
  3. Cambie un solo carácter dentro del archivo que contiene la clave privada cifrada.
  4. Intenta descifrarlo ahora.
[testuser @ whitehat .ssh] $ openssl rsa -in id_rsa -out id_rsa.decrypted
Ingrese la frase de contraseña para id_rsa:
escribir clave RSA
[testuser @ whitehat .ssh] $ ls -al id_rsa *
-rw -------. 1 testuser testuser 951 24 de marzo 15:01 id_rsa
-rw-rw-r--. 1 testuser testuser 887 24 de marzo 15:02 id_rsa.decrypted
-rw-r - r--. 1 testuser testuser 236 24 de marzo 14:52 id_rsa.pub
[testuser @ whitehat .ssh] $ vim id_rsa
[testuser @ whitehat .ssh] $ openssl rsa -in id_rsa -out id_rsa.decrypted
Ingrese la frase de contraseña para id_rsa:
no se puede cargar la clave privada
139900595279688: error: 0D07207B: rutinas de codificación asn1: ASN1_get_object: encabezado demasiado largo: asn1_lib.c: 150:
139900595279688: error: 0D068066: rutinas de codificación asn1: ASN1_CHECK_TLEN: encabezado de objeto incorrecto: tasn_dec.c: 1306:
139900595279688: error: 0D07803A: rutinas de codificación asn1: ASN1_ITEM_EX_D2I: error asn1 anidado: tasn_dec.c: 381: Tipo = RSA
139900595279688: error: 04093004: rutinas rsa: OLD_RSA_PRIV_DECODE: RSA lib: rsa_ameth.c: 115:
139900595279688: error: 0D07207B: rutinas de codificación asn1: ASN1_get_object: encabezado demasiado largo: asn1_lib.c: 150:
139900595279688: error: 0D068066: rutinas de codificación asn1: ASN1_CHECK_TLEN: encabezado de objeto incorrecto: tasn_dec.c: 1306:
139900595279688: error: 0D07803A: rutinas de codificación asn1: ASN1_ITEM_EX_D2I: error de asn1 anidado: tasn_dec.c: 381: Tipo = PKCS8_PRIV_KEY_INFO
139900595279688: error: 0907B00D: rutinas PEM: PEM_READ_BIO_PRIVATEKEY: ASN1 lib: pem_pkey.c: 132:
[testuser @ whitehat .ssh] $ 

Información de la versión del SO y openssl

[testuser @ whitehat /] $ lsb_release -a
Versión 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 de Distribuidor: Científico
Descripción: Scientific Linux versión 6.2 (Carbon)
Lanzamiento: 6.2
Nombre en clave: Carbono
[testuser @ whitehat /] $ rpm -q openssl
openssl-1.0.1e-30.el6_6.5.x86_64
Daniel t.
fuente
1

Terminé aquí porque tenía el mismo problema, pero el mío fue causado por la interfaz de exportación de certificados de AWS ACM. (Los certificados de CA privados se pueden exportar con una frase de contraseña)

Algo sobre la frase de contraseña particular que utilicé ... No estoy seguro exactamente de qué causó el problema, pero probablemente fue la longitud o los símbolos utilizados.

El resultado final fue que tenía una clave con una frase de contraseña diferente / acortada a lo que esperaba.

Espero que ayude a alguien ...

cómodo hoy
fuente