Documentation technique
Pour ceux qui veulent vérifier ou réimplémenter. Les documents complets sont dans le dépôt de code, en français et en anglais.
Documents
| Document | Contenu |
|---|---|
sources/PROTOCOL.fr.md | Le protocole : identité, contacts, messages, pièces jointes, groupes, multi-serveur, push, transport WebSocket. |
sources/ARCHITECTURE.fr.md | Composants, cryptographie, stockage chiffré, schéma de la base, modèle de sécurité et limites connues. |
state.fr.md | État d'avancement : ce qui est fait, testé, et ce qui reste. |
sources/SERVER_INSTALLATION.fr.md | Installer son propre serveur relais, public ou privé (ASP.NET Core 10, nginx, systemd). sources/DEPLOYMENT.fr.md en donne l'exemple concret. |
sources/ADMINISTRATION.fr.md | Administrer un relais ou une passerelle push sans redémarrer : invitations, bannissements, serveurs voisins, journaux, suivi. |
sources/DEPLOYMENT_PUSH.fr.md | Installer la passerelle push (une clé par relais, maintenance, limites). |
sources/CONSOLE_ADMIN.md | Console d'administration web (édition Pro) : installation, rôles, double authentification, audit. |
sources/diagrams/ | 14 schémas explicatifs, en français et en anglais. |
Chaque document existe en français (.md) et en anglais (.en.md).
Cryptographie en bref
| Usage | Primitive |
|---|---|
| Identité (clés dérivées de 3 phrases) | Argon2id (32 Mio, t = 3), puis HKDF-SHA256 |
| Accord de clé d'un message | X25519 éphémère par message, puis HKDF-SHA256 |
| Chiffrement | ChaCha20-Poly1305 |
| Signature | Ed25519, liée à l'expéditeur, au destinataire et à un type de message |
| Groupes | Clé partagée par époque, renouvelée à chaque changement de composition |
| Pièces jointes | Morceaux de 48 Kio, arbre de Merkle SHA-256 |
| Base locale | SQLite chiffré par SQLCipher, clé dérivée des phrases |
| Serveur à serveur | Requêtes signées HMAC-SHA256, fenêtre de 120 s, nonce à usage unique |
La cryptographie est implémentée avec BouncyCastle (code managé, portable sur Android et iOS), et vérifiée par des vecteurs de test figés.
Ce que la conception protège, et ce qu'elle ne protège pas
Protégé
- Le contenu des messages et des pièces jointes est chiffré de bout en bout et signé ; les serveurs ne le voient jamais.
- La base locale, clés privées comprises, est chiffrée au repos.
- Exclure un membre d'un groupe l'empêche de lire la suite (renouvellement de clé).
- Chaque morceau de fichier est vérifié contre un hash qu'un attaquant ne peut pas forger.
- Un serveur ne peut pas se faire passer pour un utilisateur : l'inscription exige une preuve de possession de la clé.
Limites assumées
- Métadonnées : un serveur voit l'expéditeur, le destinataire, les horodatages et les heures de connexion.
- Pas de ratchet : la clé à long terme du destinataire déchiffre le trafic passé si elle est volée. Perdre ses phrases fait perdre l'identité ; les voler la vole.
- Un membre de groupe malhonnête peut transmettre la clé courante à une personne exclue, hors protocole.
- « Supprimer pour tous » et « modifier » sont au mieux : un client modifié peut les ignorer, et le destinataire a pu copier le message avant.
- Les fichiers reçus sont stockés en clair dans l'espace protégé de l'application sur l'appareil.
- Téléphone volé : le code PIN protège l'écran, pas le chiffrement. L'effacement à distance détruit la copie du téléphone mais ne révoque pas l'identité.
Signaler une faille : contact@rebisway.com.
Héberger son serveur
Un serveur relais est une application ASP.NET Core 10 derrière nginx. Il ne stocke aucun message. Un serveur privé n'a besoin d'aucune déclaration : donnez son adresse dans votre fiche de contact. Un serveur public peut s'associer à d'autres serveurs publics par échange d'un secret partagé (liste blanche administrée à la main). Un serveur privé peut en outre ne recevoir que les personnes qu'il a invitées. Le guide pas à pas est sources/SERVER_INSTALLATION.fr.md ; l'administration au quotidien est dans sources/ADMINISTRATION.fr.md.
Serveur de référence : https://fs.rebisway.com (Réglages → Serveurs → ajouter).
Licence
FreeSpeech est un logiciel libre. Le code est publié sous licence GNU AGPL v3 ou ultérieure : vous pouvez l'étudier, le modifier et le redistribuer selon ses termes. Le serveur étant un service réseau, quiconque en exploite une version modifiée doit en offrir le code source à ses utilisateurs. Une licence commerciale distincte est possible sur demande, pour intégrer FreeSpeech dans un produit qui ne peut pas respecter l'AGPL : contact@rebisway.com. La console d'administration web (édition Pro) est distribuée séparément ; elle n'utilise que les API d'administration publiques des serveurs.
FreeSpeech