Chat cifrado

Elige cómo se conservan los mensajes y comparte el enlace.

Paso 1 de 3

Conservar los mensajes

Cómo funciona

Cómo empezar

Elige cómo se guardan los mensajes, escoge un nombre de sala, pon una contraseña difícil de adivinar de al menos 16 caracteres y comparte el enlace con las personas con las que quieres hablar. Las salas solo se crean aquí, así cada sala tiene una contraseña fuerte y un modo de mensajes elegido a propósito; abrir la dirección de una sala que no existe te devuelve a este formulario. El enlace no lleva la clave: todos tienen que escribir la contraseña, que deberías compartir por otra vía, por ejemplo en persona o por otra aplicación. Una sala guardada no tiene contraseña: recibe una dirección aleatoria y una clave aleatoria de 256 bits después del # de su enlace, así que ese enlace es la clave y hay que compartirlo con el mismo cuidado.

Mensajes

Cada mensaje se cifra en tu navegador con AES-256-GCM. Al entrar, la contraseña pasa una sola vez por Argon2id con 64 MiB de memoria y 3 pasadas, de modo que cada intento de adivinarla sin conexión es lento y consume mucha memoria. Después, HKDF-SHA256 obtiene del resultado la clave de los mensajes, que depende también del modo de mensajes de la sala, y un segundo valor independiente que solo sirve para demostrar al servidor que perteneces a la sala. El servidor conoce ese valor, nunca la clave de cifrado, y la sala en el servidor lleva el nombre de un hash de ese valor, no el nombre de tu sala. Una sala guardada se salta el lento hash de contraseña: su clave ya es aleatoria, así que HKDF-SHA256 deriva de ella directamente la clave de los mensajes y el valor de acceso. En las salas sin historial en el servidor, cada mensaje lleva además una segunda capa con secreto hacia adelante (forward secrecy), descrita más abajo.

Qué ve y qué guarda el servidor

Las salas funcionan sobre Cloudflare Workers. El relé reenvía los mensajes cifrados a las personas de la sala y no los almacena, salvo en las salas guardadas, donde conserva los mensajes cifrados, como máximo 1000 por sala, en la Unión Europea hasta que un miembro borra la sala o nadie la visita durante 90 días. En los demás casos solo guarda la configuración de la sala, y la borra cuando la sala lleva 7 días vacía. Sí ve cuándo se envían los mensajes, cuántas personas están conectadas y, por el ritmo, probablemente cuándo alguien está escribiendo. Cada mensaje se rellena hasta uno de un conjunto limitado de tamaños, de al menos 512 bytes, así que los mensajes cortos, los avisos de escritura y las señales de presencia parecen iguales y los más largos solo dejan ver su tamaño aproximado. Cloudflare, como cualquier proveedor de alojamiento, ve tu dirección IP, y el nombre de la sala aparece en la dirección de la página que cargas. En las salas guardadas conserva también las claves públicas ML-DSA de los miembros, cifradas con la clave de la sala, para que no pueda reconocer por su clave a un miembro que vuelve.

Historial y mensajes efímeros

En el modo predeterminado, cada participante guarda el historial en su propio navegador: los mensajes firmados, sellados con una clave derivada del secreto de la sala, así que sobreviven a una recarga. Quienes están en línea pasan a cada recién llegado hasta los últimos 200 mensajes, cifrados solo para esa persona y todavía con la firma de cada autor, así que nadie puede poner palabras en boca de otro al pasar el historial. El secreto hacia adelante protege lo que pasa por el relé; lo que guardan los navegadores de los miembros pueden mostrárselo a cualquiera que entre con la contraseña, y para eso existe este modo. En una sala guardada el historial cifrado vive en cambio en el servidor, así que está ahí tras recargar, en un dispositivo nuevo o para quien se una más tarde; tu navegador también guarda una copia y solo pide al servidor lo que le falta. También puedes hacer que todos los mensajes desaparezcan entre 5 segundos y un día después de mostrarse; entonces no se guarda nada. En cualquier sala puedes terminar un mensaje con !N, por ejemplo !30, para que desaparezca a los N segundos y no se guarde en el historial. El temporizador se ejecuta en el navegador de cada participante, así que un cliente modificado o una simple captura de pantalla pueden conservar una copia igualmente.

Llamadas

Las llamadas de voz y vídeo usan WebRTC. Además de su cifrado estándar DTLS-SRTP, tu navegador cifra cada fotograma de audio y vídeo, incluida la pantalla compartida, con AES-256-GCM antes de enviarlo, al estilo de SFrame. Cada participante crea una clave de medios aleatoria al unirse y se la entrega a cada uno de los demás por separado: dentro del canal cifrado de la sala y sellada otra vez con una clave que solo comparten esos dos navegadores durante esta llamada (ECDH P-256). Cuando alguien se va, todos los que se quedan pasan a una clave nueva, de modo que quien se fue no puede descifrar lo que sigue. Los fotogramas que no se descifran se descartan y nunca se reproducen, y un navegador que no puede cifrar fotogramas no puede unirse a una llamada. El establecimiento de la llamada viaja por la sala como mensajes cifrados. El audio y el vídeo pasan siempre por un relé TURN, así que los participantes nunca ven las direcciones IP de los demás; el relé solo reenvía paquetes cifrados. Cada participante se conecta con todos los demás, así que las llamadas funcionan mejor en grupos pequeños.

Archivos

