Generador de Claves SSH

Genera un par de claves SSH (Ed25519 o RSA 2048/4096) enteramente en tu navegador, clave pública OpenSSH + clave privada PEM. Nunca se sube, jamás.

🌐 English

🔒 Privado por diseño: todo se genera localmente en tu navegador; nada se sube nunca a ningún servidor.

Cómo generar un par de claves SSH

  1. Elige un tipo de clave: Ed25519 (recomendado para claves nuevas), RSA de 2048 bits, o RSA de 4096 bits.
  2. Pulsa el botón. Se genera al instante una clave pública y su correspondiente clave privada, justo en esta pestaña del navegador.
  3. Copia la sección de CLAVE PÚBLICA donde se espere una clave pública, el archivo ~/.ssh/authorized_keys de un servidor, o la página de configuración de claves SSH de un host de Git.
  4. Copia la sección de CLAVE PRIVADA en un archivo local (sin extensión de archivo, p. ej. id_ed25519) y mantenla en secreto. En Linux/macOS, ejecuta también chmod 600 sobre ese archivo: SSH se niega a usar un archivo de clave privada que otros usuarios de la máquina puedan leer.

Sin instalación, sin cuenta, y (de forma crítica para algo tan sensible como esto) sin subida. Todo ocurre dentro de tu propia pestaña del navegador.

Por qué la generación del lado del cliente es el único diseño defendible para esto

Una clave privada SSH no es solo un dato, es la credencial que demuestra que eres tú a todo servidor que confía en tu clave pública. Si un sitio web “genera una clave SSH” calculando esa clave privada en su propio servidor y te la devuelve, la clave existió en una máquina fuera de tu control antes de que la vieras siquiera. Ese operador de servidor podría registrarla, guardarla en caché, o simplemente tener un fallo que la deje en un archivo temporal, y no tendrías forma de saberlo, porque confiar en esa afirmación es todo lo que tendrías.

Esta herramienta se salta la cuestión por completo. Ambos tipos de clave se generan usando librerías criptográficas ejecutándose como JavaScript plano dentro de tu propia pestaña del navegador: @noble/curves, una librería auditada y con mínimas dependencias, para Ed25519, y la propia Web Crypto API integrada del navegador para RSA. Ninguna hace jamás una petición de red. No hay ningún servidor por el que pase tu clave privada, porque no interviene ningún servidor en generarla en absoluto, es matemáticamente imposible que una clave que esta herramienta crea haya tocado nada que no sea tu propio dispositivo.

Ed25519 frente a RSA

Si nada te obliga a lo contrario, Ed25519 es la opción correcta por defecto.

Verificando que los formatos de clave se implementaron correctamente

Codificar a mano una clave SSH desde cero significa construir el “formato de cable” binario exacto que espera OpenSSH, y equivocar sutilmente un detalle como la convención de byte cero inicial “mpint” de SSH produciría una clave que parece plausible pero que en silencio no funciona (o peor, se importa de forma incorrecta). En lugar de confiar en eso solo a partir de una especificación, ambos formatos se comprobaron contra herramientas reales e independientes antes de publicarse: la codificación de clave privada de una clave Ed25519 generada se analizó con openssl pkey -text y su clave pública derivada se comprobó con ssh-keygen -y; se repitió la misma comprobación de dos herramientas con una clave RSA-2048 real, confirmando que el manejo de byte cero inicial del módulo coincidía exactamente con lo que produce el propio ssh-keygen. Cada clave que genera esta herramienta también está cubierta por una prueba automatizada que realiza un ciclo criptográfico genuino (firmar datos con la clave privada generada y verificarlos con la clave pública generada) así que la comprobación se ejecuta en cada clave individual, no solo en el ejemplo usado durante el desarrollo.

Tus claves nunca salen de tu dispositivo

Cada byte de ambas claves, pública y privada, se produce localmente, usando la propia fuente de números aleatorios de tu navegador (crypto.getRandomValues por debajo, el mismo generador criptográficamente seguro usado para claves Web Crypto y para el propio TLS), nunca Math.random(), que no es lo bastante seguro para nada criptográfico. Nada sobre tu clave, ni siquiera el hecho de que generaste una, se transmite, registra ni almacena en ningún sitio por parte de este sitio.

Usos habituales

Cómo funciona, en imágenes

Captura de pantalla de la herramienta Generador de Claves SSH con Key type en Ed25519 (recommended, modern and fast)
Generador de Claves SSH en pleno proceso: Key type en Ed25519 (recommended, modern and fast).
Captura de pantalla del resultado de Generador de Claves SSH mostrando la salida generada «=== PUBLIC KEY (OpenSSH format) === ssh-ed25519 …»
El resultado final: la salida generada «=== PUBLIC KEY (OpenSSH format) === ssh-ed25519 …». El enlace de descarga es una URL blob local: el archivo nunca sale de tu dispositivo.

Preguntas frecuentes

¿Por qué debería generar una clave SSH en mi navegador en lugar de en un sitio web "generador de claves SSH" del lado del servidor?

