Una clave SSH ed25519-sk es una clave Ed25519 cuya operación de firma ocurre dentro de una llave de seguridad FIDO2. Se crea con ssh-keygen -t ed25519-sk, exige tocar la llave en cada inicio de sesión y solo funciona si cliente y servidor usan OpenSSH 8.2 o posterior, versión publicada en febrero de 2020.
Qué cambia una clave ed25519-sk de OpenSSH frente a una Ed25519 normal
OpenSSH admite Ed25519 desde la versión 6.5 (enero de 2014) y la variante FIDO2 ed25519-sk desde la 8.2 (febrero de 2020). La diferencia está en dónde vive el secreto. Con una Ed25519 clásica, el fichero ~/.ssh/id_ed25519 es la clave privada: quien lo copie y conozca la frase de paso entra en tus servidores.
Con ed25519-sk, la firma se calcula dentro de la llave. El fichero que ssh-keygen deja en disco, id_ed25519_sk, es un identificador (key handle) que no sirve sin el dispositivo físico. Además, cada autenticación pide presencia: un toque en la llave. Robar el portátil o el fichero ya no basta.
Lo que no cambia: la clave pública se instala igual en authorized_keys, ahora con el tipo [email protected], y los permisos esperados siguen siendo ~/.ssh en 700 y authorized_keys y ficheros de clave en 600.
Cómo generar una clave ed25519-sk con ssh-keygen paso a paso
El comando base es ssh-keygen -t ed25519-sk con la llave FIDO2 conectada; ssh-keygen pide tocarla durante la generación. Todas las opciones -O están descritas en el manual oficial de ssh-keygen.
# Clave no residente: el identificador queda en ~/.ssh/id_ed25519_sk
ssh-keygen -t ed25519-sk -C "llave-trabajo"
# Clave residente, con PIN obligatorio y etiqueta propia
ssh-keygen -t ed25519-sk -O resident -O verify-required -O application=ssh:produccion
# Instalar la clave pública en el servidor
ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub usuario@servidor
# En otro equipo: recuperar las claves residentes de la llave
ssh-keygen -K
# O cargarlas directamente en ssh-agent
ssh-add -KLas opciones que más se usan:
- -O resident: guarda la credencial dentro de la llave para recuperarla en otro equipo.
- -O verify-required: además del toque, exige el PIN de la llave en cada firma.
- -O application=ssh:nombre: distingue varias claves residentes en la misma llave; el valor debe empezar por
ssh:. - -O no-touch-required: elimina el toque, pero el servidor solo lo acepta si la línea de
authorized_keyslleva la opciónno-touch-required.
-O resident en ed25519-sk: la clave viaja dentro de la llave FIDO2
Con -O resident, la credencial se almacena en la propia llave FIDO2 y no solo en el fichero local. En un equipo nuevo basta con conectar la llave y ejecutar ssh-keygen -K, que escribe los ficheros en el directorio actual, o ssh-add -K para cargarla en el agente sin tocar el disco.
La ventaja es que no dependes del fichero de cada máquina. El riesgo es simétrico: quien tenga la llave puede extraer el identificador, así que conviene protegerla con PIN y combinar -O resident con -O verify-required. Sin -O resident, si pierdes id_ed25519_sk pierdes el acceso desde ese equipo aunque conserves la llave. Las llaves que solo implementan U2F no admiten credenciales residentes.
Qué servidores aceptan claves ed25519-sk: OpenSSH 8.2 o posterior
Un servidor acepta claves ed25519-sk si su sshd es OpenSSH 8.2 o posterior. El servidor no necesita ninguna llave conectada: solo tiene que entender el tipo [email protected]. Compruébalo antes de retirar tu clave actual:
# Versión de OpenSSH instalada en el servidor
ssh -V
# Algoritmos de clave pública que sshd acepta realmente
sudo sshd -T | grep -i pubkeyaccepted
# Línea en ~/.ssh/authorized_keys que además exige PIN
verify-required [email protected] AAAA... llave-trabajoSi en la salida de sshd -T aparece [email protected], la clave funcionará. Para exigir PIN a todos los usuarios, añade PubkeyAuthOptions verify-required en sshd_config. Un servidor que no llega a la 8.2 también es anterior a la 8.8, la versión que desactivó por defecto la firma ssh-rsa con SHA-1: es buen momento para actualizarlo. Las notas de versión de OpenSSH detallan qué llegó en cada una.
Claves ed25519-sk frente a Ed25519 en el móvil: tabla comparativa
En escritorio, ed25519-sk funciona con cualquier OpenSSH 8.2 o posterior y una llave conectada; en iOS y Android depende de que el cliente implemente FIDO2 y de cómo se conecte la llave al teléfono. La alternativa habitual en el móvil es una Ed25519 generada en el propio dispositivo.
| Qué se mide | ed25519-sk en escritorio | Ed25519 en el almacén seguro del móvil |
|---|---|---|
| Dónde está el secreto | Dentro de la llave FIDO2 | En el almacén seguro de iOS o Android |
| Qué hace falta para entrar | Llave conectada y un toque | El teléfono que contiene la clave |
| OpenSSH mínimo en el servidor | 8.2 (febrero de 2020) | 6.5 (enero de 2014) |
| Si alguien copia el fichero | Inútil sin la llave física | En termi1 la privada no sale del dispositivo |
| Usar la clave en otro equipo | Con -O resident y ssh-keygen -K | Se genera una clave distinta por dispositivo |
termi1, la terminal SSH para iOS y Android, sigue el segundo modelo: genera la clave en el móvil, la guarda en el almacén seguro del sistema y la privada nunca se envía a los servidores de termi1; la IA tampoco abre la sesión ni recibe claves. Un esquema razonable es registrar en authorized_keys la ed25519-sk del portátil y una clave por cada teléfono, y revocar solo la que se pierda. Con Mosh, la autenticación solo interviene en la conexión SSH inicial que arranca mosh-server; al pasar de wifi a datos no vuelve a pedirse, y tmux conserva lo que dejaste corriendo.
4 errores al configurar claves ed25519-sk en OpenSSH
- Servidor por debajo de OpenSSH 8.2. sshd no reconoce el tipo y rechaza la clave; mantén la anterior hasta comprobar la versión.
- Una sola llave FIDO2 registrada. Si se pierde o se rompe, pierdes el acceso. Registra dos llaves, o una llave y otra clave de respaldo.
- Borrar id_ed25519_sk de una clave no residente. Sin
-O residentno se puede recuperar desde la llave; guarda copia o genera la clave como residente. - Cerrar la sesión antigua antes de probar. Abre una segunda conexión con
ssh -i ~/.ssh/id_ed25519_sk usuario@servidorantes de tocarsshd_config.
Preguntas frecuentes
¿Qué versión de OpenSSH necesito para usar ed25519-sk?
Las claves ed25519-sk requieren OpenSSH 8.2 o posterior, publicada en febrero de 2020, tanto en el cliente que genera y usa la clave como en el servidor que la valida. La versión se comprueba con ssh -V y los algoritmos aceptados por el servidor con sshd -T.
¿Qué hace -O resident en ssh-keygen?
La opción -O resident de ssh-keygen guarda la credencial FIDO2 dentro de la llave de seguridad, de modo que puede recuperarse en otro equipo con ssh-keygen -K o cargarse en el agente con ssh-add -K. Conviene combinarla con un PIN y con -O verify-required.
¿Se puede robar una clave ed25519-sk copiando el fichero?
Una clave ed25519-sk no se puede usar copiando solo el fichero id_ed25519_sk, porque ese fichero es un identificador y la firma se realiza dentro de la llave FIDO2. Para autenticarse hace falta el dispositivo físico y, por defecto, tocarlo en cada inicio de sesión.
¿Puedo usar claves FIDO2 para SSH desde el móvil?
Usar claves FIDO2 para SSH desde iOS o Android depende de que el cliente móvil implemente ed25519-sk y de cómo se conecte la llave al teléfono. La alternativa habitual es una Ed25519 generada en el propio dispositivo y guardada en su almacén seguro, como hace termi1.