Cómo funciona

Cómo Crocodile mantiene tus conversaciones en tus manos

Un recorrido por la arquitectura y el protocolo en palabras sencillas. Cada capítulo empieza por la idea; abre «Bajo el capó» para ver los detalles técnicos.

Capítulo 1

Cuatro tipos de participantes

Crocodile reparte el trabajo de modo que solo ven tus palabras las personas con las que hablas, y las partes que gestionan desconocidos no las ven nunca.

Tu app

Guarda tus claves, cifra todo lo que envías y descifra lo que recibes. Tu historial de mensajes vive aquí y en ningún otro sitio.

Sabe: Todo lo que envías y recibes: es tuyo.

El anfitrión

En cada sala de voz o espacio, la app de un miembro se elige para reenviar el tráfico cifrado a los demás. Es un miembro como cualquier otro.

Sabe: Las direcciones IP de los miembros y quién habla, nunca lo que se dice.

Servidores de coordinación

Centralitas gestionadas por voluntarios: guardan perfiles y espacios, dicen quién está conectado y eligen anfitriones. Se unen en una sola red.

Sabe: Perfiles, membresías y quién está conectado, nunca lo que se dice.

El directorio

Una guía telefónica de servidores de coordinación, para que las apps nuevas sepan por dónde empezar. No sabe nada de las personas.

Sabe: Solo la lista de servidores.

Capítulo 2

Tu cuenta es una clave, no una contraseña

Cuando instalas Crocodile, tu app genera en tu ordenador un secreto aleatorio de 32 bytes. De él salen dos claves: una para firmar lo que publicas y otra para recibir mensajes cifrados. Tu ID de usuario es una huella de la clave de firma.

Como el ID se calcula a partir de la clave, un servidor no puede colar otra clave y hacerse pasar por ti. No hay contraseña que robar ni restablecimiento con el que engañar a un servicio de soporte. El secreto se te muestra una vez como clave de recuperación y se queda en tus dispositivos, cifrado con el llavero de tu sistema.

Bajo el capó
  • La semilla de 32 bytes produce una clave de firma Ed25519 y una clave de cifrado X25519. El ID de usuario son los primeros 26 caracteres de base32(SHA-256(clave pública de firma)).
  • Cada dispositivo publica un registro de dispositivo firmado con un paquete de preclaves (X25519 + ML-KEM-768) que cambia cada semana. Los secretos de preclaves antiguos se borran tras un periodo de gracia.
  • Los números de seguridad permiten que dos personas comparen sus claves por otro canal, como en otras apps de mensajería seguras.
  • Los datos locales (identidad, preclaves, historial) se guardan cifrados con una clave protegida por el llavero del sistema operativo.

Capítulo 3

Encontrar el servidor más rápido

Tu app descarga del directorio la lista de servidores de coordinación, mide cuánto tarda cada uno en responder y se conecta al más rápido. El segundo queda preparado, así que si tu servidor desaparece, la app cambia al instante.

Antes que nada, el servidor demuestra quién es y la app y el servidor acuerdan claves para esa conexión. A partir de ahí, incluso los metadatos que intercambian van cifrados, además de HTTPS, así que también funciona de forma segura en un servidor casero.

Bajo el capó
  • El directorio lista cada servidor firmado por ese mismo servidor, con la dirección ofuscada. Las apps comprueban la firma antes de usar una entrada.
  • El saludo firmado del servidor lleva una oferta nueva de intercambio de claves híbrido (X25519 + ML-KEM-768). La app la comprueba con la clave del directorio, responde y firma la transcripción. Cada trama posterior va cifrada con AES-256-GCM y con relleno.
  • Los servidores también responden a STUN en dos puertos, así que las apps conocen su dirección pública y su tipo de NAT sin preguntar a Google ni a Cloudflare.

Capítulo 4

Servidores que no pueden mentir sobre ti

Tu perfil, los espacios que creas, sus invitaciones y quién es miembro son pequeños registros firmados por quien los escribió. Los servidores los guardan y los comparten, y cada servidor y cada app comprueba las firmas. Un servidor puede negarse a reenviar un registro, pero no puede cambiarlo ni inventárselo.

Los servidores de coordinación se encuentran entre sí y forman una red. Cada registro lo guardan unos pocos servidores elegidos por un hash, que se copian los cambios entre ellos, así que la red sigue funcionando aunque caiga cualquier servidor.