Una clave privada SSH ES tu credencial de acceso a un servidor, quien la calcule efectivamente la posee, aunque sea brevemente. Un generador del lado del servidor tiene que crear tu clave privada en su propio backend y enviártela después, lo que significa que existió en una máquina que no controlas antes de que la vieras siquiera (y puede seguir estando en un registro, un archivo temporal, o en memoria ahí). La generación del lado del cliente es la única versión de esta herramienta que puede afirmar honestamente que tu clave privada nunca se transmitió a ningún sitio, porque es matemáticamente imposible que lo haya hecho, la clave la genera JavaScript ejecutándose en tu propia pestaña del navegador, usando la aleatoriedad de tu propio dispositivo, y nada de ella se envía jamás por la red.

¿Qué tipo de clave debería elegir, Ed25519 o RSA?

Ed25519 (el valor por defecto) es la recomendación moderna para claves nuevas, es más rápida de generar, produce una clave pública mucho más corta, y se considera al menos tan segura como RSA-2048 según el consenso criptográfico actual. Toda versión de OpenSSH desde 2014 y todo host de Git importante (GitHub, GitLab, Bitbucket) la soporta. Elige RSA solo si necesitas específicamente conectar a un servidor antiguo o dispositivo embebido cuya implementación SSH sea anterior al soporte de Ed25519, RSA de 2048 bits es la base ampliamente compatible, RSA de 4096 bits cambia un intercambio de conexión más lento por un margen de seguridad mayor.

¿Se verificó realmente que el formato de la clave funciona con herramientas SSH reales, o podría estar sutilmente equivocado?

Verificado de forma concreta, no asumido. Se usaron `openssl` y `ssh-keygen` de esta misma máquina (dos implementaciones externas completamente independientes) para comprobar ambos formatos. Una clave Ed25519 generada por esta herramienta se pasó por `openssl pkey -text` (que devolvió exactamente los mismos bytes públicos/privados) y luego por `ssh-keygen -y` (cuya clave pública derivada coincidió byte a byte con la salida de esta herramienta); se repitió el mismo proceso con un par de claves RSA-2048 real, incluida la regla de codificación de byte cero inicial "mpint" que un codificador de claves SSH hecho a mano puede equivocar sutilmente con facilidad. Cada clave generada también pasa un conjunto de pruebas automatizadas que realiza un ciclo real de firma con clave privada / verificación con clave pública usando la propia Web Crypto API del navegador (para RSA) y vuelve a derivar la clave pública desde la semilla de la clave privada (para Ed25519).

¿Esto soporta una frase de contraseña para cifrar la clave privada?

No, actualmente no. Cifrar una clave privada en formato OpenSSH con una frase de contraseña usa un esquema específico de derivación de clave y cifrado que necesitaría el mismo nivel de verificación externa independiente que ya recibió la generación de clave principal de esta herramienta, en lugar de enviar una capa de cifrado no verificada para algo tan sensible como una clave privada, esta herramienta genera una clave privada sin cifrar y lo dice claramente. Si quieres protección con frase de contraseña, guarda la clave privada generada en un archivo y ejecuta `ssh-keygen -p -f <archivo>` localmente para añadir una después.

La clave pública no tiene comentario (sin "usuario@host" al final), ¿puedo añadir uno?

Sí. Un comentario en una clave pública SSH es solo una etiqueta de texto plano sin ningún efecto criptográfico, existe solo para ayudarte a recordar qué clave es cuál. Simplemente escribe lo que quieras (p. ej. `tu@tuportatil`) al final de la línea de CLAVE PÚBLICA antes de guardarla o pegarla en cualquier sitio; no cambiará la clave en sí.

Copié el resultado pero pegué tanto la clave pública como la privada en algún sitio que solo quería una, ¿qué pasó?

El recuadro de resultado contiene ambas claves en una sola área de texto (no hay un segundo panel de salida donde ponerlas), claramente separadas en una sección `=== PUBLIC KEY ===` y una sección `=== PRIVATE KEY ===`. El botón Copiar copia todo el recuadro, así que si estás pegando en un formulario de un solo campo (como el cuadro "Add SSH key" de GitHub o GitLab, que solo quiere la clave pública) selecciona y copia solo esa sección en lugar de usar el botón Copiar.

¿Cuál es la diferencia real entre el archivo de clave pública y el de clave privada?

La clave pública (la línea `ssh-ed25519 AAAA...` o `ssh-rsa AAAA...`) es segura para compartir en cualquier sitio, es lo que pegas en el archivo `~/.ssh/authorized_keys` de un servidor o en la página de configuración "SSH keys" de un host de Git. La clave privada (el bloque `-----BEGIN PRIVATE KEY-----`) nunca debe compartirse con nadie ni ningún servicio, es lo que demuestra tu identidad al conectarte, y quien la tenga puede autenticarse como tú. Guárdala en un archivo local (tradicionalmente llamado `id_ed25519` o `id_rsa`, sin extensión de archivo) y mantenla así.

Herramientas relacionadas