1 Punkte von GN⁺ 3 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • Bitchat ist eine dezentrale P2P-Messaging-App für iOS und macOS, die Bluetooth-Mesh-Netzwerke mit dem internetbasierten Nostr kombiniert und ohne Konto, Telefonnummer oder zentralen Server funktioniert
  • Offline unterstützt sie über Bluetooth LE die Weiterleitung über bis zu 7 Hops; bei Internetverbindung verbindet sie sich über mehr als 290 Nostr-Relays mit weltweiten und standortbasierten Kanälen
  • Private Nachrichten nutzen bevorzugt das Noise Protocol über Bluetooth; wenn keine Verbindung möglich ist, wird auf Nostr NIP-17 umgeschaltet, und wenn beides nicht möglich ist, bleiben sie in der Warteschlange, bis eine Zustellung möglich ist
  • Je nach Geohash-Genauigkeit bietet sie Kanäle auf Ebene von Block, Viertel, Stadt, Bundesland/Provinz und Land sowie IRC-artige Befehle wie /slap, /msg, /who und einen Emergency Wipe, der per dreifachem Tippen Daten löscht
  • Das Projekt wurde als Public Domain veröffentlicht und kann mit Xcode oder just ausgeführt werden; für Builds auf echten Geräten sind jedoch eine Developer Team ID und Entitlement-Einstellungen erforderlich

Übertragungsarchitektur mit Bluetooth und Nostr

  • Bitchat ist eine native iOS- und macOS-App, die Bluetooth-Mesh mit Nostr kombiniert, und ist auch im App Store verfügbar
  • Das Bluetooth-Mesh-Netzwerk erkennt und verbindet Geräte in der Nähe automatisch, ohne Internet
    • Es kommuniziert direkt per Bluetooth LE als P2P und leitet Nachrichten über benachbarte Geräte bis zu 7 Hops weiter
    • Es unterstützt Ende-zu-Ende-Verschlüsselung auf Basis des Noise Protocol und Forward Secrecy
    • Es nutzt ein komprimiertes binäres Paketformat, das auf die Einschränkungen von Bluetooth LE abgestimmt ist, sowie batterieoptimierte Duty Cycles
    • Der Kanal mesh #bluetooth ist für Offline-Kommunikation bei Protesten, Katastrophen, in abgelegenen Regionen und ähnlichen Szenarien gedacht
  • Die Nostr-Transportschicht bietet Internet-Messaging über mehr als 290 weltweite Relays
    • Sie erstellt standortbasierte Chaträume anhand von Geohash-Koordinaten und verwendet pro Region neue temporäre verschlüsselte Identitäten
    • Private Nachrichten werden durch NIP-17 Gift Wrapping geschützt
    • Standortkanäle benötigen eine Internetverbindung und werden für lokale Communities, örtliche Veranstaltungen und regionale Diskussionen genutzt
      • block 7 Zeichen: Häuserblock
      • neighborhood 6 Zeichen: Bezirk oder Viertel
      • city 5 Zeichen: Stadt
      • province 4 Zeichen: Bundesland oder Provinz
      • region 2 Zeichen: Land oder Großregion
  • Das Routing privater Nachrichten wählt automatisch das verfügbare Transportmittel aus
    1. Wenn eine bestehende Noise-Session genutzt werden kann, wird die schnelle und besonders private Bluetooth-Verbindung bevorzugt
    2. Wenn Bluetooth nicht verfügbar ist, wird die Nachricht mit dem öffentlichen Nostr-Schlüssel des Empfängers und NIP-17 über das Relay-Netzwerk gesendet
    3. Wenn beide Wege nicht verfügbar sind, wird die Nachricht in der Warteschlange gespeichert und automatisch zugestellt, sobald eine Verbindung hergestellt ist
  • Außerdem bietet Bitchat LZ4-Nachrichtenkompression, einen adaptiven Akkumodus, Netzwerkoptimierungen, IRC-artige Befehle und einen Emergency Wipe, der per dreifachem Tippen sofort alle Daten löscht
  • Das detaillierte Protokoll ist im Technical Whitepaper beschrieben

Build, Lokalisierung und Lizenz

  • Zum Ausführen in Xcode die folgenden Befehle im Repository verwenden
cd bitchat
open bitchat.xcodeproj
  • Für die Ausführung auf einem echten Gerät müssen lokale Konfiguration und Code Signing vorbereitet werden
    • Mit cp Configs/Local.xcconfig.example Configs/Local.xcconfig die Konfigurationsdatei kopieren
    • Wenn in der neuen Datei die Developer Team ID ergänzt wird, wird die Standard-Bundle-ID auf chat.bitchat.<team_id> gesetzt
    • Das Entitlement group.chat.bitchat muss manuell in group.<your_bundle_id> geändert werden
  • Unter macOS können nach brew install just mit just run die Konfiguration und der Quellcode ausgeführt werden
    • Anschließend stellt just clean den ursprünglichen Zustand für Build und Entwicklung der mobilen App wieder her
  • Lokalisierungsressourcen sind zwischen App und Share Extension aufgeteilt
    • Standard-App-Strings und Pluralregeln werden in Localizable.strings und Localizable.stringsdict unter bitchat/Localization/Base.lproj/ hinzugefügt
    • Strings der Share Extension werden in bitchatShareExtension/Localization/Base.lproj/Localizable.strings verwaltet
    • Schlüssel sollten ihre Absicht ausdrücken, etwa app_info.features.offline.title; vorhandene Schlüssel sollten nach Möglichkeit wiederverwendet werden
    • Lokalisierungsänderungen werden mit xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build auf Kompilierbarkeit geprüft
  • Das Projekt wird als Public Domain verbreitet; die Details stehen in der LICENSE

