1 points par GN⁺ 3 시간 전 | 1 commentaires | Partager sur WhatsApp
  • Bitchat est une application de messagerie P2P décentralisée pour iOS et macOS, qui combine un réseau maillé Bluetooth et Nostr via Internet, et fonctionne sans compte, numéro de téléphone ni serveur central
  • Hors ligne, elle prend en charge le relais jusqu’à 7 sauts via Bluetooth LE ; avec une connexion Internet, elle se connecte à des canaux mondiaux et géolocalisés via plus de 290 relais Nostr
  • Les messages privés utilisent en priorité le Noise Protocol de Bluetooth ; si la connexion est impossible, ils basculent vers NIP-17 de Nostr, et si les deux options sont indisponibles, ils restent en file d’attente jusqu’à ce qu’un envoi soit possible
  • Selon la précision du geohash, elle propose des canaux à l’échelle du pâté de maisons, du quartier, de la ville, de la province ou du pays, avec des commandes de type IRC comme /slap, /msg, /who, ainsi qu’un Emergency Wipe qui efface les données après trois appuis
  • Le projet est publié dans le domaine public et peut être lancé avec Xcode ou just, mais une compilation pour appareil réel nécessite un Developer Team ID et la configuration des entitlements

Architecture de transmission combinant Bluetooth et Nostr

  • Bitchat est une application native iOS et macOS combinant un maillage Bluetooth et Nostr, également disponible sur l’App Store
  • Le réseau maillé Bluetooth détecte et connecte automatiquement les appareils à proximité sans Internet
    • Communication P2P directe via Bluetooth LE, avec relais des messages jusqu’à 7 sauts en passant par les appareils voisins
    • Chiffrement de bout en bout basé sur Noise Protocol et prise en charge de la confidentialité persistante
    • Format de paquets binaires compressés adapté aux contraintes du Bluetooth LE et cycle d’activité optimisé pour la batterie
    • Le canal mesh #bluetooth vise les communications hors ligne lors de manifestations, de catastrophes ou dans des zones isolées
  • La couche de transport Nostr fournit une messagerie Internet via plus de 290 relais dans le monde
    • Création de salons de discussion géolocalisés à partir de coordonnées geohash, avec une nouvelle identité chiffrée temporaire pour chaque zone
    • Les messages privés sont protégés par le gift wrapping NIP-17
    • Les canaux de localisation nécessitent une connexion Internet et servent aux communautés locales, événements de proximité et discussions régionales
      • block 7 caractères : pâté de maisons
      • neighborhood 6 caractères : secteur·quartier
      • city 5 caractères : ville
      • province 4 caractères : province·département
      • region 2 caractères : pays·grande région
  • Le routage des messages privés choisit automatiquement le moyen de transport disponible
    1. Si une session Noise existante est disponible, il privilégie la connexion Bluetooth, rapide et plus privée
    2. Si Bluetooth n’est pas disponible, il envoie via le réseau de relais en utilisant la clé publique Nostr du destinataire et NIP-17
    3. Si aucune des deux méthodes n’est disponible, le message est conservé en file d’attente puis transmis automatiquement dès qu’une connexion est établie
  • Bitchat propose aussi la compression des messages avec LZ4, un mode batterie adaptatif, des optimisations réseau, des commandes de type IRC et un Emergency Wipe qui supprime immédiatement toutes les données après trois appuis
  • Le protocole détaillé est disponible dans le Technical Whitepaper

Build, localisation et licence

  • Pour l’exécuter dans Xcode, utilisez les commandes suivantes depuis le dépôt
cd bitchat
open bitchat.xcodeproj
  • Pour l’exécuter sur un appareil réel, il faut préparer la configuration locale et la signature du code
    • Dupliquez le fichier de configuration avec cp Configs/Local.xcconfig.example Configs/Local.xcconfig
    • En ajoutant le Developer Team ID au nouveau fichier, le Bundle ID par défaut devient chat.bitchat.<team_id>
    • Il faut modifier manuellement l’entitlement group.chat.bitchat en group.<your_bundle_id>
  • Sur macOS, après brew install just, just run permet de configurer et de lancer les sources
    • Ensuite, just clean restaure l’état initial pour le build et le développement de l’app mobile
  • Les ressources de localisation sont réparties entre l’app et l’extension de partage
    • Les chaînes de l’app principale et les règles de pluriel s’ajoutent dans Localizable.strings et Localizable.stringsdict sous bitchat/Localization/Base.lproj/
    • Les chaînes de l’extension de partage sont gérées dans bitchatShareExtension/Localization/Base.lproj/Localizable.strings
    • Les clés doivent exprimer l’intention, comme app_info.features.offline.title, et réutiliser autant que possible les clés existantes
    • Les changements de localisation se vérifient à la compilation avec xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build
  • Le projet est distribué dans le domaine public ; les conditions détaillées sont disponibles dans LICENSE

