- 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
- Wenn eine bestehende Noise-Session genutzt werden kann, wird die schnelle und besonders private Bluetooth-Verbindung bevorzugt
- 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
- 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
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#...)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
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
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
Ü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
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
Bitchat ist ein Projekt von AOS Projekt. Es überrascht, dass es nicht erneut auf ngit gehostet wurde, einem anderen AOS-Projekt
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
Diskussion vom Vortag: „Government orders GitHub to remove Bluetooth-based chat app Bitchat: Jack Dorsey“
https://news.ycombinator.com/item?id=49036433