FreeToGenerate.com

AES-256-GCM en tu propio navegador. La contraseña no sale de la pestaña, y la página te dice exactamente de qué te protege eso y de qué no.

Cifrar dentro de una página web no te protege de la propia página. Para cualquier cosa en la que alguien vaya a por ti de verdad, usa un programa que hayas instalado y puedas auditar.

También disponible en: English · Português · Français · العربية

Encriptar texto online

Cifrado con contraseña mediante AES-256-GCM, ejecutado por tu propio navegador, con los parámetros escritos dentro del resultado y los límites escritos en la página.

¿Qué es cifrar un texto?

Cifrar un texto es transformarlo para que solo pueda volver a leerlo quien tenga la clave correcta. Esta herramienta lo hace con una contraseña que eliges tú: escribes un mensaje, escribes una contraseña y obtienes una única línea de texto que no significa nada para quien no tenga esa contraseña. Vuelve a pegar esa línea más adelante con la misma contraseña y el mensaje original reaparece exacto.

El cifrado es AES-256-GCM, que es la elección estándar para este trabajo y viene incorporada en todos los navegadores. GCM es un modo autenticado, y eso importa más de lo que parece: no solo oculta el mensaje, también detecta cualquier cambio en él. Cambia un solo bit del texto cifrado y el descifrado se niega en redondo en vez de devolverte algo verosímil pero falso.

Ahora bien, una contraseña no es una clave, y en esa distancia está casi toda la ingeniería interesante. AES-256 quiere una clave de 256 bits uniformemente aleatoria; tú quieres escribir algo que puedas recordar. Salvar esa distancia es el trabajo de una función de derivación de clave, y aquí esa función es PBKDF2 con 600.000 iteraciones de HMAC-SHA256, la cifra que OWASP publica en su Password Storage Cheat Sheet. Todo se ejecuta en tu navegador a través de la Web Crypto API. No se sube nada y no hay cuenta.

Cómo usarlo

  1. Elige Cifrar y escribe tu mensaje. Vale cualquier texto: acentos, árabe, chino y emojis sobreviven al viaje de ida y vuelta, porque el texto se convierte a bytes UTF-8 antes de que el cifrado llegue a verlo.
  2. Escribe una contraseña y pulsa Cifrar. Hay una pausa breve mientras se deriva la clave; esa pausa es precisamente la medida de seguridad, y la herramienta te dice cuántos milisegundos ha tardado en tu máquina. Copia la línea resultante y guárdala o envíala como quieras.
  3. Para recuperarlo, cambia a Descifrar y pega la línea. Escribe la misma contraseña y pulsa Descifrar. Si falla, la herramienta te lo dirá, pero no puede decirte si la contraseña era incorrecta o si el texto se alteró: esas dos cosas son realmente indistinguibles, por un motivo que se explica más abajo.

El navegador ofrece una sola función de derivación, y es la que OWASP pone la última

Esta es la parte que casi ninguna herramienta cuenta, y conviene decirla tal cual en vez de adornarla. La Web Cryptography API del W3C, que es la especificación detrás de la criptografía incorporada en los navegadores, define exactamente cuatro algoritmos capaces de derivar una clave: ECDH, X25519, HKDF y PBKDF2. Dos de ellos sirven para acordar una clave entre dos partes, y HKDF está pensado para material que ya es uniformemente aleatorio, cosa que una contraseña humana desde luego no es. Queda uno: PBKDF2.

Mientras tanto, la Password Storage Cheat Sheet de OWASP ordena las funciones de hash de contraseñas por preferencia y lo hace sin ambigüedad: primero Argon2id, después scrypt, después bcrypt y en cuarto lugar PBKDF2. Y recomienda PBKDF2 concretamente para el caso en que hace falta cumplir FIPS-140, que es un motivo regulatorio, no criptográfico. O sea que el navegador le da a una página web exactamente una opción, y resulta ser la que OWASP deja la última.

PBKDF2 está abajo del todo porque no es duro en memoria. Su trabajo es cálculo puro, que es justo la forma de trabajo que una tarjeta gráfica hace miles de veces en paralelo. Argon2id se diseñó para salir caro también en memoria, y no solo en tiempo, de modo que la ventaja del hardware del atacante se encoja. Meter Argon2id en un navegador significa descargar una compilación en WebAssembly, un coste real que se paga en cada visita para una página que quizá se use una sola vez.

Así que esta herramienta usa PBKDF2 con la cifra que publica OWASP, y lo dice, en vez de dar a entender que la elección se hizo por méritos propios. Si estás protegiendo algo en lo que la diferencia entre PBKDF2 y Argon2id te importa de verdad, eso es una señal de que deberías estar usando un programa instalado y no una página web, que es exactamente la misma conclusión a la que llega por otro camino la sección de límites.

Qué compran en realidad 600.000 iteraciones: unos 19 bits

Todas las herramientas de esta categoría anuncian su número de iteraciones, y el número está puesto ahí para tranquilizar. Esta es la parte que casi nunca se imprime al lado. Ejecutar la derivación 600.000 veces multiplica por 600.000 el coste de cada intento del atacante. Expresado como se expresa normalmente la fuerza criptográfica, eso es dos elevado a 19,19, así que el número de iteraciones entero vale unos diecinueve bits.

Diecinueve bits es una aportación real y no es grande. Significa que quien pudiera probar mil millones de contraseñas por segundo contra un hash sin protección se queda en unas mil setecientas por segundo. Eso es un obstáculo serio para quien intente adivinar una contraseña sacada de un espacio grande, y casi ningún obstáculo para quien vaya recorriendo una lista de contraseñas comunes. Las iteraciones mueven la línea; la contraseña decide de qué lado caes.

