Además de ssh y sshd, OpenSSH incluye ssh-keygen, que genera y convierte claves y, con -Y sign, produce firmas SSHSIG para archivos y commits de git. Los datos de esta página se comprobaron con los paquetes de Alpine 3.24.2, OpenSSH 10.3p1, enlazado con el OpenSSL 3.5.8 de la imagen. Sin -t, ssh-keygen escribe una clave Ed25519. Solo hay claves ECDSA para P-256, P-384 y P-521 (-b 224 se rechaza), no hay Ed448, y DSA ya no está: ssh-keygen -t dsa responde «unknown key type dsa». Inspecciona cualquier clave con el inspector de claves SSH.
Sin archivo de configuración, el cliente ofrece primero el intercambio de claves híbrido mlkem768x25519-sha256 y después sntrup761x25519-sha512: protección poscuántica para las claves de sesión. ssh -Q sig no enumera ningún algoritmo de firma poscuántico, así que la autenticación de host y de usuario sigue siendo clásica. RSA con SHA-1 (ssh-rsa) sigue implementado, pero no figura en las listas predeterminadas de claves de host y de claves públicas, así que con la configuración predeterminada el cliente nunca lo usa; si la otra parte no ofrece nada más reciente que ssh-rsa, hay que volver a habilitarlo explícitamente, por ejemplo con PubkeyAcceptedAlgorithms +ssh-rsa para las claves de usuario. Comprueba qué negocia un servidor con la auditoría de servidores SSH.
Una firma ECDSA en SSH no es ni DER ni r‖s en bruto: el blob es la cadena ecdsa-sha2-nistp256 seguida de una cadena que contiene r y s como mpints de SSH (RFC 5656). Por eso, convertir firmas entre SSH y X.509, JWS o WebAuthn implica volver a codificar los dos enteros. Los nonces son aleatorios —dos firmas de un mismo archivo fueron distintas—, s no se normaliza y una firma con s sustituido por n − s se verificó.
Las firmas SSHSIG (ssh-keygen -Y sign) calculan el hash del mensaje con SHA-512 por defecto; -O hashalg=sha256 es la única alternativa, y SHA-1 y SHA-384 se rechazan. El espacio de nombres indicado con -n forma parte de lo que se firma, y verificar una firma file como email falla con «namespace does not match». Los fallos se distinguen en stderr —«invalid format» para un blob dañado, «incorrect signature» para una firma válida sobre otros datos—, mientras que stdout dice «Could not verify signature.» en ambos casos. Comprueba una firma con el verificador de firmas SSH.
ssh-keygen -e -m PKCS8 exporta una clave pública como SPKI PEM y -i -m PKCS8 la vuelve a importar; -m PEM también da SPKI para ECDSA, pero PKCS#1 para RSA, y -m RFC4716 da el formato «SSH2 PUBLIC KEY». Las claves públicas Ed25519 no se pueden exportar con -e -m PKCS8 («unsupported key type ED25519»), aunque -p -m PKCS8 reescribe una clave privada Ed25519 como PKCS#8. Las claves privadas se guardan por defecto como OPENSSH PRIVATE KEY; -p -m PEM reescribe las claves ECDSA como SEC1 y las RSA como PKCS#1, y -m PKCS8 con una frase de contraseña escribe PKCS#8 cifrado.