1 Kommentare

 
GN⁺ 3 시간 전
Hacker-News-Kommentare
  • Gestern den Radicle-Desktop-Client installiert und einen neuen Benutzernamen sowie ein Passwort eingegeben, aber nichts passierte. Auch nach einem Neustart der App kam ich weder an der Kontoerstellung noch am Login-Bildschirm vorbei, und damit war mein Einsatz von Radicle dort beendet

  • Wenn Verfügbarkeit wichtig ist, sollte die Abhängigkeit von libs.gms.location überdacht werden, und die App sollte auch über F-Droid verteilt werden (https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)

    • Es wirkt so, als hätte der Repository-Administrator sowohl die PR-Prüfung als auch das Beantworten von Nachrichten komplett eingestellt. Wenn es weitergehen soll, muss vermutlich jemand einen Fork machen
  • Auf dem Fusion Festival bin ich mit eingeschaltetem Bitchat herumgelaufen und habe etwa 20 Geräte und ein paar Nachrichten gefunden, aber auf meine Nachrichten hat niemand geantwortet. Bei 80.000 Menschen bedeuten 20 Geräte immerhin, dass es nicht gar keine Nutzer gibt, aber auch nicht viele, und mit maximal 2 Hops war die Dichte nicht hoch genug, um das Gelände zu überbrücken

    • Soweit ich weiß, wurde es bei mehreren Protesten genutzt und wird aktuell auch bei den CJP-Protesten in Indien verwendet. Die indische Regierung hat GitHub auch aufgefordert, das Repository zu entfernen
    • Zumindest wurde Mesh-Wi-Fi hinzugefügt, aber abgesehen von Protestsituationen, in denen es um Leben und Tod geht, ist die Verbreitung ziemlich langsam
      Nützlich ist es, wenn man im Flugzeug von der eigenen Gruppe getrennt sitzt, weil man keine 50 Dollar extra zahlen wollte, um nebeneinander zu sitzen
    • Für ein solches Nischenprojekt sind 20 Geräte bereits eine beachtliche Zahl
    • Ziemlich cool, dass es tatsächlich funktioniert. Ich hatte ein AirTag dabei, um auf einem Festival mit 30.000 Menschen meine Gruppe zu finden, aber das war völlig nutzlos
    • Als ich es zuletzt benutzt habe, waren dort nur mit ASCII-Art gezeichnete Hitler-Bilder zu sehen. Aber ein Anfang ist ein Anfang
  • Wenn man sich für BitChat interessiert, lohnt es sich vielleicht, es schon einmal zu installieren, falls es populär wird oder man Leute trifft, mit denen man es zusammen nutzen kann. Als ich es selbst ausprobiert habe, fühlte es sich unwirklich an, ohne Wi-Fi oder Mobilfunk Textnachrichten zu verschicken

    • Ich starte es jedes Mal, wenn ich irgendwo hingehe, wo es voll ist, und schaue nach. Für Internet-Chat statt Mesh hätte ich aber lieber nähebasierten Chat als Geohash. Bei Geohash ist es immer schwer, die richtige Feinheit für den gewünschten Bereich zu wählen
      Überlappende Geohashes wären vielleicht auch okay, aber dann droht die Verwirrung, dass man wie bei einem Funkgerät nur die Hälfte eines Gesprächs sieht, wenn nur eine Seite im Bereich ist. Der aktuelle Geohash geht bis auf etwa 1 Acre herunter und ist damit übertrieben präzise, könnte aber nützlich sein, wenn ein komplettes 12-stöckiges Studentenwohnheim einen einzigen Chatraum nutzt
    • Bluetooth-Chat-Apps gibt es bereits. Letztes Jahr habe ich auf einem Ryanair-Flug in Europa Berkanan benutzt, das ich im App Store gefunden hatte, um mit Freunden zu sprechen, die weit weg von mir saßen. Es sieht schrecklich aus, funktioniert aber zuverlässig
  • Die Radicle-Website zeigt als Git-Repository-Plattform ein interessantes Design. Mir gefallen die vollbreiten Seitenränder, die gut strukturierte Navigation und das ansprechend gerenderte Code-Layout

    • Ich frage mich, ob man einen Dienst bauen könnte, der beliebige Git-Repository-URLs anbindet und sie in derselben Form darstellt
  • Bitchat ist ein Projekt von AOS Projekt. Es überrascht, dass es nicht erneut auf ngit gehostet wurde, einem anderen AOS-Projekt

    • Dass es keinen Mirror auf ngit gibt, ist etwas überraschend, aber dass es nicht als primärer Hosting-Ort genutzt wird, ist nachvollziehbar. Es muss dort sein, wo Menschen es tatsächlich finden können
      Wenn man in Nostr-Purismus verfällt, endet es oft damit, dass nur 5 Leute die Beiträge sehen. Ich mag das Protokoll, aber um Nutzer zu gewinnen, muss man Apps dort platzieren, wo die Leute bereits sind
  • Ich frage mich, ob es im Vergleich zu anderen dezentralen Messaging-Produkten wie Nostr oder XMTP besondere Funktionen gibt