Wat er tussen servers overgaat
Nodes praten met elkaar in ondertekende berichten, één bericht per gebeurtenis. Elk bericht wordt ondertekend door de verzendende node en gecontroleerd door de ontvangende node voordat er iets mee gebeurt. Een bericht dat de controle niet doorstaat wordt geweigerd, en een bericht dat al eerder is gezien wordt opnieuw geweigerd — een node houdt een register bij van elk bericht dat hij al heeft geaccepteerd.
Alles hieronder is wat die berichten bevatten. Er reist verder niets.
Iemand vinden
Section titled “Iemand vinden”Een node publiceert een ontdekkingsantwoord voor elk van zijn mensen. Vraag naar een handle en hij geeft de handle van die persoon terug, zijn thuisserver, zijn publieke identiteitssleutel, en de protocolversies die de node spreekt. Het antwoord is ondertekend.
Dat is het hele antwoord. Geen e-mailadres, geen vertrouwensscore, geen aantal verbindingen, geen naam. Iedereen die de handle kent kan dat antwoord lezen, niet alleen andere nodes.
Bestaat de handle niet, dan zegt de node dat — en ondertekent ook dat, zodat een netwerk ertussenin geen antwoord kan verzinnen dat iemand weg is.
Ontdekking kan worden uitgezet, en dan is de node donker en kunnen andere nodes niemand erop oplossen.
Een code opzoeken
Section titled “Een code opzoeken”Wanneer iemand een code verifieert die bij een persoon op een andere node hoort, reizen de woorden zelf niet mee. Alleen een hash ervan.
De node die de code bezit antwoordt. Afhankelijk van wat er is gevraagd, is het antwoord ofwel een simpel ja of nee, of — bij een match — de bijbehorende details: de weergavenaam en foto van de codebezitter, hoe de code was gelabeld en waarvoor hij was, wanneer hij ongeldig wordt, zijn vertrouwensscore en de tellingen waarop die is gebaseerd, en de organisatie waartoe de code behoort, als die er is. Er wordt verder niets over de persoon verstuurd.
Een eenmalige gastcode wordt precies één keer verbruikt, ook als er meerdere verzoeken op hetzelfde moment binnenkomen; degenen die de race verliezen krijgen te horen dat de code al is gebruikt. Een baken wordt op dezelfde manier beantwoord maar nooit verbruikt, omdat het een levensteken is in plaats van een eenmalige code.
Als de eigenaar van een baken ervoor heeft gekozen zijn e-mailadres erop te tonen, maakt dat adres deel uit van een baken-antwoord. Dat is een instelling die iedereen voor zichzelf aanzet, en staat uit tenzij dat gebeurt.
De node die de code bezit legt vast wie er vroeg.
Uitnodigingen
Section titled “Uitnodigingen”Een uitnodiging naar iemand op een andere node draagt de publieke identiteitssleutels van beide mensen, de weergavenaam van de uitnodiger, een verwijzing naar de verbinding op de uitnodigende node, en het versleutelde uitnodigingsbericht.
De ontvangende node zet hem klaar. Er wordt geen account aangemaakt en er wordt geen verbinding aangemaakt. Er bestaat niets aan de kant van de uitgenodigde totdat die zelf accepteert.
Er is één geval waarin een uitnodiging een e-mailadres draagt: wanneer een lid van een node iemand uitnodigt die nergens een account heeft en de node zelf geen accounts kan aanmaken. De node biedt de uitnodiging dan aan trusted.codes aan, en het e-mailadres van de uitgenodigde persoon gaat mee, zodat die zich daar kan registreren. Dat gedrag is een instelling, staat uit tenzij de operator het aanzet, en de ontvangende kant moet aanbiedingen van jouw node ook accepteren. Zie Node Settings van je node voor beide helften.
Verbindingsgeheimen
Section titled “Verbindingsgeheimen”Het materiaal dat de codewoorden produceert die twee mensen zien, wordt door het apparaat van de verzendende persoon verpakt voor het apparaat van de ontvangende persoon. Het passeert beide servers als een ondoorzichtige blob. Geen van beide servers kan het openen.
De twee mensen zien overeenkomende codewoorden omdat hun apparaten die afleiden uit dat gedeelde geheim. Elke server bewaart ook zijn eigen aparte waarde voor zijn eigen lokale boekhouding; die waarde is niet waar de codewoorden vandaan komen.
De naam van de verbinding reist versleuteld.
Lidmaatschapswijzigingen
Section titled “Lidmaatschapswijzigingen”Wanneer iemand zich bij een verbinding voegt, hem verlaat, of de verbinding wordt verwijderd, wordt de andere node ingelicht. Wanneer iemand zijn account verwijdert, kondigt zijn node dat aan en verwijdert elke andere node wat hij over die identiteit bewaarde. Wanneer een apparaat wordt verwijderd, wordt dat aangekondigd zodat andere nodes stoppen met het vertrouwen van de sleutel van dat apparaat.
Een node kan een andere node ook vragen of een verbinding die hij spiegelt nog bestaat en of bepaalde mensen er nog in zitten. Hij mag alleen vragen naar mensen die hij al noemt. De ledenlijst wordt nooit teruggegeven, en een node die zelf geen deel uitmaakt van die verbinding krijgt helemaal niets te horen.
Pushmeldingen
Section titled “Pushmeldingen”Een node die zijn eigen gebruikers draait, kan nog steeds niet rechtstreeks naar Apple en Google versturen — de inloggegevens voor de gedeelde mobiele app zijn niet van de operator om te bewaren. Dus geeft een node de apparaattokens aan trusted.codes om af te leveren.
De relay draagt de tokens en het soort wake-up, verder niets. Er is geen titel en geen inhoud. Het apparaat wordt wakker, vraagt zijn eigen thuisserver om de echte data, en toont die lokaal. Als de relay faalt, breekt er niets; de app haalt de volgende keer dat hij wordt geopend gewoon bij.
Wat er nooit vertrekt
Section titled “Wat er nooit vertrekt”Accounts, wachtwoorden en sessies. De database zelf. De platte tekst van een code. De inhoud van een kluis. De naam en het e-mailadres van iedereen die nooit deel is geweest van een uitwisseling.
Sleutels die de operator heeft opgegeven voor optionele diensten — geolocatie, AI, de dashboards — horen bij die inzet. Niemand anders ziet ze.