Los archivos de hasta 90 MB se cifran en tu navegador con una clave aleatoria propia, incluido el nombre del archivo. La clave y el enlace de descarga viajan solo dentro del mensaje cifrado, así que un archivo queda protegido exactamente como el mensaje que lo lleva, secreto hacia adelante incluido. El archivo cifrado se sube al almacenamiento propio de encrypt.click o, si falla, a servicios de respaldo a través del servidor de encrypt.click (solo archivos de hasta 50 MB). Esos servicios solo ven el archivo cifrado, su tamaño y la dirección desde la que se sube. Los archivos subidos se eliminan 24 horas después de la subida; el mensaje permanece en el historial, la descarga no.

Conviene saber

El chat es tan privado como el enlace o la contraseña: quien los tenga puede entrar y leer la conversación desde ese momento. En las salas con secreto hacia adelante, sin embargo, una contraseña obtenida más tarde no abre el tráfico grabado antes, aunque en el modo predeterminado los miembros en línea pasan el historial reciente a quien entre. Una contraseña incorrecta lleva a una sala que no existe, así que si la página dice que la sala no existe cuando esperabas encontrar a otras personas, revisa la contraseña. En una sala pueden entrar hasta 32 personas.

Claves de los miembros en salas guardadas

En cada sala tu navegador crea una clave de firma para esa sala y se la queda para sí; cada mensaje lleva la mitad pública y una firma, y todo lo que no está firmado se descarta, también el historial que pasan otros miembros. Los nombres son solo etiquetas: el alias aleatorio o lo que haya escrito cada miembro. Los demás miembros recuerdan con qué clave apareció un nombre por primera vez y te avisan cuando ese mismo nombre, o uno que solo se le parece, aparece con una clave nueva, que es justo lo que haría un impostor que conoce la contraseña o el enlace. El panel de miembros muestra un código de clave para cada miembro, una huella corta de esa única clave, y un número de seguridad derivado de vuestras dos claves, que es el mismo en ambas pantallas: compáralo en persona o por voz. En una sala guardada, la clave de un miembro es el par formado por su clave Ed25519 y su clave ML-DSA-44, y el código de clave y el número de seguridad cubren ambas. Un navegador o dispositivo nuevo recibe una clave nueva, así que espera ese aviso después de cambiar. La firma demuestra quién escribió un mensaje dentro de la sala, no quién es, y solo la contraseña o el enlace permiten entrar. El modo de mensajes forma parte de la clave de la sala, así que el servidor no puede convertir en secreto una sala con mensajes que desaparecen en una que guarda el historial. En una sala guardada, quien haya visto el enlace puede leerlo todo mientras la sala exista, así que compártelo con cuidado y borra la sala cuando haya cumplido su función; al borrarla se elimina el historial del servidor y de los navegadores de todos los conectados.

Secreto hacia adelante

En las salas que guardan el historial solo en los navegadores y en las salas con mensajes que desaparecen, la clave de la sala por sí sola no abre ningún mensaje. Cada navegador crea al entrar un par de claves P-256 nuevo y lo guarda solo en memoria. Cada miembro tiene su propia cadena de envío: cada mensaje se cifra con AES-256-GCM bajo una clave que HKDF-SHA256 deriva de la cadena, luego la cadena avanza un paso y las claves usadas se borran. Cada uno de los demás miembros recibe por separado la clave actual de la cadena, sellada con una clave obtenida de sus dos claves efímeras (ECDH) junto con un secreto derivado de la contraseña de la sala, y como siempre dentro del canal firmado de la sala. Quien grabe el tráfico y conozca la contraseña más tarde no puede leer los mensajes sin romper el intercambio de claves, y al terminar la sesión las claves necesarias ya no están en ningún dispositivo. Un futuro ordenador cuántico capaz de romper P-256 seguiría necesitando la contraseña; frente a alguien que tenga la contraseña y un ordenador así, el secreto hacia adelante no se mantiene. Las cadenas se sustituyen cada 100 mensajes o 10 minutos y cada vez que alguien se va: la nueva cadena solo llega a los miembros que responden, así que quien se fue no puede seguir leyendo con sus claves. Quien llega recibe cada cadena solo en su paso actual, así que nada de lo que pasó por el relé antes de su llegada se abre con sus claves. Las salas guardadas no tienen secreto hacia adelante: su historial debe seguir siendo legible en cualquier dispositivo que tenga el enlace.

Salas guardadas: historial completo y firmas poscuánticas

En su lugar, las salas guardadas comprueban que su historial esté completo. Cada mensaje guardado lleva el número correlativo de su autor y el hash de su mensaje guardado anterior, ambos bajo las firmas. Tu navegador sigue la cadena de cada autor a medida que llega el historial y recuerda hasta dónde llegó, y los miembros en línea anuncian su último número y su hash. Si el servidor omite mensajes, cambia el orden de los mensajes de un autor o retiene los más recientes, o si dos mensajes distintos reclaman el mismo lugar, el chat muestra un aviso. El servidor sigue borrando los mensajes más antiguos cuando una sala llega a 1000, y el chat lo indica si ocurrió mientras no estabas; también puede retener los mensajes más recientes de alguien que no está en línea, y el orden entre autores distintos no se comprueba. Además, las salas guardadas firman cada mensaje con ML-DSA-44 (FIPS 204) junto a Ed25519, y un mensaje solo cuenta si ambas firmas son válidas, así que falsificarlo exigiría romper las dos. Cada navegador guarda su clave ML-DSA sellada con una clave derivada del enlace de la sala. Los mensajes la mencionan por su hash, y el servidor guarda las claves públicas de los miembros cifradas con la clave de la sala para poder comprobar también los mensajes de quienes no están en línea. Un mensaje sin una firma ML-DSA válida se descarta, también cuando su clave ML-DSA no está disponible.