Detalles técnicos
Descripción técnica del flujo actual de cifrado de extremo a extremo para chats directos: claves, protección de mensajes, verificación de identidad y límites del modelo.
X25519 con libsodium-wrappers para identidad y ECDH.
HKDF-SHA256 para derivar la clave de sesión simétrica.
AES-256-GCM con WebCrypto SubtleCrypto para cifrado/autenticación.
El cifrado se realiza en el cliente antes de enviar cualquier contenido al servidor.
Cada cuenta mantiene una identidad criptográfica local en el navegador.
Ese material está aislado por usuario para evitar mezcla entre cuentas en el mismo dispositivo.
La identidad pública se sincroniza para que cada contacto pueda validar con quién está hablando.
Si la clave local se pierde, los mensajes históricos pueden recuperarse solo si antes se creó y guardó una frase de recuperación.
La frase de recuperación se crea en el cliente y debe quedar en manos del usuario.
El servidor no recibe la frase ni la clave privada en claro.
La copia de recuperación se guarda cifrada y solo sirve si la frase correcta vuelve a ingresarse en un dispositivo.
Al borrar la cuenta con la opción más extrema, esa copia cifrada también se elimina de la base de datos.
La clave de sesión se deriva de forma segura a partir de las claves públicas/privadas de ambas partes.
La sesión criptográfica se asocia al contacto y se actualiza cuando la identidad del peer cambia.
La app evita reutilizar estado inválido para reducir errores de descifrado y riesgos de seguridad.
Si se detecta cambio de identidad, se exige una nueva verificación de confianza.
El servidor recibe contenido cifrado y metadatos mínimos de entrega.
Los mensajes se autentican criptográficamente para detectar alteraciones.
El backend aplica validaciones de integridad y coherencia de identidad.
El texto en claro no forma parte del almacenamiento del servidor.
1. Verificación de identidad. Antes de enviar, la app valida que la identidad activa sea consistente.
2. Cifrado local. El contenido se cifra en el dispositivo del emisor.
3. Entrega segura. El backend acepta y distribuye payload cifrado con controles de integridad.
4. Descifrado en destino. Solo quien tiene la clave local correcta puede recuperar el texto.
5. Cambios de identidad. Si hay señales de rotación o desalineación, la app lo informa y requiere reconfirmación.
6. Recuperación. Si el navegador perdió la identidad local, la frase de recuperación puede restaurar el cifrado en ese dispositivo.
El servidor ve metadatos operativos y payload cifrado; no ve texto plano del chat.
La seguridad depende de mantener la clave privada local o la frase de recuperación bajo control del usuario.
No hay recuperación criptográfica de historial si se pierde la clave local anterior y tampoco existe la frase de recuperación.
Si IndexedDB falla, la app puede seguir en memoria durante la sesión, pero sin garantía de persistencia tras recargar.
La frase de recuperación no reemplaza la clave de acceso de la cuenta; recupera el cifrado de mensajes en un dispositivo.