Ga naar inhoud

Vertrouwen en toelating

Een node vertrouwt een andere node niet omdat hij hem kan bereiken. Hij vertrouwt hem omdat een document dat hij al vertrouwt zegt wie die node is.

Het register is één ondertekend document dat elke toegelaten node vermeldt: zijn domein, zijn publieke ondertekeningssleutel en de vingerafdruk van die sleutel, de protocolversies die hij spreekt, waartoe hij in staat is, en of hij actief is of ingetrokken.

Elke node bewaart één sleutel — de publieke rootsleutel van het register. Die sleutel is het enige wat een node onvoorwaardelijk vertrouwt. Al het andere volgt daaruit: de node controleert het registerdocument tegen die sleutel, en controleert vervolgens elk inkomend bericht tegen de ondertekeningssleutel die het register voor de afzender publiceert.

Een node zonder geconfigureerde rootsleutel gokt niet. Hij weigert überhaupt enige peer op te lossen, en zegt dat ook.

Het document is ondertekend, dus waar het wordt aangeboden maakt niet uit. Het draagt een uitgiftedatum en een vervaldatum, en het wordt regelmatig opnieuw uitgegeven zodat de vervaldatum steeds vooruit blijft.

Toelating is een beoordeling, geen registratie.

Wanneer een node wordt geïnstalleerd, produceert hij een toelatingspayload. Die payload bevat alleen publiek materiaal: het domein van de node, zijn publieke federatie-ondertekeningssleutel en vingerafdruk, de vingerafdruk van zijn clientcertificaat, de protocolversies en de capaciteiten die hij opgeeft. Er zit geen privésleutelmateriaal in, en er wordt er ook niet om gevraagd.

De operator dient de payload in. De node ondertekent de indiening met zijn eigen sleutel, wat bewijst dat hij de privéhelft bezit van de sleutel die hij claimt. Dat is alles wat een handtekening kan bewijzen — het zegt niets over wie het domein bezit. Dus komt de indiening in een wachtrij voor iemand om te bekijken, en bevestigt de operator de vingerafdruk van de sleutel via een ander kanaal. Een mens keurt het goed.

Zodra het is goedgekeurd en het register opnieuw is gepubliceerd, federeert de node. Opnieuw indienen vóór goedkeuring ververst de wachtende vermelding in plaats van een tweede aan te maken.

Niets aan de payload verleent op zichzelf vertrouwen.

Een node wordt verwijderd door zijn registervermelding als ingetrokken te markeren en opnieuw te publiceren. Ingetrokken vermeldingen blijven ongeveer een maand in het document staan in plaats van meteen te verdwijnen, zodat zichtbaar blijft dat de node er ooit was en dat nu niet meer is.

Vanaf het moment dat andere nodes het opnieuw gepubliceerde document ophalen, worden berichten van de ingetrokken node geweigerd als van elke andere onbekende afzender.

Voordat ze iets anders uitwisselen, geven twee nodes elkaar de hand. Elk stuurt de lijst van wat hij kan; het antwoord is de overlap. Die overlap is wat het paar voor de rest van de uitwisseling kan gebruiken.

Dit is van belang omdat nodes niet altijd op dezelfde versie staan. Een node die een bericht ontvangt dat hij herkent maar niet heeft geïmplementeerd, weigert het netjes en — belangrijk — markeert het niet als afgeleverd, zodat de afzender het opnieuw kan proberen zodra beide kanten de functie hebben.

Toelating geldt voor de hele mesh. Een operator kan ook lokaal een individuele node weigeren, zonder op iets centraals te wachten: de beheerapp toont elke server waarmee de node te maken heeft gehad en laat je er een afsnijden. Die beslissing werkt alleen op jouw eigen node.

Daarvoor heb je een rechtenniveau nodig dat je eerste beheerder al heeft.