La comparación
| Ed25519 | RSA 3072 | RSA 4096 | |
|---|---|---|---|
| Seguridad estimada | Unos 128 bits | 128 bits | Entre 128 y 192 bits |
| Archivo de clave pública | 92 bytes | 564 bytes | 736 bytes |
| Archivo de clave privada, sin frase de contraseña | 399 bytes | 2590 bytes | 3369 bytes |
| Elección de tamaño | Ninguna, siempre 256 bits | Se fija con -b | Se fija con -b |
| Lo que necesita el otro lado | OpenSSH 6.5 o posterior | Casi cualquier servidor SSH | Casi cualquier servidor SSH |
Los tamaños de archivo salen de claves que generamos con el comentario you@laptop. Las estimaciones de seguridad vienen de la RFC 8032 para ed25519 y de NIST SP 800-57 para RSA.
Lo que de verdad importa
- Menos decisiones en las que equivocarse. Una clave ed25519 tiene un solo tamaño, así que nadie puede crear una débil por accidente.
ssh-keygenignora-bcon este tipo: pedimos 4096 y obtuvimos 256. - Claves públicas cortas. Una línea que cabe en un mensaje de chat o en un archivo de configuración sin cortarse.
- Protección del archivo. Una clave sin frase de contraseña en un portátil robado queda expuesta sea cual sea su tipo. Esto importa mucho más que la diferencia entre los dos algoritmos.
Para guardar cada clave y su frase de contraseña en un solo sitio, consulta el gestor de claves SSH con bóveda cifrada.
Generar cada tipo
ssh-keygen -t ed25519 -C "you@laptop"
ssh-keygen -t rsa -b 4096 -C "you@laptop"
Sin -b, las claves RSA son de 3072 bits, el valor por defecto desde OpenSSH 8.0. Desde OpenSSH 9.5, ssh-keygen sin -t crea una clave ed25519. Consulta cómo generar una clave ed25519 para ver los pasos completos.
Tamaños de clave RSA
- Menos de 1024 bits:
ssh-keygense niega conInvalid RSA key length: minimum is 1024 bits. - 1024 bits: no la uses. Aún se puede generar, pero un servidor con un
RequiredRSASizemayor la rechaza. Ese ajuste existe desde OpenSSH 9.1 y su valor por defecto es 1024. - 2048 bits: NIST le da 112 bits de seguridad. Funciona, pero es el antiguo mínimo, así que cámbiala la próxima vez que rotes claves.
- 3072 o 4096 bits: usa una de estas si necesitas RSA.
Cuándo RSA sigue siendo la elección correcta
- Un servidor ejecuta una versión de OpenSSH anterior a la 6.5.
- Un dispositivo de red antiguo, un appliance o un sistema embebido solo menciona claves RSA en su documentación.
- Una norma de cumplimiento o un sistema en modo FIPS limita los tipos de clave que puedes usar. Consulta la lista de tu proveedor.
Puedes tener una clave de cada tipo y usar RSA solo para los hosts que lo necesiten:
Host old-server
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
Conectar con sistemas antiguos
Una clave RSA no es lo mismo que la firma que se hace con ella. Desde OpenSSH 8.8, el cliente ya no usa la antigua firma ssh-rsa, que se apoya en SHA-1, a menos que lo pidas. El mismo archivo de clave sigue funcionando con las firmas más nuevas rsa-sha2-256 y rsa-sha2-512, que OpenSSH admite desde la 7.2.
Un servidor que solo conoce el algoritmo antiguo te da este error:
Unable to negotiate with 203.0.113.10 port 22: no matching host key type found. Their offer: ssh-rsa
Para ese host concreto, y solo si no puedes actualizarlo, vuelve a activar el algoritmo antiguo:
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa user@old-server
Esto debilita la conexión, así que no lo pongas en Host *. Una clave RSA nueva no ayuda aquí, porque el problema es la firma y no la clave. Consulta también no mutual signature supported y no matching key exchange.
DSA y ECDSA
DSA ha desaparecido: OpenSSH 10.0 lo eliminó, y ssh-keygen -t dsa ahora responde unknown key type dsa. Sustituye cualquier clave DSA que aún tengas. ECDSA funciona y tiene amplio soporte, pero no te da ninguna ventaja sobre ed25519 a menos que un sistema la exija.
Comprobar las claves que tienes
for f in ~/.ssh/*.pub; do ssh-keygen -lf "$f"; done
El primer número es el tamaño y la última palabra es el tipo, por ejemplo 3072 SHA256:... you@laptop (RSA).
Preguntas
¿Es RSA 4096 más fuerte que ed25519?
Sobre el papel tiene una estimación de seguridad algo mayor, pero ambas están muy por encima de lo que hoy se puede atacar, así que no es un motivo para elegirla. El riesgo práctico es el robo del archivo de la clave privada, y ahí una frase de contraseña ayuda con cualquiera de los dos tipos.
¿Puedo convertir una clave RSA a ed25519?
No. Son tipos de clave distintos. Genera una clave ed25519 nueva, añade su clave pública a tus servidores, prueba el inicio de sesión y luego elimina la clave pública antigua.
¿Cambia algo un ordenador cuántico?
No, no entre estas dos: un ordenador cuántico lo bastante grande rompería ambas. OpenSSH 10.6 activa un tipo de clave híbrido poscuántico, creado con ssh-keygen -t mldsa44-ed25519, pero hace falta la 10.6 o posterior en ambos lados. Para el intercambio de claves, consulta la guía sobre el aviso poscuántico.
Fuentes
- ssh-keygen(1), manual de OpenBSD
- Notas de la versión OpenSSH 8.8
- Notas de las versiones de OpenSSH
- RFC 8032, EdDSA
- NIST SP 800-57 Part 1 Rev. 5