Bajo el capó
  • Registros: perfil, lista de amigos sellada, espacio, invitación, miembro, dispositivo y nota. Cada uno tiene un autor que puede escribirlo; la validación (firma, autoridad, versión «gana el último que escribe») es idéntica en servidores y clientes.
  • Las listas de amigos se cifran solo para los dispositivos de su dueño, y las solicitudes de amistad viajan como notas selladas que no dicen quién las envía, así que los servidores no saben quién es amigo de quién.
  • Cada registro pertenece a los primeros servidores de un anillo de hash consistente para su fragmento. Los propietarios replican las escrituras, se ponen al día con cursores de secuencia y traspasan los registros cuando entran o salen servidores.

Capítulo 5

Un amigo hace de anfitrión, un suplente espera

Cuando la gente entra en una sala de voz o abre un espacio, el servidor de coordinación mira la conexión de todos (lo abierta que está su red, su velocidad de subida, su ordenador, si va con batería) y elige como anfitrión al miembro mejor situado. El siguiente es el suplente.

Todos se conectan a la app del anfitrión, que reenvía el audio cifrado. Para no cargar la conexión, envía a cada oyente solo a los pocos que hablan más alto. Nunca tiene el audio en claro: solo mueve paquetes sellados.

Si el anfitrión se va o deja de estar accesible, el suplente toma el relevo y todos se reconectan a él, normalmente antes de que nadie lo note.

Bajo el capó
  • El anfitrión ejecuta en su app una pequeña SFU (selective forwarding unit). Cada miembro abre una conexión WebRTC hacia ella, con una pista de audio de subida, cinco huecos de bajada para quien habla y un canal de datos.
  • Los huecos se asignan según la cabecera de nivel de audio RFC 6464 («last-N»), reescribiendo los números de secuencia para que cada hueco siga siendo un flujo continuo.
  • Las ofertas y respuestas se firman con claves de identidad sobre la sesión, la época, ambos ID y la huella DTLS, así que un servidor de coordinación no puede colarse en medio.
  • Cada cambio de anfitrión sube un número de época; las ofertas antiguas se ignoran. Los miembros que no llegan al anfitrión lo notifican y, en cuanto la mitad está de acuerdo, el suplente toma el relevo.

Capítulo 6

Cifrado por capas

Todo se cifra en tu dispositivo antes de salir, y solo las personas de la conversación tienen las claves. Esto es lo que le pasa a un mensaje por el camino.

Un mensaje, cuatro capas

Tu app firma el mensaje para que los demás puedan demostrar que es tuyo, le añade relleno para que su longitud no revele nada, lo cifra con una clave que solo tienen los miembros de la conversación y lo envía por una conexión que a su vez está cifrada. Quien esté en medio solo ve bytes revueltos de tamaño estándar.

Preparado para los ordenadores cuánticos

Las claves se intercambian con un híbrido de X25519, un método clásico probado, y ML-KEM-768, el nuevo estándar poscuántico. Un atacante tendría que romper los dos. Importa porque alguien podría grabar hoy tráfico cifrado y esperar a que un ordenador cuántico lo descifre.

Claves que avanzan

La clave de cada miembro gira como un trinquete: tras cada mensaje la sustituye la siguiente de una cadena que solo avanza, y la antigua se borra. Quien robe una clave hoy no puede leer los mensajes de ayer. Cada 30 minutos, y cada vez que alguien se va, todos empiezan una cadena nueva a partir de claves aleatorias nuevas, así que una clave robada también deja de servir pronto.

La voz, trama a trama

Tu voz se cifra en pequeñas tramas, unas cincuenta por segundo, justo después del micrófono y antes de llegar a la red. Una trama que no se puede cifrar se descarta; nunca se envía en claro. La voz usa una tasa de bits constante, así que el tamaño de los paquetes no revela lo que dices.

Bajo el capó
  • Los secretos por pares (reparto de claves de emisor, sincronización del historial, vinculación de dispositivos, canales con el servidor) combinan X25519 y ML-KEM-768 (FIPS 203) mediante HKDF-SHA256.
  • Las claves de emisor tienen dos cadenas HKDF: la de texto avanza tras cada mensaje y la de audio cada 30 segundos. Las claves se sustituyen cada 30 minutos y cuando alguien se va, y solo se envían a dispositivos cuya membresía ha comprobado la propia app a partir de registros firmados.
  • Voz: un worker de Encoded Transform cifra cada trama Opus con AES-256-GCM y un sufijo autenticado al estilo de SFrame (ID de clave, generación, contador).
  • Texto: firmado por el autor (Ed25519), con relleno Padmé y cifrado con la cadena de texto.
  • Las cajas selladas para un dispositivo usan su preclave actual y van firmadas por el remitente, así que incluso los mensajes para dispositivos desconectados tienen secreto hacia adelante.

