FreeSpeech

Documentación técnica

Para quienes quieran verificar o reimplementar. Los documentos completos están en el repositorio de código, en francés e inglés (no hay traducción al español).

Documentos

DocumentoContenido
sources/PROTOCOL.en.mdEl protocolo: identidad, contactos, mensajes, archivos adjuntos, grupos, multiservidor, notificaciones, transporte WebSocket.
sources/ARCHITECTURE.en.mdComponentes, criptografía, almacenamiento cifrado, esquema de la base de datos, modelo de seguridad y límites conocidos.
state.en.mdEstado de avance: lo hecho, lo probado y lo que queda.
sources/SERVER_INSTALLATION.en.mdInstalar tu propio servidor retransmisor, público o privado (ASP.NET Core 10, nginx, systemd). sources/DEPLOYMENT.en.md da el ejemplo concreto. En francés e inglés.
sources/ADMINISTRATION.en.mdAdministrar un relé o una pasarela push sin reiniciar: invitaciones, vetos, servidores vecinos, registros, seguimiento.
sources/DEPLOYMENT_PUSH.en.mdInstalar la pasarela push (una clave por relé, mantenimiento, límites).
sources/CONSOLE_ADMIN.en.mdConsola de administración web (edición Pro): instalación, roles, doble autenticación, auditoría.
sources/diagrams/14 diagramas explicativos, en francés e inglés.

Criptografía en breve

UsoPrimitiva
Identidad (claves derivadas de 3 frases)Argon2id (32 MiB, t = 3) y después HKDF-SHA256
Acuerdo de clave por mensajeX25519 efímera y después HKDF-SHA256
CifradoChaCha20-Poly1305
FirmaEd25519, vinculada al remitente, al destinatario y al tipo de mensaje
GruposClave compartida por época, renovada en cada cambio de miembros
Archivos adjuntosFragmentos de 48 KiB, árbol de Merkle SHA-256
Base de datos localSQLite cifrado con SQLCipher, clave derivada de las frases
Servidor a servidorPeticiones firmadas con HMAC-SHA256, ventana de 120 s, nonce de un solo uso

La criptografía está implementada con BouncyCastle (código gestionado, portable a Android e iOS) y verificada con vectores de prueba fijos.

Qué protege el diseño y qué no

Protegido

Límites asumidos

Para notificar una vulnerabilidad: contact@rebisway.com.

Alojar tu propio servidor

Un servidor retransmisor es una aplicación ASP.NET Core 10 detrás de nginx. No almacena ningún mensaje. Un servidor privado no requiere ningún registro: pon su dirección en tu ficha de contacto. Un servidor público puede asociarse con otros servidores públicos intercambiando un secreto compartido (una lista blanca gestionada a mano). Un servidor privado puede además aceptar solo a las personas que ha invitado. La guía paso a paso es sources/SERVER_INSTALLATION.en.md; la administración diaria está en sources/ADMINISTRATION.en.md.

Servidor de referencia: https://fs.rebisway.com (Ajustes → Servidores → añadir).

Traslado de un cliente a un servidor hermano
Un cliente pasa a un servidor hermano (diagrama en inglés).
Notificaciones a través de varias pasarelas
Notificaciones: varias pasarelas y disyuntor (diagrama en inglés).

Licencia

FreeSpeech es software libre. El código se publica bajo la licencia GNU AGPL v3 o posterior: puedes estudiarlo, modificarlo y redistribuirlo según sus términos. Como el servidor es un servicio de red, quien explote una versión modificada debe ofrecer su código fuente a los usuarios de ese servicio. Hay una licencia comercial aparte, bajo petición, para integrar FreeSpeech en un producto que no pueda cumplir la AGPL: contact@rebisway.com. La consola de administración web (edición Pro) se distribuye por separado; solo usa las API de administración públicas de los servidores.