¿Cómo verificar si una clave privada SSH tiene frase de contraseña o no?

43

Digamos que tengo acceso a la parte privada de un par de claves RSA. ¿Cómo puedo verificar si esta clave tiene una frase de contraseña asociada o no?

    
pregunta kung 11.07.2016 - 13:18
fuente

4 respuestas

72

El archivo de claves tendrá un encabezado diferente si está protegido por contraseña. Aquí está la parte superior de una clave sin una frase de contraseña:

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA3qKD/4PAc6PMb1yCckTduFl5fA1OpURLR5Z+T4xY1JQt3eTM

Y aquí está la parte superior de una clave que está protegida con frase de contraseña:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,556C1115CDA822F5

AHi/3++6PEIBv4kfpM57McyoSAAaT2ECxNOA5DRKxJQ9pr2D3aUeMBaBfWGrxd/Q

Lamentablemente, eso solo funciona mirando los archivos. No conozco ninguna forma de que un servidor pueda saber si las claves que se le presentaron estaban protegidas con una frase de contraseña, que es el lugar más útil para poder aprovechar ese tipo de información.

    
respondido por el gowenfawr 11.07.2016 - 14:21
fuente
28

No siempre es tan fácil como se describe en las otras respuestas. Funciona solo con las antiguas llaves PEM. El nuevo formato openssh de las claves (generado con la opción -o , más seguro, ya que openssh-6.5) tiene el mismo aspecto si se verifican los encabezados:

$ head rsa_enc
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABCYdi7MhY
$ head rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn

La forma más fácil en este caso es ejecutar alguna operación en ellos usando ssh-keygen . Si solicita una frase de contraseña, tiene una ( o no es una clave ssh ), si no tiene una frase de contraseña:

$ ssh-keygen -yf rsa_enc
ssh-rsa AAAAB3NzaC1y...
$ ssh-keygen -yf rsa
Enter passphrase: 
    
respondido por el Jakuje 11.07.2016 - 14:51
fuente
13

La "clave RSA" es en realidad un conjunto de valores almacenados como una estructura ASN.1 en el formato binario DER estandarizado, y luego codificados en base-64 para obtener el archivo PEM final.

Una forma muy fácil de determinar si una clave está codificada o no es simplemente verificar si el encabezado ASN.1 está presente, y esto suele ser tan simple como verificar si la "clave" comienza con las letras MII como en el siguiente ejemplo:

  

----- COMIENCE LA TECLA PRIVADA DE RSA -----
MII CWwIBAAKBgQCWxk9djtgA / t7n6M8g1d2fk3exyCSu1uubpxUkoFLJBkjLYiaa
/ ...)
  eCrpRFHxhPICHI4db + I8GZ9QDmlbCN / bl3BBNNTn3w ==
  ----- CLAVE PRIVADA DE LA RSA -----

En los archivos protegidos por contraseña, toda la estructura ASN.1 se encripta, todo aparece como caracteres aleatorios.

    
respondido por el WhiteWinterWolf 11.07.2016 - 14:51
fuente
2

Las claves privadas deben estar protegidas, al intentar establecer la contraseña solo se declara si aún está protegida por contraseña. Con ssh-keygen en la clave protegida:

~/.ssh$ ssh-keygen -p -f id_rsa_password_protected
Enter old passphrase:

Y con no protegido:

~/.ssh$ ssh-keygen -p -f id_rsa_not_protected
Enter new passphrase (empty for no passphrase):

Entonces, si no está protegido con contraseña, simplemente establezca la contraseña .

    
respondido por el santiagopim 04.03.2018 - 13:52
fuente

Lea otras preguntas en las etiquetas