Capítulo 7

Cuando no hay conexión directa posible

Algunas redes, como los cortafuegos estrictos de oficinas o universidades, bloquean las conexiones directas entre ordenadores. Crocodile te avisa cuando ocurre, y puedes dejar que un servidor de coordinación retransmita tu tráfico.

El relé reenvía paquetes que ya están cifrados de extremo a extremo: ve su tamaño y su ritmo, pero no su contenido. El permiso dura una hora cada vez y solo se renueva mientras sigue haciendo falta.

Bajo el capó
  • El relé es TURN estándar (RFC 5766) en el puerto UDP del servidor de coordinación, con credenciales de corta duración. Los servidores limitan cuántas personas pueden usarlo.
  • Al conectarse, la app prueba su red contra dos puertos STUN, la clasifica como abierta, limitada (NAT simétrico) o bloqueada y ofrece el relé cuando hace falta.
  • Cada conexión registra cuatro pasos (oferta, respuesta, ruta de red, canal cifrado), así que cuando algo falla, la app puede decir dónde.

Capítulo 8

Mensajes que encuentran su camino

Ningún servidor guarda tu historial, así que las apps de Crocodile se pasan los mensajes entre ellas. Esto es lo que ocurre cuando escribes a alguien que está desconectado.

  1. Espera contigo

    El mensaje entra en la bandeja de salida de tu app y muestra un pequeño reloj.

  2. Tu amigo se conecta

    En cuanto los dos estáis conectados, tu app se lo entrega, sellado para su dispositivo.

  3. Confirmado

    Su app confirma la recepción y el reloj desaparece. Los miembros que se perdieron mensajes en un espacio se ponen al día con el anfitrión y el suplente.

  4. O usa el buzón

    Si quieres, un servidor guarda los mensajes directos hasta 7 días, sellados para cada dispositivo para que no pueda leerlos, y los borra en cuanto se entregan.

Capítulo 9

Añadir un ordenador

Tu ordenador nuevo muestra un código corto. Escríbelo en un ordenador donde ya hayas iniciado sesión y comprueba que las dos pantallas muestran el mismo código de seguridad de seis cifras. Si coinciden, tu cuenta se envía cifrada y el dispositivo nuevo ya está dentro.

El código de seguridad cubre las claves de los dos dispositivos, así que si alguien intentara colar una por el camino, los códigos no coincidirían y lo sabrías.

Glosario

Los términos que encontrarás en textos sobre seguridad, en una o dos frases cada uno.

Cifrado de extremo a extremo
Solo el remitente y los destinatarios tienen las claves. Lo que transporte el mensaje entre medias, servidores incluidos, solo ve datos revueltos.
Peer-to-peer
Las apps se conectan directamente entre sí en lugar de a través de un servidor central.
Criptografía poscuántica
Cifrado diseñado para resistir a los futuros ordenadores cuánticos, que podrían romper los métodos que usa hoy la mayor parte de internet. ML-KEM es el estándar publicado por el NIST en 2024.
Secreto hacia adelante
Robar una clave hoy no abre los mensajes antiguos, porque las claves con que se cifraron ya se borraron.
Seguridad poscompromiso
Después de que roben una clave, unas claves aleatorias nuevas vuelven a dejar fuera al ladrón enseguida. En Crocodile ocurre en menos de 30 minutos, o de inmediato cuando alguien se va.
Firma digital
Un sello matemático hecho con una clave privada. Cualquiera puede comprobarlo con la clave pública, y nadie sin la clave privada puede falsificarlo.
NAT, STUN y TURN
Los routers domésticos esconden los ordenadores tras una única dirección pública (NAT). STUN ayuda a las apps a descubrir su dirección pública para conectarse directamente; TURN retransmite el tráfico cuando no pueden.
SFU
Una selective forwarding unit reenvía el audio de cada persona que habla a cada oyente sin mezclarlo ni decodificarlo. En Crocodile se ejecuta en la app del anfitrión.
Metadatos
Datos sobre una conversación en vez de su contenido: quién habla con quién, cuándo y cuánto. Crocodile cifra el contenido por completo y reduce los metadatos, pero los servidores todavía ven algunos.

Lee el documento de arquitectura completo (en inglés)