Ir al contenido principal

En ocasiones, cuando explico cómo configurar el sistema de autenticación por clave pública de SSH, me preguntan qué es mejor: las claves RSA o las DSA. En los siguientes párrafos intentaré responder a esa pregunta. Antes de entrar en materia, debo aclarar que, aunque tengo cierta experiencia en redes LAN Ethernet y redes TCP/IP, mis conocimientos sobre criptografía son, en el mejor de los casos, de aficionado. El siguiente análisis se basa en investigaciones en Internet, algunas de las cuales son contradictorias y, como ocurre con todo lo relacionado con Internet, algunos enlaces son más fiables que otros.

En primer lugar, ¿qué son las claves RSA y DSA?

El DSA (Digital Signature Algorithm) es un estándar del Gobierno de los Estados Unidos diseñado por la NSA para las firmas digitales. Se deriva del algoritmo de firma ElGamal. Su seguridad se basa en la dificultad de resolver ciertos tipos de funciones logarítmicas. Solo se puede utilizar para firmas digitales.

El nombre RSA proviene de las iniciales de los autores, Ron Rivest, Adi Shamir y Leonard Adleman, quienes publicaron por primera vez el algoritmo. Se basa en la dificultad de factorizar números grandes. A diferencia del DSA, el RSA puede utilizarse para cifrar un mensaje completo.

Tengo entendido que resolver los problemas logarítmicos y de factorización es igual de difícil, pero he encontrado algunas referencias que afirman que el problema logarítmico es más difícil (también he encontrado referencias que dicen que son igual de difíciles).

Cosas que no creo que tengan importancia, pero que quizá hayas oído o puedas oír en el futuro:

  1. El DSA es más rápido a la hora de firmar que el RSA, pero el RSA es más rápido durante la fase de verificación; dado que la autenticación requiere ambas fases, la diferencia no tiene importancia.
  2. Como he dicho anteriormente, DSA solo se puede utilizar para la autenticación, mientras que RSA se puede utilizar tanto para la autenticación como para cifrar un mensaje. Sin embargo, SSH solo utiliza las claves para la autenticación, por lo que, una vez más, la diferencia no tiene importancia.
  3. Para una misma longitud de clave, DSA generará un archivo de firma más pequeño. Sin embargo, dado que cada clave ocupará un bloque de disco, esto tampoco tiene importancia.
  4. Las claves DSA estaban limitadas originalmente a 1024 bits, pero ya no es así.
  5. Busqué en la «Base de datos nacional de vulnerabilidades» los términos «clave y DSA» y «clave y RSA», y encontré dos vulnerabilidades relacionadas con claves DSA y cinco relacionadas con claves RSA. Por lo que sé, todas estas vulnerabilidades se han solucionado en las últimas versiones de OpenSSL/OpenSSH, que ahora forman parte del Paquete de seguridad de Internet para OpenVOS.

Argumentos a favor de la DSA:

  1. DSA solo se puede utilizar con el protocolo SSH 2, mientras que RSA se puede utilizar con los protocolos 1 y 2 (véase «SSH 2» frente a «OpenSSL y OpenSSH versión 2»). El protocolo 1 presenta algunos defectos de diseño importantes y ha sido sustituido por la versión 2 del protocolo. Considero que esto es un motivo para inclinarme ligeramente por el uso de claves DSA, una especie de protección integrada frente al uso del protocolo antiguo y obsoleto.

Argumentos a favor de RSA:

  1. Un generador de números aleatorios defectuoso revelará bits de la clave DSA (no me preguntes cómo).
  2. El sitio web openssh.org no parece pronunciarse sobre cuál es la mejor opción, pero las versiones más recientes de ssh-keygen crean una clave RSA si no se especifica el tipo.
  3. Parece que hay más RFC (y más recientes) que hacen referencia a las claves RSA que a las claves DSA.

Algunas comparaciones (el tamaño de los archivos incluye texto que no forma parte de la clave):

Hora de creación del DSA Hora de creación de la RSA Bytes DSA Bytes RSA DSA.pub bytes RSA.pub bytes
1024 bits   1 segundo   1 segundo   736   951   610  230
2048 bits   8 segundos   2 segundos  1264  1743  1122  402
4096 bits  50 segundos  25 segundos  2304  3311  2146  742

 

Independientemente de la clave que utilices, lo realmente importante es la longitud de la clave. Dada la situación actual, recomendaría una longitud de clave de 2048. Puede parecer excesivo hoy en día, pero no estoy tan seguro de que siga pareciéndolo dentro de cinco años.

En cuanto al tipo de clave que conviene utilizar, me inclino por las claves RSA.