Cómo funciona Clavenzo
A grandes rasgos, en lenguaje llano y sin omitir nada importante. Si quieres la versión corta: tu móvil u ordenador crea una clave, la clave es tu dirección, y todo lo que pasa entre dos dispositivos va cifrado con claves que solo esos dos llegan a tener.
Tu identidad es una clave, no una cuenta
Casi todas las aplicaciones de mensajería empiezan pidiendo un número de teléfono. Ese número lo emite una operadora, va atado a un nombre legal, puede transferirlo cualquiera capaz de convencer a un dependiente, y lo consulta quien lo tenga. Es mal cimiento para una conversación privada.
Clavenzo empieza de otra manera. La primera vez que la abres, la aplicación genera un par de claves criptográficas en el dispositivo. La mitad pública pasa a ser tu dirección. La privada se queda en el dispositivo. Nunca se copia a ninguna nube y nunca la tenemos nosotros. Solo sale del dispositivo si la exportas tú, sellada con un código de un solo uso.
Tu dirección se muestra de dos formas: un código de 16 caracteres que puedes dictar o pegar, y un código QR que alguien puede escanear. Hay además un código más corto que sirve solo para comprobar que hablas con la persona correcta: demasiado corto para añadir a nadie, bastante largo para compararlo en voz alta.
Qué ocurre cuando haces una llamada
Dos móviles tienen que encontrarse y luego acordar una clave. Clavenzo hace la segunda parte de un modo que vuelve poco interesante la primera para quien escuche.
- Encontrarse. Si llamas a alguien que aparece en Cerca de ti en la misma Wi-Fi, los móviles se conectan directamente y no interviene ningún servidor. Si no, un pequeño servicio de encuentro entrega una oferta sellada y los dos móviles intentan construir un camino directo entre ellos. Para ello, cada móvil le dice al otro sus direcciones de red, así que la aplicación de la otra persona conoce tu dirección IP.
- Acordar una clave. Los dos dispositivos hacen un intercambio X25519 efímero y firmado y, un instante después de conectar, le añaden encima un intercambio de claves poscuántico, ML-KEM-768. «Efímero» es la palabra importante: las claves se crean para esta única llamada y se destruyen al terminar.
- Hablar. La voz se codifica en 33 bytes cada 20 milisegundos, y cada uno de esos paquetes se cifra y se autentica por separado. Para cualquiera que mire la red, el contenido parece ruido aleatorio, aunque el ritmo de los paquetes todavía puede revelar cuándo habla alguien.
- Comprobar. Los dos móviles derivan cuatro palabras de la clave realmente acordada. Decidlas en voz alta. Si coinciden en ambas pantallas, no hay un tercero en medio.
Ese último paso es el que la gente se salta y el que más importa. El cifrado garantiza que quien tenga la otra clave puede leerte. Por sí solo no puede decirte quién es. Las cuatro palabras son cómo lo averiguas.
Por qué una grabación de la llamada de hoy sigue ilegible
Hay un ataque común y realista que consiste en tener paciencia: grabar ahora el tráfico cifrado, conseguir la clave más tarde (por orden judicial, por robo, entrando en un dispositivo años después) y descifrar la grabación con calma.
Las claves efímeras lo derrotan. La clave que cifró de verdad tu llamada existió lo que duró la llamada, en dos dispositivos, y se destruyó al final. Tu clave de identidad de larga duración solo firma el intercambio; no cifra ni un segundo de audio. Comprometerla mañana permite suplantarte mañana. No permite abrir lo que se grabó ayer.
Esta propiedad se llama secreto hacia el futuro, y es lo más valioso que puede tener una llamada cifrada.
Además, cada llamada vuelve a generar sus claves con ML-KEM-768, un algoritmo poscuántico, una fracción de segundo después de conectar, cuando las dos aplicaciones lo admiten. Responde al mismo atacante paciente con una herramienta mejor: tráfico grabado ahora y abierto más tarde por un ordenador cuántico. Con los mensajes y los archivos, por ahora, es distinto. Se sellan con RSA y ML-KEM-768 a la vez, pero hoy la clave ML-KEM se deriva de la clave RSA, así que todavía no los llamamos poscuánticos. Y un mensaje que espera en el servidor a un móvil apagado no tiene secreto hacia el futuro: quien lo haya grabado y más tarde consiga la clave de identidad del destinatario podría abrirlo.
Qué hace el servidor y qué no puede hacer
Hay un trabajo que una aplicación entre pares no puede hacer sola: despertar a un móvil con la aplicación cerrada. Para eso existe un servicio de encuentro, construido para saber lo menos posible sin dejar de hacerlo.
- Nunca ve el contenido. Las ofertas y los mensajes sin conexión se sellan con la clave del destinatario antes de salir de tu móvil. El servicio guarda bytes que no puede abrir.
- No sabe cómo te llamas. Su directorio guarda la dirección, las claves públicas y la plataforma de cada dispositivo y, si es un móvil, su token de notificaciones. No tiene nombres, ni números de teléfono, ni correos, porque la app nunca los pide. Cualquiera que tenga una dirección puede preguntar si está registrada.
- Sus notificaciones no llevan remitente ni contenido. El aviso que despierta tu móvil dice solo si se trata de una llamada o de un mensaje. En el iPhone, la notificación de un mensaje dice «New message» y «Tap to read». Apple y Google ven que se ha enviado algo y cuándo, pero no qué ni de quién.
- Olvida deprisa. Una invitación de llamada vive 60 segundos. Un mensaje sellado, 72 horas como mucho. Un registro de dispositivo caduca a los 30 días sin renovarse.
- Ve quién llama a quién, mientras dura la espera. Una invitación de llamada o un mensaje sin conexión tiene que nombrar la clave a la que va y la clave de la que viene, así que el servidor ve pasar las dos. No guarda ningún registro de esa pareja una vez que la invitación o el mensaje desaparecen: una invitación se olvida a los 60 segundos y un mensaje, como mucho, a las 72 horas. Ocultar también el remitente (remitente sellado) está en nuestra lista. Nuestros servidores están detrás de Cloudflare, que ve los mismos datos, y nunca el contenido.
Cuando una llamada no puede ir directa (porque las dos redes se niegan, cosa que pasa con algunas operadoras móviles), un relé reenvía los paquetes cifrados: nuestro propio relé por UDP, después por TCP y después los relés de Cloudflare. El relé solo pasa los datos. No tiene clave y no puede conseguirla. Sí ve las direcciones IP de los dos dispositivos. Hoy no hay ningún ajuste que envíe todas las llamadas por un relé, y en cada llamada, vaya por un relé o no, cada dispositivo conoce la dirección IP del otro.
Llamadas en la misma Wi-Fi
Dos dispositivos en la misma red Wi-Fi, o conectados al mismo punto de acceso, pueden encontrarse y mantener una llamada cifrada completa sin conexión a internet y sin servidor. Hoy funciona en Android cuando el móvil que recibe la llamada ha tocado Listo para recibir, en iPhone mientras Clavenzo está abierta en él, y en un ordenador siempre que Clavenzo esté en marcha; el iPhone puede pedir permiso para usar la red local. Los mensajes y los archivos viajan por el mismo camino, cifrados, mientras la app está abierta en los dos dispositivos.
No es un modo de respaldo con menos seguridad. Es el mismo cifrado y las mismas palabras de seguridad, con el paso del encuentro sustituido por un descubrimiento local. Sirve en un avión, en un edificio sin cobertura, en una instalación con red privada y allí donde internet no sea fiable ni bienvenido.
Cuando algo se rompe
Clavenzo se diseñó alrededor de una pregunta difícil: ¿qué sigue funcionando cuando las cosas van mal? Una tormenta tumba un centro de datos. Un país estrangula sus conexiones. Un proveedor desaparece. Las antenas fallan y solo queda una red local. Cada uno de esos casos tiene su respuesta aquí abajo.
- Sin ningún internet. Los teléfonos en la misma Wi-Fi o punto de acceso pueden llamarse directamente, dentro de los límites que se explican arriba. Sin servidor, sin nada fuera de la habitación.
- Los servidores son pequeños, y hay varios. Solo presentan a dos teléfonos y guardan mensajes sellados. El audio y el vídeo no pasan por ellos salvo que haga falta un relé, así que todo el servicio funciona con un puñado de máquinas pequeñas de distintos proveedores y en distintos lugares.
- Ninguno de ellos es imprescindible. Tu teléfono se registra en todos los servidores y recoge de todos. Si uno cae, los demás siguen, y una llamada se contesta a través del servidor que la entregó.
- La lista de servidores va firmada. Los teléfonos la descargan de los propios servidores y la comprueban con una clave que nunca toca un servidor. Pueden sumarse servidores nuevos sin actualizar la app, y nunca se puede reutilizar una lista antigua para mandar los teléfonos adonde no deben ir.
- Sin DNS, sin problema. La lista incluye direcciones de red directas con certificados fijados, así que los teléfonos pueden llegar a un servidor aunque un servidor de nombres esté caído o mienta, o falle una red de distribución de contenidos, sin confiar en ninguna autoridad de certificación.
- Dos relés, una escalera. Cuando dos redes impiden una ruta directa, un relé lleva la llamada cifrada: nuestro propio relé por UDP, después por TCP y después los relés de Cloudflare. Si falla uno, se pierde un escalón, no la llamada.
- Enlaces finos y poco fiables. La voz necesita 13,2 kbit/s. El búfer de fluctuación mide la red y se adapta, los paquetes perdidos se disimulan en vez de sonar como chasquidos, y los archivos grandes se pausan y reanudan solos.
- Redes que estorban. Hay proxies SOCKS5 y HTTP CONNECT incorporados, para redes que obligan a usar uno o donde el resolvedor local está bloqueado o manipulado.
Mensajes, fotos, archivos y mensajes de voz
La mensajería usa el mismo cifrado. El texto, las fotos, los archivos y los mensajes de voz se cifran para el destinatario, y la conversación se guarda en el almacenamiento privado de la aplicación en tu móvil. Ese almacenamiento está protegido por el cifrado y el bloqueo de pantalla del propio teléfono, y queda excluido de las copias de seguridad de Google y de iCloud. En un ordenador, las conversaciones se guardan en la carpeta propia de la aplicación, dentro de tu cuenta de usuario.
Un mensaje para alguien con el móvil apagado se sella con su clave y se deja en el servicio de encuentro, que lo guarda 72 horas como mucho sin poder leer un solo byte.
Los archivos de más de 1 MB son una excepción deliberada: viajan de móvil a móvil y nunca por un servidor. Si todavía no hay un camino directo, la transferencia espera y se reanuda sola en lugar de mandar tu archivo grande por la máquina de otro.
También hay mensajes que desaparecen, por conversación, contando desde que tú los envías y desde que ellos los leen; confirmaciones de lectura que puedes desactivar en ambos sentidos a la vez; y un estado de solicitud de mensaje, para que quien no esté en tus contactos no pueda saber si su mensaje llegó o se leyó hasta que lo aceptes.
Lo que puedes activar
- Bloqueo de la aplicación: pide el bloqueo de pantalla de tu móvil (PIN, patrón, huella o cara) al volver a Clavenzo, y Windows Hello en Windows. Las llamadas siguen sonando; las notificaciones dejan de mostrar el texto de los mensajes. Todavía no está disponible en Linux.
- Seguridad de pantalla: en Android, bloquea capturas y grabaciones de la aplicación y la oculta en la lista de aplicaciones recientes. En el iPhone, donde ninguna app puede impedir una captura de pantalla, oculta la aplicación en el selector de apps. En Windows, mantiene la ventana fuera de las capturas, las grabaciones de pantalla y la pantalla compartida; en Linux no se puede garantizar. Los códigos de copia y de traspaso están siempre protegidos, diga lo que diga este ajuste.
- Teclado incógnito (solo Android): pide a tu teclado que no aprenda de lo que escribes. Es solo una petición, y algunos teclados la ignoran, por eso la aplicación lo dice. El iPhone no permite a las apps hacer esa petición.
- Compatibilidad con proxy: SOCKS5 o HTTP CONNECT, para redes que lo exigen o donde el resolutor local está bloqueado o miente.
- Silenciar llamadas de gente no guardada: no suenan. Siguen apareciendo como llamadas perdidas que puedes devolver.
Cambiar de móvil
Dos exportaciones distintas, deliberadamente separadas, porque llevan cosas distintas.
Una copia de seguridad cifrada guarda tus conversaciones, fotos, historial de llamadas y contactos en un archivo que dejas donde quieras. Se abre solo con un código que se muestra una vez al exportar y no se guarda en ningún sitio. Importar añade lo que falta y no sobrescribe nunca lo que ya está.
Una exportación de identidad mueve la clave que es tu dirección. Va sellada con su propio código de traspaso de un solo uso, se sitúa detrás del bloqueo de pantalla de tu móvil y es la única forma en que esa clave sale de un dispositivo. Importarla hace que el móvil nuevo responda como esa identidad.
Dónde se detiene este diseño
Todo diseño tiene límites. Estos son los nuestros.
- Quién habla con quién. Una invitación de llamada o un mensaje sin conexión nombra las dos direcciones entre las que pasa, así que el servidor, y Cloudflare delante de él, ven esa pareja mientras se guarda. Además, el saludo inicial de una llamada directa lleva las dos claves de identidad sin cifrar, así que quien observe esa red puede saber qué dos identidades hablan. Ninguna de las dos cosas revela una palabra de lo que se dice. Las dos son metadatos, y las dos están en la lista para arreglar.
- Tiempos y metadatos. El servidor ve necesariamente cuándo se registra tu dispositivo. El ritmo de los paquetes durante una llamada puede revelar cuándo habla alguien, aunque nada de lo dicho escape del cifrado.
- Tu dirección IP. En cada llamada, incluso en una que acaba pasando por un relé, la aplicación de la otra persona conoce tu dirección IP, porque los dos dispositivos intercambian direcciones de red para buscar una ruta directa. Puede revelar aproximadamente dónde estás. Un relé también ve las dos direcciones IP.
- Tu dispositivo es el punto débil. Quien tenga tu móvil desbloqueado tiene tus mensajes. Un programa malicioso en el móvil lee lo que escribes antes de que llegue a cifrarse. Esto vale para todos los mensajeros que se han escrito.
- No ha sido auditado de forma independiente. Está hecho con cuidado y probado a fondo. No es lo mismo y no vamos a fingir que lo sea.
Si tu modelo de amenaza incluye a un adversario capaz de vigilar una red entera, entiende estos límites, usa la compatibilidad con proxy y no te juegues a una sola herramienta (esta incluida) nada que no puedas permitirte perder.