FreeSpeech

Cómo funciona FreeSpeech

El cliente hace casi todo. El servidor es un simple retransmisor: conecta dos dispositivos en línea y olvida.

1. Una identidad sin cuenta

Al configurarla, la aplicación elige tres frases al azar. A partir de ellas se calcula (Argon2id y luego HKDF) un par de claves para cifrar y otro para firmar. Tu identificador es la huella de tus claves públicas.

2. Hacerse contactos

Dos personas intercambian una ficha de contacto (claves públicas, apodo, lista de servidores) mediante un código QR en persona, o como un mensaje copiado a distancia. La ficha está protegida por un código de un solo uso, válido 10 minutos para un QR y 30 días para una ficha copiada. Después puedes comparar un número de seguridad, idéntico en ambos lados, para asegurarte de que nadie se coló en el intercambio.

Intercambio de ficha de contacto con un código de un solo uso
Intercambio de contacto con un código de un solo uso (diagrama en inglés).

3. Enviar un mensaje

  1. La aplicación firma el mensaje con tu clave y lo cifra para el destinatario con una clave efímera nueva en cada mensaje.
  2. Lo envía a un servidor mediante una conexión WebSocket. El servidor lee el sobre (de quién, para quién) y nada más.
  3. Si el destinatario está conectado, el servidor se lo transmite de inmediato.
  4. Si está desconectado, el servidor no guarda nada. El mensaje queda en la cola de envío de tu dispositivo y una notificación lo despierta. En cuanto se reconecta, el mensaje sale.
  5. El destinatario comprueba la firma y descifra.

Las notificaciones nunca contienen el mensaje: solo le dicen a la aplicación que se conecte para mirar.

4. Varios servidores

Un servidor no es un punto central. Tu ficha de contacto enumera tus servidores por orden de preferencia; tu dispositivo se conecta a todos los tuyos a la vez y, para enviar, prueba los de tu contacto por orden.

Conexión simultánea a varios servidores
Conexión simultánea a todos tus servidores (diagrama en inglés).

5. Grupos

Un grupo comparte una clave, renovada en cada alta, baja o salida: un miembro expulsado no puede leer lo que sigue. No hay servidor de grupo: cada mensaje se envía a cada miembro, y un miembro ausente se pone al día con los demás, incluso si el autor se ha ido. Una invitación espera el consentimiento de la persona invitada.

Rotación de la clave de grupo
Renovación de la clave de grupo (diagrama en inglés).

6. Fotos y archivos

El mensaje solo anuncia que existe un archivo. El destinatario lo solicita; se divide en fragmentos de 48 KiB, cada uno con una prueba de autenticidad (árbol de Merkle). En un grupo, cualquier miembro que ya tenga el archivo puede aportar una parte, lo que alivia al remitente. Las imágenes se reducen antes del envío y los vídeos se recomprimen.

Archivos adjuntos y árbol de Merkle
Verificación de cada fragmento de archivo (diagrama en inglés).

7. Dentro de la aplicación

Toda la lógica (identidad, cifrado, servidores, grupos, archivos, almacenamiento) está en una biblioteca sin interfaz; la aplicación móvil solo muestra. Los datos están en una base local cifrada.

Arquitectura del cliente
Arquitectura del cliente (diagrama en inglés).

Documentación técnica →