¿Cuáles son las mejores prácticas de ssh-keygen?

79

La mayoría de los usuarios simplemente escribirían ssh-keygen y aceptarían lo que se les da de forma predeterminada.

¿Pero cuáles son las mejores prácticas para generar ssh claves con ssh-keygen ?

Por ejemplo:

  • Use -o para el formato de clave OpenSSH en lugar del antiguo formato PEM (OpenSSH 6.5 introdujo esta característica hace casi 3 años en 2014-01-30 )

  • ¿Cómo se debe calcular cuántas rondas de KDF para usar con -a ?

  • ¿Debería usarse -T para probar la seguridad de los primos candidatos? ¿Qué valor -a usar con esto?

  • Para los diferentes tipos de clave, ¿cuáles son los tamaños mínimos de bits -b recomendados?

  • etc ... (hay un conjunto de opciones alucinante en página de manual ).

pregunta Tom Hale 24.11.2016 - 06:17
fuente

4 respuestas

76

Recomiendo el artículo Secure Secure Shell , que sugiere:

ssh-keygen -t ed25519 -a 100

Ed25519 es un esquema EdDSA con claves muy pequeñas (tamaño fijo), introducido en OpenSSH 6.5. Estos tienen una complejidad similar a RSA a 4096 bits gracias a la criptografía de curva elíptica (ECC). La opción -a 100 especifica 100 rondas de derivaciones clave, lo que dificulta la fuerza bruta de la contraseña de tu clave.

Sin embargo, Ed25519 es un algoritmo clave bastante nuevo con adopción incompleta, por lo que es posible que no esté disponible en todos servidores Para aquellos, genere una clave RSA de 4096 bits:

ssh-keygen -t rsa -b 4096 -o -a 100

(Una nota sobre la opción -o , ya que ahora falta (!) en la página de manual ssh-keygen : Esto dicta el uso del nuevo formato OpenSSH para almacenar la clave en lugar del valor predeterminado anterior, > PEM . Ed25519 ya requiere esto, por lo que no necesitamos indicarlo explícitamente. -t ed25519 . -o requiere el cliente OpenSSH v6.5 +, por lo que es posible que deba omitirlo, pero es mejor mantenerlo por su "mayor resistencia al descifrado de contraseñas de fuerza bruta" (como se señaló en las páginas de manual anteriores). a href="https://security.stackexchange.com/questions/143114/what-is-the-difference-between-pem-format-to-dsa-rsa-ecc-might-i-confuse-pem-w/ 143124 # 143124 "title=" ¿Cuál es la diferencia entre el formato PEM [... y el formato OpenSSH]? (¿Puedo confundir PEM con estos)? "> Esta respuesta para obtener más detalles.)

No considere el otro nuevo algoritmo ECC llamado ECDSA . Se considera sospechoso (tiene debilidades conocidas y desde que el gobierno de los Estados Unidos ha estado involucrado en su desarrollo, puede estar comprometido más allá de eso) . Ed25519 fue desarrollado sin ninguna participación gubernamental conocida.

Manténgase alejado de las teclas DSA ("ssh-dss"): no son solo sospechosas, DSA es inseguro .

    
respondido por el Adam Katz 30.11.2016 - 23:17
fuente
15
  

La mayoría de los usuarios simplemente escribirían ssh-keygen y aceptarían lo que se les da de forma predeterminada.

Sí. Para hacer una seguridad para las personas, tiene que ser simple. Por lo tanto, la opción predeterminada debe ser segura, compatible y rápida. Puede proporcionar alternativas, pero el valor predeterminado debería ser "lo suficientemente bueno" para aquellos a quienes no les importa. Por lo tanto, RSA (2048) en el antiguo formato PEM es el predeterminado por el momento.

  
  • Use -o para el formato de clave OpenSSH en lugar del antiguo formato PEM (OpenSSH 6.5 introdujo esta característica hace casi 3 años en el 2014-01-30)
  •   

Tres años no es nada. Muchos de los contenedores lograron evolucionar durante estos años, pero SSH está aquí por más de 20 años y todavía necesita tratar con clientes mayores. El nuevo formato OpenSSH aún no se ha adoptado ni se admite ampliamente.

  
  • ¿Cómo se debe calcular cuántas rondas de KDF se utilizarán con -a ?
  •   

Depende del caso de uso. Crear su clave para su repo de "cosas" en Github será diferente a crear una clave en su agencia nacional favorita como autoridad de certificación o para acceder a documentos súper secretos en un servidor dedicado.

Como se señaló, esto es solo para el nuevo formato, que aún no se usa ampliamente y aumenta el tiempo para descifrar la clave. El número predeterminado de rondas es 16 (sería bueno verlo documentado en algún lugar). Más información en la pregunta sobre criptografía .

  
  • ¿Debería usarse -T para probar la seguridad de los primos candidatos? ¿Qué valor -a usar con esto?
  •   

No. Se utiliza para generar primos ( /etc/ssh/moduli ) para el intercambio de claves DH. No se utiliza de ninguna manera para generar claves SSH. La forma de generar y probar el archivo moduli se explica en el capítulo separado MODULI GENERATION de la página del manual para ssh-keygen .

  
  • Para los diferentes tipos de clave, ¿cuáles son los tamaños mínimos recomendados -b bit ?
  •   

Esto no es específico de SSH, pero el NIST recomienda los tamaños de clave en este documento , página 12 (por 2015):

RSA (2048 bits)
ECDSA (Curve P-256)

El Ed25519 tiene un tamaño fijo, por lo que el parámetro -b se ignora.

    
respondido por el Jakuje 25.11.2016 - 22:46
fuente
3

Aquí hay un resumen para Ed25519 basado en los valores recomendados: (sin frase de contraseña)

ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -q -N ""

Otro para RSA:

ssh-keygen -t rsa -b 4096 -o -a 100 -f ~/.ssh/id_rsa -q -N ""
  • -N : Nueva frase de contraseña
  • -q : Silencio ssh-keygen
respondido por el Yassine El Badaoui 13.10.2017 - 08:15
fuente
-2

Para protección adicional, use chattr en esas teclas, por ejemplo. sudo chattr + /home/"username"/.ssh/id_rsa.pub (También en / etc / passwd así como / etc / shadow etc)

    
respondido por el user192494 29.11.2018 - 21:40
fuente

Lea otras preguntas en las etiquetas