Un système que vous pouvez comprendre
La plupart des applications de messagerie vous demandent de leur faire confiance. Elles affirment que vos messages sont chiffrés, que vos données sont en sécurité, que votre vie privée compte… puis font tout transiter par leurs serveurs, où votre contenu existe sous une forme que vous ne pouvez ni vérifier ni contrôler.
MindTheClub adopte une approche différente. Au lieu de demander votre confiance, nous avons construit un système assez simple pour être compris, afin que vous puissiez raisonner vous-même sur ce qui arrive à vos données. Nous pensons que la qualité la plus importante d'un outil de communication est la prévisibilité : quand vous envoyez un message, vous devriez savoir exactement où il va, quel chemin il emprunte et où il aboutit. Sans surprises.
Voici comment ça marche.
MindTheClub est une application de messagerie pair-à-pair. Quand vous envoyez un message, il voyage directement de votre téléphone à celui du destinataire. Il n'y a aucun serveur MindTheClub entre les deux qui stocke, lit, traite ou relaie votre contenu.
C'est rendu possible par WebRTC, le même standard ouvert qui alimente les appels vidéo dans votre navigateur. WebRTC établit un canal de données direct et chiffré entre deux appareils. Votre message entre dans ce canal d'un côté et en sort de l'autre. C'est tout le trajet.
Quand deux appareils sont derrière des pare-feu ou sur des réseaux mobiles qui rendent les connexions directes difficiles, la connexion est relayée par un serveur TURN hébergé sur le réseau mondial de Cloudflare. Même dans ce cas, le relais ne fait que transmettre des paquets chiffrés : il ne peut pas lire le contenu. Voyez-le comme un facteur qui transporte une enveloppe scellée : il connaît la destination, mais ne voit jamais ce qu'il y a à l'intérieur.
Avant que deux appareils puissent établir une connexion directe, ils doivent convenir de comment se connecter, en échangeant adresses réseau, clés de chiffrement et paramètres de connexion. Cette négociation s'appelle la signalisation, et c'est la seule étape qui touche un serveur.
MindTheClub utilise un Cloudflare Worker comme relais de signalisation léger. Les données de signalisation sont éphémères : elles ne servent qu'à établir la connexion et n'ont aucune valeur ensuite. Elles ne contiennent aucun contenu de message.
Une fois la signalisation terminée et le canal WebRTC ouvert, le rôle du serveur s'arrête. Tout ce qui suit se passe directement entre les deux appareils.
Les téléphones mobiles économisent agressivement leur batterie. Quand un téléphone est inactif, ses connexions réseau sont suspendues. Alors, comment envoyer un message à quelqu'un dont le téléphone dort ?
MindTheClub utilise Firebase Cloud Messaging (FCM), la même infrastructure de notifications push qu'utilise pratiquement toute application Android, pour envoyer un léger signal de réveil. Ce signal ne contient aucun contenu de message ; il dit simplement à l'appareil du destinataire : « Quelqu'un veut t'envoyer quelque chose. Réveille-toi et connecte-toi. »
L'appareil du destinataire se réveille, établit une connexion WebRTC vers l'expéditeur, et le message est transmis directement, en pair-à-pair, comme toujours.
Une photo, une vidéo, une note vocale : cela peut peser plusieurs mégaoctets, et les connexions mobiles peuvent s'interrompre à tout moment. Envoyer un gros fichier d'un seul bloc signifierait tout recommencer à zéro au moindre problème.
MindTheClub découpe les contenus volumineux en petits blocs et les envoie séquentiellement par le canal de données WebRTC. L'appareil récepteur réassemble les blocs et vérifie le résultat. Si la connexion tombe en cours de transfert, seuls les blocs manquants doivent être retransmis, pas le fichier entier.
C'est le même principe qu'utilise tout protocole fiable de transfert de fichiers. Ce n'est pas nouveau, mais c'est essentiel pour une bonne expérience sur les réseaux mobiles réels.
Que se passe-t-il si votre destinataire est en avion, si son téléphone est éteint ou s'il traverse un tunnel ? Le message ne peut pas être livré maintenant, mais il doit l'être un jour.
MindTheClub utilise le WorkManager d'Android pour garantir la livraison. Quand un message ne peut pas partir immédiatement, il est conservé localement et programmé pour une nouvelle tentative. WorkManager survit aux redémarrages de l'application, aux redémarrages de l'appareil et à l'optimisation de la batterie. Il réessaiera, avec des délais appropriés, jusqu'à ce que le message soit livré.
Combiné aux signaux de réveil FCM, cela crée une chaîne de livraison fiable : votre message est conservé en sécurité sur votre appareil, un signal de réveil part quand le destinataire est probablement joignable, et le transfert direct s'achève dès que les deux appareils sont en ligne. À aucun moment le contenu du message ne reste sur un serveur en attendant d'être récupéré.
La messagerie de groupe dans un système pair-à-pair pose un défi singulier. Dans une application traditionnelle, vous envoyez une copie au serveur et le serveur la distribue à chaque membre du groupe. Sans serveur, l'expéditeur devrait se connecter à chaque membre individuellement, ce qui passe mal à l'échelle et échoue totalement si certains membres sont injoignables.
MindTheClub résout cela avec un protocole gossip. L'expéditeur transmet le message aux membres du groupe qu'il peut atteindre. Ces membres peuvent à leur tour relayer le message aux membres que l'expéditeur n'a pas pu joindre. Comme une rumeur qui se répand dans une pièce, le message se propage jusqu'à ce que tout le monde en ait une copie.
Si un membre du groupe se connecte plus tard et découvre qu'il lui manque un message, il le demande à n'importe quel membre qui l'a déjà, pas seulement à l'expéditeur d'origine. Cela rend la livraison de groupe résiliente : aucun appareil n'est un goulot d'étranglement, et le groupe ne dépend pas de la présence en ligne d'un membre en particulier.
Quand vous utilisez MindTheClub, le comportement du système est prévisible :
Nous n'avons pas construit MindTheClub ainsi parce que le pair-à-pair est à la mode. Nous l'avons construit ainsi parce que cela produit un système dont vous pouvez prédire et vérifier le comportement. Et nous pensons que c'est une meilleure fondation pour la confiance que n'importe quelle politique de confidentialité.