Architectuur

Hoe sync werkt zonder server.

Beatrax synchroniseert tussen je eigen apparaten, end-to-end versleuteld, zonder account en zonder dienst ertussen die iets kan lezen. Zo ongeveer werkt dat.

Het probleem met gewone sync

De gebruikelijke manier om een app te synchroniseren is de gegevens op een server zetten en elk apparaat daarmee laten praten. Die server wordt dan de bron van waarheid, wat betekent dat hij alles kan lezen, en dat iemand hem voor altijd moet draaien en betalen.

Beatrax kiest de andere route: elk apparaat houdt een volledige kopie, en ze stemmen rechtstreeks met elkaar af.

Elke wijziging is een regel in een logboek

In plaats van de database te synchroniseren, synchroniseert Beatrax de geschiedenis van wijzigingen erop. Elke bewerking wordt een regel in een logboek waar alleen aan toegevoegd wordt, ondertekend door het apparaat dat hem maakte en voorzien van een hybride logische klok, zodat regels van verschillende apparaten consistent geordend kunnen worden ook als hun klokken niet gelijklopen.

De database is vervolgens een afgeleide van dat samengevoegde logboek — speel het logboek af en je krijgt dezelfde database, elke keer. Twee apparaten die dezelfde regels gezien hebben, komen altijd op dezelfde toestand uit.

Conflicten worden per regel opgelost, niet op geluk

Bewerken twee apparaten hetzelfde terwijl ze los van elkaar staan, dan wordt de samenvoeging per veld beslist door een vastgelegde regel in plaats van door wie het laatst synchroniseerde. Verzamelingen voegen samen als verzamelingen; verwijderingen winnen van gelijktijdige bewerkingen waar dat het veilige antwoord is; geïmporteerde regels ontdubbelen op dezelfde vingerafdruk die de import toch al gebruikt, zodat hetzelfde afschrift op twee apparaten geen twee administraties oplevert.

Apparaten bewijzen wie ze zijn

  • Elk apparaat maakt zijn eigen identiteit — Een ondertekensleutel en een sleutel voor sleuteluitwisseling, bij de eerste start op het apparaat aangemaakt. De privéhelften verlaten het nooit.
  • Koppelen is bewust en geverifieerd — Een nieuw apparaat doet mee via een QR-code of een ingetypte woordcode met een eenmalig geheim, en op beide schermen verschijnt een veiligheidsnummer dat moet overeenkomen voordat er iets synchroniseert.
  • Sessies zijn wederzijds geauthenticeerd — Gekoppelde apparaten zetten een forward-secret versleutelde sessie op, zodat een opgenomen sessie later niet alsnog te ontcijferen is als er ooit een sleutel uitlekt.

Altijd rechtstreeks, een relay alleen om te koppelen

Twee apparaten die aan staan op hetzelfde netwerk vinden elkaar en synchroniseren rechtstreeks — er verlaat niets je huis. Slaapt er één, dan blijven de wijzigingen staan op het apparaat dat ze maakte en gaan ze over zodra ze allebei weer wakker op hetzelfde netwerk zijn. Een tweede weg is er niet: een transactie gaat uitsluitend over de rechtstreekse verbinding tussen twee van je eigen apparaten.

Een relay is optioneel, en er één opzetten of aanwijzen doe je zelf. Hij bestaat voor één taak: twee apparaten de koppeling laten afronden en versleutelingssleutels laten uitwisselen wanneer ze elkaar niet rechtstreeks kunnen bereiken. Het is de moeite waard om ronduit te zeggen wat daar dan ligt. De sleuteloverdracht is verzegeld voor het ontvangende apparaat, dus wie de relay draait krijgt hem niet open. De koppelberichten zijn dat niet: daarin staan de twee apparaat-id's, de publieke sleutels en de naam die je een apparaat gaf, en het bevestigende bericht is ondertekend — te lezen, maar niet te vervalsen of te wijzigen. Een relay ziet daarnaast metadata: groottes, timing, en welke apparaat-id's verkeer uitwisselen. Wat hij nooit ziet is een transactie, een bedrag of een tegenpartij.

Ook versleuteld waar het stilstaat

Gevoelige velden worden op schijf versleuteld met een sleutel die uit je wachtwoordzin is afgeleid en pas vrijkomt als je de app ontgrendelt. Een apparaat verwijderen roteert de gedeelde groepssleutel en verpakt hem opnieuw voor de apparaten die je houdt — zodat een verwijderd apparaat niets kan lezen van wat er daarna verstuurd is.

Hoe ver dit is

De samenvoegmotor, het koppelen van apparaten, het versleutelde transport, de relay en de versleuteling op schijf staan allemaal op de ontwikkellijn. De mobiele client als volwaardige sync-peer is het onderdeel dat nog loopt. De roadmap houdt dat eerlijk bij.