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.
- No se envía nada a ningún servidor para «crear» la identidad: existe en cuanto tienes tus frases.
- Introducir las mismas frases en otro teléfono devuelve la misma identidad: así se cambia de dispositivo o se usan varios.
- Las frases nunca se guardan en la aplicación. Haz una copia (papel, o un archivo protegido con contraseña): sin ellas no hay recuperación.
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.
3. Enviar un mensaje
- La aplicación firma el mensaje con tu clave y lo cifra para el destinatario con una clave efímera nueva en cada mensaje.
- 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.
- Si el destinatario está conectado, el servidor se lo transmite de inmediato.
- 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.
- 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.
- Los servidores públicos pueden reconocerse entre sí (lista blanca, peticiones firmadas) y pasarse un mensaje cuando el destinatario está conectado en otro.
- Un servidor privado (empresa, asociación, familia) no aparece en ningún otro sitio: solo quienes reciben tu ficha conocen su dirección.
- Si un servidor cae, el envío pasa por otro. Si un servidor está saturado, puede redirigirte a un servidor hermano, y la aplicación avisa entonces a tus contactos de tu nueva dirección.
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.
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.
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.
FreeSpeech