FreeSpeech

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.

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.

Échange de fiche de contact par code à usage unique
Échange de contact par code à usage unique.

3. Envoyer un message

  1. L'application signe le message avec votre clé, puis le chiffre pour le destinataire avec une clé éphémère neuve à chaque message.
  2. Elle l'envoie à un serveur par une connexion WebSocket. Le serveur lit l'enveloppe (de qui, pour qui) et rien d'autre.
  3. Si le destinataire est connecté, le serveur lui transmet le message immédiatement.
  4. 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.
  5. 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.

Connexion simultanée à plusieurs serveurs
Connexion simultanée à tous vos serveurs.

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.

Rotation de la clé de groupe
Renouvellement de la clé de groupe.

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.

Pièces jointes et arbre de Merkle
Vérification de chaque morceau de fichier.

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.

Architecture du client
Architecture du client.

Documentation technique →