La consecuencia práctica es que la contraseña aporta esencialmente toda la seguridad y las iteraciones aportan encima un extra fijo de unos diecinueve bits. Una contraseña de cuatro palabras elegidas al azar de una lista grande vale por sí sola bastante más que ese extra. Una contraseña corta, o una que aparezca en cualquier filtración, sigue siendo una contraseña corta después de 600.000 iteraciones: el factor de trabajo multiplica lo que cuesta cada intento, pero no aumenta cuántos intentos tiene que hacer el atacante.

La herramienta te enseña el tiempo de derivación en tu propia máquina por ese mismo motivo. Quien decide lo que cuestan realmente esas iteraciones es tu navegador y tu hardware, no una cifra medida en otro sitio, y ver el número convierte el intercambio en algo concreto en vez de abstracto.

El resultado se describe a sí mismo, y es a propósito

El texto cifrado es una sola línea con cinco campos separados por puntos: una marca de versión, el número de iteraciones, la sal, el nonce y por último el texto cifrado con su etiqueta de autenticación. Las tres partes binarias van en base64url, así que el conjunto sobrevive a que lo pegues en un correo, en un chat o en una URL sin que nada lo estropee.

El número de iteraciones va dentro del resultado deliberadamente. OWASP revisa su cifra recomendada al alza a medida que mejora el hardware, ya la ha movido varias veces y volverá a moverla. Una herramienta que fija ese número en el código, tanto al cifrar como al descifrar, pierde en silencio la capacidad de leer sus propios resultados antiguos el día que actualice esa constante. Como aquí el número viaja con el texto cifrado, lo que cifres hoy seguirá descifrándose dentro de años, cuando el valor por defecto ya se haya movido. Lo mismo vale para la sal y el nonce: los dos son aleatorios, los dos hacen falta para descifrar y por eso los dos se guardan en vez de recalcularse.

Ese diseño tiene un filo que conviene nombrar, porque es la clase de cosa que un formato autodescriptivo introduce sin avisar. Si el número de iteraciones sale del texto pegado, entonces el texto pegado controla cuánto trabajo hace tu navegador antes incluso de comprobar ninguna contraseña, y un texto hostil que dijera tener un billón de iteraciones simplemente congelaría la pestaña. Por eso la herramienta pone un tope al número que acepta y rechaza cualquier cosa por encima en vez de ponerse a trabajar.

En el panel de desglose se ven dos detalles más. Para cada cifrado se genera una sal aleatoria nueva y un nonce aleatorio nuevo, y por eso cifrar dos veces el mismo mensaje con la misma contraseña da dos resultados completamente distintos: eso es el comportamiento correcto, no un fallo. Y la etiqueta de autenticación es de 128 bits, exactamente 16 bytes de sobrecarga. Web Crypto permite etiquetas de 32, 64, 96, 104, 112, 120 o 128 bits y por defecto usa 128; las cortas son bastante más fáciles de falsificar, así que esta herramienta fija el máximo en vez de confiarse al valor por defecto.

Límites honestos

Cifrar dentro de una página web no te protege de la página web. El JavaScript que hace el trabajo lo sirve este sitio cada vez que lo cargas, y si ese código fuera alguna vez malicioso, por un compromiso, por una dependencia envenenada o por un cambio deliberado, podría leer tu contraseña y tu texto en claro antes de que se cifre nada. Desde fuera no puedes comprobar que no lo hace. Esto no es un defecto de AES ni de esta implementación: es la condición estructural de hacer criptografía en una página que te sirve otro, y vale igual para todas las herramientas de cifrado en el navegador, incluidas las que no lo mencionan.

Lo que esta herramienta sí te da de verdad es protección para un mensaje que está guardado en otro sitio. Si cifras una nota y la pegas en un correo, en un documento compartido, en una aplicación de notas o en un historial de chat, quien consiga después ese texto sin la contraseña no puede leerlo. Ese es un escenario real y frecuente, y la herramienta lo cubre bien. Lo que no puede hacer es protegerte de alguien decidido que vaya específicamente a por ti, porque quien va a por ti tiene mejores opciones que atacar el texto cifrado. Para ese trabajo, usa un programa auditado que hayas instalado tú y puedas verificar.

Un descifrado fallido no puede decirte por qué ha fallado. AES-GCM comprueba la etiqueta de autenticación e informa de un único resultado ante cualquier discrepancia, y la especificación define exactamente un error para eso. Una contraseña equivocada y un solo carácter alterado producen el mismo desenlace, y ningún cuidado en la implementación puede separarlos: esa información sencillamente no existe. La herramienta lo dice en vez de adivinar, porque una herramienta que afirmara saberlo se lo estaría inventando.

No hay recuperación de contraseña, y no puede haberla. De tu contraseña no se guarda nada en ninguna parte, que es precisamente lo que hace que el cifrado valga algo; la consecuencia inevitable es que perderla significa perder el texto para siempre. Por último, esto cifra texto y no archivos: el mensaje pasa por el navegador como texto, así que los adjuntos binarios quedan fuera de lo que hace esta página.

¿Por qué es gratis?

Porque no cuesta nada mantenerlo. Todo esto, la derivación de la clave, el cifrado y el descifrado, ocurre dentro de tu propio navegador usando la Web Crypto API que ya está ahí. No se descarga ninguna biblioteca, no se envía ningún texto a ningún sitio y ningún servidor ve tu mensaje ni tu contraseña, porque no hay ningún servidor de por medio.

Así que no hay cuenta, ni registro, ni nada guardado detrás de uno, ni marca de agua. El cifrado es el AES-256-GCM del propio navegador, la cifra de derivación sale de las recomendaciones publicadas por OWASP, y el formato está documentado más arriba para que el resultado no quede secuestrado por que este sitio siga existiendo.