Solución:
Vaya con RSA.
DSA es más rápido para la generación de firmas pero más lento para la validación, más lento cuando se cifra pero más rápido cuando se descifra y la seguridad se puede considerar equivalente en comparación con una clave RSA de la misma longitud de clave. Ese es el chiste, ahora alguna justificación.
La seguridad del algoritmo RSA se basa en el hecho de que se sabe que la factorización de números enteros grandes es “difícil”, mientras que la seguridad DSA se basa en el problema del logaritmo discreto. En la actualidad, el algoritmo más rápido conocido para factorizar números enteros grandes es el tamiz de campo numérico general, también el algoritmo más rápido para resolver el problema del logaritmo discreto en campos finitos módulo un primo grande p como se especifica para DSA.
Ahora bien, si la seguridad puede considerarse igual, por supuesto favoreceríamos el algoritmo que es más rápido. Pero, de nuevo, no hay un ganador claro.
Puede echar un vistazo a este estudio o, si tiene OpenSSL instalado en su máquina, ejecute openssl speed
. Verá que DSA funciona más rápido al generar una firma, pero mucho más lento al verificar una firma de la misma longitud de clave. La verificación es generalmente lo que desea que sea más rápido si se trata, por ejemplo, de un documento firmado. La firma se genera una vez, por lo que está bien si esto lleva un poco más de tiempo, pero los usuarios finales pueden verificar la firma del documento con mucha más frecuencia.
Ambos admiten algún tipo de método de cifrado, RSA listo para usar y DSA con El Gamal. DSA es generalmente más rápido en el descifrado pero más lento en el cifrado, con RSA es al revés. Nuevamente, desea que el descifrado sea más rápido aquí porque un documento cifrado puede descifrarse muchas veces.
En términos comerciales, RSA es claramente el ganador, los certificados RSA comerciales se implementan mucho más ampliamente que los certificados DSA.
Pero guardé el argumento asesino para el final: man ssh-keygen
dice que una clave DSA debe tener exactamente 1024 bits de longitud para ser compatible con FIPS 186-2 de NIST. Entonces, aunque en teoría son posibles claves DSA más largas (FIPS 186-3 también las permite explícitamente), todavía está restringido a 1024 bits. Y si tomas las consideraciones de este [article], ya no estamos seguros con 1024 bits para RSA o DSA.
Así que hoy, está mejor con una clave RSA 2048 o 4096 bit.
Ahora mismo la pregunta es un poco más amplia: RSA vs. DSA vs. ECDSA vs. Ed25519. Entonces:
Una presentación en BlackHat 2013 sugiere que se han logrado avances significativos en la solución de los problemas de complejidad de los cuales la fuerza de DSA y algunos otros algoritmos se fundan, por lo que pueden ser matemáticamente roto muy pronto. Además, el ataque también puede ser posible (pero más difícil) de extender a RSA.
En su lugar, la presentación sugiere utilizar criptografía de curva elíptica. Los algoritmos ECC admitidos por OpenSSH son ECDSA y, desde OpenSSH 6.5, Ed25519.
OpenSSH solo admite curvas NIST para ECDSA y, según este estudio, esas curvas parecen realmente sospechosas Puertas traseras de la NSA. Y si la NSA ya puede descifrarlo, entonces no será tan difícil de descifrar para otra persona como lo sería una curva adecuada. Ed25519 es lo mismo pero con una mejor curva, por lo que es la apuesta más segura contra el algoritmo subyacente matemáticamente roto.
También, DSA y ECDSA tienen una propiedad desagradable: requieren un parámetro generalmente llamado k ser completamente aleatorio, secreto y único. En la práctica, eso significa que si se conecta a su servidor desde una máquina con un generador de números aleatorios deficiente y, por ejemplo, el mismo k pasa a ser utilizado dos veces, un observador del tráfico puede averiguar su clave privada. (fuente: Wikipedia sobre DSA y ECDSA, también esto).
La conclusión es:
- Nunca use DSA o ECDSA.
- Ed25519 es probablemente el más sólido matemáticamente (y también el más rápido), pero aún no cuenta con un amplio respaldo. Como beneficio adicional, tiene un cifrado más fuerte (protección por contraseña) de la clave privada de forma predeterminada que otros tipos de claves.
- RSA es la mejor opción si no puede utilizar Ed25519.
En SSH, en el lado del cliente, la elección entre RSA y DSA no importa mucho, porque ambos ofrecen una seguridad similar para el mismo tamaño de clave (use 2048 bits y será feliz).
Históricamente, la versión 1 del protocolo SSH solo admitía claves RSA. Cuando se definió la versión 2, RSA todavía estaba patentado, por lo que se agregó el soporte de DSA, de modo que se pudiera realizar una implementación de código abierto libre de patentes. La patente de RSA expiró hace más de 10 años, por lo que ahora no hay que preocuparse.
Teóricamente, en algunas situaciones muy específicas, puede tener un problema de rendimiento con uno u otro: si el servidor es una máquina muy pequeña (digamos, un i486), preferirá clientes con claves RSA, porque verificar una firma RSA es menos computacionalmente costoso que verificar una firma DSA. Por el contrario, una firma DSA es más corta (normalmente 64 bytes frente a 256), por lo que si tiene muy poco ancho de banda, preferiría DSA. De todos modos, tendrá dificultades para detectar esos efectos, y mucho menos para encontrarlos importantes.
Sobre el servidor, se prefiere una clave DSA, porque entonces el intercambio de claves utilizará una clave Diffie-Hellman transitoria, lo que abre el camino para “Perfect Forward Secrecy” (es decir, si un delincuente roba la clave privada del servidor, aún no puede descifrar las conexiones pasadas que habría grabado).