Comment FreeSpeech fonctionne
Le client fait presque tout. Le serveur est un simple relais : il met en relation deux appareils connectés, et il oublie.
1. Une identité sans compte
À la création, l'application tire trois phrases au hasard. De ces trois phrases, on calcule (Argon2id, puis HKDF) une paire de clés pour chiffrer et une paire de clés pour signer. Votre identifiant est l'empreinte de vos clés publiques.
- Rien n'est envoyé à un serveur pour « créer » l'identité : elle existe dès que vous avez vos phrases.
- Saisir les mêmes phrases sur un autre téléphone redonne la même identité : c'est ainsi qu'on change d'appareil ou qu'on en utilise plusieurs.
- Les phrases ne sont jamais stockées dans l'application. Sauvegardez-les (papier, fichier protégé par mot de passe) : sans elles, pas de récupération.
2. Devenir contact
Deux personnes échangent une fiche de contact (clés publiques, pseudo, liste de serveurs) par QR code en personne, ou par un message copié à distance. La fiche est protégée par un code à usage unique, valable 10 minutes pour un QR et 30 jours pour une fiche copiée. Ensuite, vous pouvez comparer un numéro de sécurité, identique des deux côtés, pour vous assurer que personne ne s'est glissé dans l'échange.
3. Envoyer un message
- L'application signe le message avec votre clé, puis le chiffre pour le destinataire avec une clé éphémère neuve à chaque message.
- Elle l'envoie à un serveur par une connexion WebSocket. Le serveur lit l'enveloppe (de qui, pour qui) et rien d'autre.
- Si le destinataire est connecté, le serveur lui transmet le message immédiatement.
- S'il est hors ligne, le serveur ne garde rien. Le message reste dans la file d'envoi de votre appareil, et une notification le réveille. Dès qu'il se reconnecte, le message part.
- Le destinataire vérifie la signature et déchiffre.
Les notifications ne contiennent jamais le message : elles disent seulement à l'application de se connecter pour aller voir.
4. Plusieurs serveurs
Un serveur n'est pas un point central. Votre fiche de contact liste vos serveurs par ordre de préférence ; votre appareil se connecte à tous les vôtres en même temps, et, pour envoyer, essaie ceux de votre contact dans l'ordre.
- Les serveurs publics peuvent se reconnaître entre eux (liste blanche, requêtes signées) et se transmettre un message quand le destinataire est connecté ailleurs.
- Un serveur privé (entreprise, association, famille) n'apparaît chez personne d'autre : seuls ceux à qui vous donnez votre fiche connaissent son adresse.
- Si un serveur tombe, l'envoi passe par un autre. Si un serveur est saturé, il peut vous rediriger vers un serveur frère, et l'application prévient alors vos contacts de votre nouvelle adresse.
5. Groupes
Un groupe partage une clé, renouvelée à chaque ajout, retrait ou départ : un membre exclu ne lit pas la suite. Il n'y a pas de serveur de groupe : chaque message est envoyé à chaque membre, et un membre absent rattrape ce qu'il a manqué auprès des autres membres, même si l'auteur est parti. Une invitation attend l'accord de la personne invitée.
6. Photos et fichiers
Le message n'annonce que l'existence du fichier. Le destinataire le demande ; il est découpé en morceaux de 48 Kio, chacun accompagné d'une preuve qui permet de vérifier son authenticité (arbre de Merkle). Dans un groupe, tout membre qui possède déjà le fichier peut en fournir une partie, ce qui allège l'expéditeur. Les images sont réduites avant l'envoi et les vidéos recompressées.
7. Dans l'application
Toute la logique (identité, chiffrement, serveurs, groupes, fichiers, stockage) est dans une bibliothèque sans interface ; l'application mobile ne fait qu'afficher. Les données sont dans une base locale chiffrée.
FreeSpeech