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
| Documento | Contenido |
|---|---|
sources/PROTOCOL.en.md | El protocolo: identidad, contactos, mensajes, archivos adjuntos, grupos, multiservidor, notificaciones, transporte WebSocket. |
sources/ARCHITECTURE.en.md | Componentes, criptografía, almacenamiento cifrado, esquema de la base de datos, modelo de seguridad y límites conocidos. |
state.en.md | Estado de avance: lo hecho, lo probado y lo que queda. |
sources/SERVER_INSTALLATION.en.md | Instalar 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.md | Administrar un relé o una pasarela push sin reiniciar: invitaciones, vetos, servidores vecinos, registros, seguimiento. |
sources/DEPLOYMENT_PUSH.en.md | Instalar la pasarela push (una clave por relé, mantenimiento, límites). |
sources/CONSOLE_ADMIN.en.md | Consola 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
| Uso | Primitiva |
|---|---|
| Identidad (claves derivadas de 3 frases) | Argon2id (32 MiB, t = 3) y después HKDF-SHA256 |
| Acuerdo de clave por mensaje | X25519 efímera y después HKDF-SHA256 |
| Cifrado | ChaCha20-Poly1305 |
| Firma | Ed25519, vinculada al remitente, al destinatario y al tipo de mensaje |
| Grupos | Clave compartida por época, renovada en cada cambio de miembros |
| Archivos adjuntos | Fragmentos de 48 KiB, árbol de Merkle SHA-256 |
| Base de datos local | SQLite cifrado con SQLCipher, clave derivada de las frases |
| Servidor a servidor | Peticiones 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
- El contenido de los mensajes y de los archivos adjuntos está cifrado de extremo a extremo y firmado; los servidores nunca lo ven.
- La base de datos local, claves privadas incluidas, está cifrada en reposo.
- Expulsar a un miembro de un grupo le impide leer lo que sigue (renovación de clave).
- Cada fragmento de archivo se comprueba contra un hash que un atacante no puede falsificar.
- Un servidor no puede hacerse pasar por un usuario: el registro exige una prueba de posesión de la clave.
Límites asumidos
- Metadatos: un servidor ve el remitente, el destinatario, las marcas de tiempo y las horas de conexión.
- Sin ratchet: la clave a largo plazo del destinatario descifra el tráfico pasado si se la roban. Perder las frases es perder la identidad; robarlas es robarla.
- Un miembro de grupo deshonesto puede pasar la clave vigente a una persona expulsada, fuera del protocolo.
- «Eliminar para todos» y «editar» son de mejor esfuerzo: un cliente modificado puede ignorarlos, y el destinatario pudo copiar el mensaje antes.
- Los archivos recibidos se guardan sin cifrar en el espacio protegido de la aplicación en el dispositivo.
- Teléfono robado: el PIN protege la pantalla, no el cifrado. El borrado remoto destruye la copia del teléfono pero no revoca la identidad.
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).
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.
FreeSpeech