Comment fonctionne BitChat et pourquoi les messageries en mesh Bluetooth reviennent au goût du jour

Lorsque le réseau cellulaire disparaît complètement lors d'un festival de musique ou en montagne, les applications familières se transforment en icônes inutiles. Le signal n'arrive nulle part et les antennes sont saturées. Dans ces situations, les solutions peer-to-peer capables de transmettre des données directement d'un smartphone à un autre s'avèrent utiles.
Le projet BitChat propose une approche intéressante de ce problème. Les développeurs ont combiné un réseau local hors ligne sur Bluetooth LE avec le protocole Nostr global. Le résultat est un messenger hybride dans le style de l'IRC classique, fonctionnant sans comptes et sans serveurs centraux.
Fonctionnement de la transmission des messages
BitChat repose sur une architecture double. L'application ajuste automatiquement le transport en fonction des conditions de connectivité actuelles.
Premier niveau : Mesh Bluetooth LE. Si le destinataire est à proximité, le message part directement. Lorsque le destinataire se trouve hors de portée Bluetooth, le paquet circule le long d'une chaîne via les smartphones d'autres utilisateurs. L'architecture prend en charge jusqu'à 7 sauts intermédiaires de ce type. Aucun accès internet n'est nécessaire pour cela. La sécurité est assurée par le protocole Noise, qui assure le chiffrement de bout en bout des paquets au niveau local.
Deuxième niveau : protocole Nostr. Si un canal Bluetooth direct n'est pas disponible mais qu'il y a un accès réseau, BitChat envoie les données via les relais Nostr publics.
Les salons publics sont organisés à l'aide de geohashes. Le niveau de précision dépend de la longueur de la chaîne de hachage des coordonnées :
block(7 caractères) : chat au sein d'un pâté de maisonsneighborhood(6 caractères) : niveau quartiercity(5 caractères) : chat à l'échelle d'une villeregion(2 caractères) : tout un pays
Lors de l'envoi d'un message privé, le messenger recherche d'abord une connexion Bluetooth directe. S'il n'y a pas d'appareils à proximité, il bascule vers Nostr et empaquète le texte à l'aide de l'algorithme NIP-17. Lorsqu'il n'y a ni internet ni de voisins Bluetooth, le message reste en file d'attente jusqu'à ce qu'un canal disponible apparaisse.
Détails de l'implémentation et interface
Visuellement, BitChat ressemble aux chats textuels de la fin des années quatre-vingt-dix. Il prend en charge des commandes familières comme /slap, /msg ou /who. Il n'y a aucun processus d'inscription. Au premier lancement, l'application génère des clés cryptographiques temporaires sans demander de numéro de téléphone ni d'e-mail.
Plusieurs solutions techniques intéressantes dans le projet :
- Suppression d'urgence. Un triple tapotement sur l'écran efface définitivement le stockage local et les clés cryptographiques.
- Compression du trafic. Les données sont compressées via LZ4 avant l'envoi, ce qui est critique pour la faible bande passante du Bluetooth LE.
- Optimisation de la consommation d'énergie. En mode hors ligne, le chat modifie dynamiquement les intervalles de balayage ether, préservant ainsi la charge de la batterie.
- Open source. Le dépôt est publié sous la Unlicense et peut être librement forké ou utilisé dans des produits commerciaux.
Comment exécuter le projet
Le code source est écrit en Swift pour iOS et macOS.
Le moyen le plus rapide d'exécuter la version bureau est via l'utilitaire just :
brew install just
just run
La commande compilera l'application et la lancera sur votre Mac. Pour nettoyer les fichiers générés après les tests, appelez just clean.
Pour compiler pour iOS dans Xcode, vous devrez effectuer la préparation standard de la configuration :
cd bitchat
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
Après cela, ouvrez simplement bitchat.xcodeproj, définissez votre ID d'équipe de développeur dans le fichier Local.xcconfig et mettez à jour le nom du groupe dans les entitlements.
Pourquoi étudier ce dépôt
Personne n'utilisera probablement BitChat comme messenger principal au quotidien. Cependant, le projet présente un intérêt considérable d'un point de vue ingénierie.
Dans le code, vous pouvez trouver une implémentation propre d'un protocole binaire personnalisé sur CoreBluetooth, la gestion des geohashes et l'intégration des relais Nostr. Dans le même temps, l'application est déjà prête à l'emploi et publiée sur l'App Store, elle peut donc être conservée sur votre appareil comme option de communication de secours pour la randonnée ou les grands concerts.
Projets similaires