>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Swift

Hoe BitChat werkt en waarom Bluetooth Mesh-messengers weer trending zijn

BitChat Icon

Wanneer cellulaire service volledig verdwijnt op een muziekfestival of in de bergen, veranderen bekende apps in nutteloze iconen. Het signaal gaat nergens heen en de zendmasten zijn overbelast. In dergelijke situaties komen peer-to-peer-oplossingen die gegevens rechtstreeks van de ene smartphone naar de andere kunnen verzenden goed van pas.

Het BitChat-project biedt een interessante aanpak voor dit probleem. De ontwikkelaars combineerden een offline lokaal netwerk op Bluetooth LE met het globale Nostr-protocol. Het resultaat is een hybride messenger in de stijl van klassieke IRC, die werkt zonder accounts en zonder centrale servers.

Hoe berichtoverdracht werkt

BitChat is gebouwd op een duale architectuur. De app past het transport automatisch aan op basis van de huidige connectiviteitsomstandigheden.

Eerste niveau: Bluetooth LE Mesh. Als de ontvanger zich in de buurt bevindt, gaat het bericht rechtstreeks. Wanneer de ontvanger buiten Bluetooth-bereik is, beweegt het pakket zich langs een keten via de smartphones van andere gebruikers. De architectuur ondersteunt tot 7 van dergelijke tussenliggende hops. Hiervoor is geen internet nodig. De beveiliging wordt verzorgd door het Noise-protocol, dat end-to-end encryptie van pakketten op lokaal niveau biedt.

Tweede niveau: Nostr-protocol. Als een direct Bluetooth-kanaal niet beschikbaar is maar er netwerktoegang is, verzendt BitChat gegevens via publieke Nostr-relays.

Publieke kamers worden georganiseerd met behulp van geohashes. Het precisieniveau hangt af van de lengte van de coördinaathash-string:

  • block (7 tekens): chat binnen een stadblok
  • neighborhood (6 tekens): districtsniveau
  • city (5 tekens): stadbrede chat
  • region (2 tekens): een heel land

Bij het verzenden van een privébericht zoekt de messenger eerst naar een directe Bluetooth-verbinding. Als er geen apparaten in de buurt zijn, schakelt het over naar Nostr en verpakt de tekst met het NIP-17-algoritme. Wanneer er noch internet noch Bluetooth-buurapparaten zijn, wordt het bericht in de wachtrij geplaatst totdat een beschikbaar kanaal verschijnt.

Implementatiedetails en interface

Visueel lijkt BitChat op tekstchats uit het einde van de jaren negentig. Het ondersteunt bekende commando's zoals /slap, /msg of /who. Er is absoluut geen registratieproces. Bij de eerste start genereert de app tijdelijke cryptografische sleutels zonder een telefoonnummer of e-mailadres op te vragen.

Verschillende interessante technische oplossingen in het project:

  • Noodverwijdering. Door drie keer op het scherm te tikken worden lokale opslag en cryptografische sleutels permanent gewist.
  • Verkeerscompressie. Gegevens worden gecomprimeerd via LZ4 voordat ze worden verzonden, wat cruciaal is voor de lage bandbreedte van Bluetooth LE.
  • Stroomverbruikoptimalisatie. In de offline modus verandert de chat dynamisch de scanintervallen, waardoor de batterijlading wordt behouden.
  • Open source. De repository is vrijgegeven onder de Unlicense en kan vrij worden geforkt of gebruikt in commerciële producten.

Het project uitvoeren

De broncode is geschreven in Swift voor iOS en macOS.

De snelste manier om de desktopversie uit te voeren is via het just hulpprogramma:

brew install just
just run

Met het commando wordt de app gecompileerd en gestart op je Mac. Om gegenereerde bestanden na het testen op te ruimen, roep je just clean aan.

Om voor iOS te bouwen in Xcode, moet je de standaard configuratievoorbereiding uitvoeren:

cd bitchat
cp Configs/Local.xcconfig.example Configs/Local.xcconfig

Open daarna gewoon bitchat.xcodeproj, stel je Developer Team ID in het Local.xcconfig bestand in en werk de groepsnaam in entitlements bij.

Waarom deze repository bestuderen

Niemand zal BitChat waarschijnlijk dagelijks als primaire messenger gebruiken. Het project is echter van enorm belang vanuit een technisch perspectief.

In de code vind je een schone implementatie van een aangepast binair protocol over CoreBluetooth, geohash-verwerking en Nostr relay-integratie. Tegelijkertijd is de app al klaar voor gebruik en gepubliceerd in de App Store, dus je kunt hem op je apparaat houden als back-upcommunicatieoptie voor wandelingen of grote concerten.

Gerelateerde projecten