Zum Inhalt springen

Vertrauen und Aufnahme

Ein Knoten vertraut einem anderen Knoten nicht, weil er ihn erreichen kann. Er vertraut ihm, weil ein Dokument, dem er bereits vertraut, sagt, wer dieser Knoten ist.

Das Registry ist ein einzelnes signiertes Dokument, das jeden aufgenommenen Knoten auflistet: seine Domain, seinen öffentlichen Signaturschlüssel und den Fingerabdruck dieses Schlüssels, die Protokollversionen, die er spricht, was er kann, und ob er aktiv oder widerrufen ist.

Jeder Knoten hält genau einen Schlüssel — den öffentlichen Wurzelschlüssel des Registry. Dieser Schlüssel ist das Einzige, dem ein Knoten bedingungslos vertraut. Alles andere folgt daraus: Der Knoten prüft das Registry-Dokument gegen diesen Schlüssel, und prüft dann jede eingehende Nachricht gegen den Signaturschlüssel, den das Registry für den Absender veröffentlicht.

Ein Knoten ohne konfigurierten Wurzelschlüssel rät nicht. Er weigert sich, auch nur einen einzigen Peer aufzulösen, und sagt das auch so.

Das Dokument ist signiert, daher spielt es keine Rolle, wo es ausgeliefert wird. Es trägt ein Ausstellungsdatum und ein Ablaufdatum und wird regelmäßig neu ausgestellt, damit der Ablauf stets voraus bleibt.

Aufnahme ist eine Prüfung, keine Registrierung.

Wird ein Knoten installiert, erzeugt er eine Aufnahme-Nutzlast. Diese Nutzlast enthält nur öffentliches Material: die Domain des Knotens, seinen öffentlichen Föderations-Signaturschlüssel samt Fingerabdruck, den Fingerabdruck seines Client-Zertifikats, die Protokollversionen und die Fähigkeiten, die er erklärt. Es steckt kein privates Schlüsselmaterial darin, und es wird auch keines verlangt.

Der Betreiber reicht die Nutzlast ein. Der Knoten signiert die Einreichung mit seinem eigenen Schlüssel, was beweist, dass er die private Hälfte des Schlüssels besitzt, den er beansprucht. Mehr kann eine Signatur nicht beweisen — sie sagt nichts darüber aus, wem die Domain gehört. Deshalb landet die Einreichung in einer Warteschlange, damit sich jemand sie ansieht, und der Betreiber bestätigt den Schlüssel-Fingerabdruck über einen anderen Kanal. Ein Mensch genehmigt sie.

Sobald sie genehmigt und das Registry neu veröffentlicht ist, föderiert der Knoten. Eine erneute Einreichung vor der Genehmigung aktualisiert den ausstehenden Eintrag, statt einen zweiten anzulegen.

Die Nutzlast allein gewährt kein Vertrauen.

Ein Knoten wird entfernt, indem sein Registry-Eintrag als widerrufen markiert und neu veröffentlicht wird. Widerrufene Einträge bleiben etwa einen Monat lang im Dokument, statt sofort zu verschwinden, damit sichtbar bleibt, dass der Knoten einst da war und es nicht mehr ist.

Sobald andere Knoten das neu veröffentlichte Dokument abrufen, werden Nachrichten vom widerrufenen Knoten abgelehnt wie von jedem anderen unbekannten Absender.

Bevor sie irgendetwas anderes austauschen, geben sich zwei Knoten die Hand. Jeder sendet die Liste dessen, was er kann; die Antwort ist die Schnittmenge. Diese Schnittmenge ist, was das Paar für den restlichen Austausch nutzen kann.

Das ist wichtig, weil Knoten nicht immer auf demselben Stand sind. Ein Knoten, der eine Nachricht empfängt, die er erkennt, aber nicht implementiert hat, lehnt sie sauber ab und markiert sie — wichtig — nicht als zugestellt, sodass der Absender es erneut versuchen kann, sobald beide Seiten die Funktion haben.

Aufnahme gilt für das gesamte Mesh. Ein Betreiber kann außerdem einen einzelnen Knoten lokal ablehnen, ohne auf irgendetwas Zentrales zu warten: Die Admin-App listet jeden Server auf, mit dem der Knoten zu tun hatte, und lässt dich einen davon aussperren. Diese Entscheidung wirkt nur auf deinem Knoten.

Dafür brauchst du eine Berechtigung, die deine erste Administratorin oder dein erster Administrator bereits hat.