1 commentaires

 
GN⁺ 3 시간 전
Avis sur Hacker News
  • Hier, j’ai installé le client desktop Radicle et saisi un nouveau nom d’utilisateur et un mot de passe, mais rien ne s’est passé. Même après avoir redémarré l’application, impossible de dépasser l’écran de création de compte/connexion ; mon utilisation de Radicle s’est arrêtée là.

  • Si la disponibilité est importante, il faudrait réexaminer la dépendance libs.gms.location et distribuer aussi l’application sur F-Droid (https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)

    • Le mainteneur du dépôt semble avoir cessé à la fois de relire la PR et de répondre aux messages. Pour continuer, il y a de fortes chances que quelqu’un doive faire un fork.
  • Au Fusion Festival, je me suis promené avec Bitchat activé et j’ai trouvé environ 20 appareils et quelques messages, mais personne n’a répondu aux messages que j’ai envoyés. Sur 80 000 personnes, 20 appareils, ce n’est pas zéro utilisateur, mais ce n’est pas énorme non plus, et le réseau n’allait pas au-delà de 2 sauts, donc la densité n’était pas suffisante pour traverser le site du festival.

    • Je crois savoir qu’il a été utilisé dans plusieurs manifestations, et qu’il l’est actuellement aussi dans les manifestations du CJP en Inde. Le gouvernement indien a même demandé à GitHub de supprimer le dépôt.
    • Au moins, le Wi-Fi maillé a été ajouté, mais hors situations de manifestation où des vies peuvent être en jeu, l’adoption reste assez lente.
      C’est utile dans l’avion quand on est séparé de ses compagnons de voyage parce qu’on n’a pas voulu payer 50 dollars de plus pour être assis ensemble.
    • Pour ce genre de projet de niche, 20 appareils, c’est déjà un chiffre assez notable.
    • Le fait que ça fonctionne vraiment est plutôt chouette. J’avais apporté un AirTag à un festival de 30 000 personnes pour retrouver mon groupe, mais il était complètement inutilisable.
    • La dernière fois que je l’ai utilisé, il n’y avait qu’une image de Hitler en ASCII art. Mais un début reste un début.
  • Si BitChat vous intéresse, ça vaut le coup de l’installer dès maintenant au cas où il deviendrait populaire, ou pour le jour où vous croiserez quelqu’un avec qui l’utiliser. En l’essayant moi-même, échanger des SMS sans Wi-Fi ni réseau mobile donnait une impression irréelle.

    • Chaque fois que je vais dans un endroit bondé, je le lance pour vérifier. Cela dit, pour le chat Internet non maillé, j’aimerais avoir un chat basé sur la proximité plutôt que sur le géohash. Avec les géohash, il est toujours difficile de choisir le bon niveau de granularité.
      Des géohash imbriqués pourraient aussi convenir, mais je crains la confusion façon talkie-walkie, où l’on ne voit que la moitié de la conversation si une seule personne est dans la zone. Le géohash actuel peut descendre à environ 1 acre, ce qui est trop précis, mais cela peut être utile si tout un dortoir universitaire de 12 étages utilise le même salon.
    • Les apps de chat Bluetooth existent déjà. L’an dernier, sur un vol Ryanair en Europe, j’ai utilisé Berkanan, que j’avais trouvée sur l’App Store, pour parler avec des amis assis loin de moi ; l’interface était atroce, mais la fonctionnalité marchait correctement.
  • Le site de Radicle présente un design intéressant pour une plateforme de dépôts Git. J’aime bien les marges pleine largeur, la navigation bien structurée et le rendu agréable du code.

    • Je me demande s’il serait possible de créer un service qui prendrait l’URL de n’importe quel dépôt Git et l’afficherait sous cette forme.
  • Bitchat est un projet d’AOS. Je suis surpris qu’il n’ait pas été réhébergé sur ngit, un autre projet d’AOS.

    • L’absence de miroir sur ngit est un peu surprenante, mais je comprends qu’il n’en ait pas fait son hébergement principal. Il faut que le projet soit là où les gens peuvent réellement le découvrir.
      Quand on tombe dans le purisme Nostr, on se retrouve souvent avec seulement 5 personnes qui voient les publications. J’aime le protocole, mais pour attirer des utilisateurs, il faut placer les apps là où les gens se trouvent déjà.
  • Je me demande s’il a des fonctions particulières par rapport à d’autres produits de messagerie décentralisée comme Nostr ou XMTP.