kton protocol — die Teile
kton — wie aus einer Frage ein Protokoll wurde erzählt, wo das alles herkommt. Dieses Stück hier ist für alle, die wissen wollen, was es tut — geschrieben für Menschen, die mit Daten und Ergebnissen arbeiten, nicht für Menschen, die mit verteilten Systemen arbeiten.
In einem Absatz, damit die Namen vom Tisch sind: Das kton protocol hält fest, wie ein Ergebnis zustande kam und wer dafür einsteht — als kleine, signierte Einträge, die jeder nachprüfen kann. Es hat zwei Schichten. plankton trägt, was sich nachrechnen lässt: welche Dateien in eine Berechnung gingen und welche herauskamen. nekton trägt, was sich nicht nachrechnen lässt, sondern nur bezeugen — das wurde geprüft, das wurde freigegeben, das ist die Fassung, die gezählt hat. Zusammen sind die beiden das kton protocol.
Die Lage
Du siehst eine wissenschaftliche Grafik im Internet. Einen Kurvenverlauf, ein Balkendiagramm, eine Punktwolke mit einer Linie hindurch. Du hast sie nicht gemacht, und du musst entscheiden, was du davon hältst.
Was kannst du daran prüfen? Fast nichts. Du kannst hoffen, dass der Text daneben erklärt, wie sie zustande kam. Du kannst nachsehen, wer sie veröffentlicht hat. Du kannst schauen, ob andere dasselbe sagen. Alles davon handelt von Menschen — keines von der Grafik.
Denn die Grafik selbst sagt nichts darüber, woher sie kommt. Sie ist ein Bild. Alles, was ihr Bedeutung gab — welche Daten, in welcher Fassung, welche Rechnung darauf lief, wer sie nachgeprüft hat und mit welchem Ergebnis — liegt woanders und wurde nicht mitgeschickt.
Also bleibt nur eines: glauben.
Für diese Lücke ist das kton protocol gebaut.
Eine Transformation nach der anderen
Die Einheit ist bewusst klein. Ein foton ist eine einzelne Transformation: Ein paar Dateien gingen hinein, etwas lief, ein paar Dateien kamen heraus. Der Name steht für File Only Transfer Over Network — es gelten nur die Daten.
inputs → command → outputs
Das Kommando ist, was die Arbeit getan hat — ein Skript, ein Programm, ein Report. kton führt es nicht aus und schaut nicht hinein. Festgehalten wird, was hineinging, was herauskam, und welches Kommando beides verbindet. Ausführen ist die Aufgabe von jemand anderem, und genau das hält den Eintrag klein genug, um beweglich zu bleiben.
Daran ist für sich genommen nichts klug. Was es trägt, ist die Art, wie die Dateien benannt werden.
Eine Datei nach ihrem Inhalt benennen
Eine Datei wird über ihren Inhalts-Hash identifiziert: Man schickt die Bytes durch eine Standardfunktion und erhält eine kurze Zeichenfolge, die sich vollständig ändert, sobald sich ein einziges Byte ändert. Der Dateiname, der Ordner, das System, in dem sie liegt — nichts davon zählt. Die Bytes sind der Bezeichner. Das ist gemeint, wenn von inhaltsadressiert die Rede ist.
Dieser eine Schritt ist es, der einen Eintrag über eine Organisationsgrenze tragen lässt. Zwei Gruppen, die nie miteinander gesprochen haben, die verschiedene Werkzeuge und Namenskonventionen benutzen, die keine gemeinsame Datenbank haben und auch keine wollen, können trotzdem feststellen, dass sie denselben Datensatz in der Hand halten — weil dieselben Bytes überall denselben Hash ergeben, ohne dass vorher irgendetwas vereinbart werden musste.
Es heißt außerdem, dass eine Aussage über eine Datei von jedem geprüft werden kann. Steht in einem Eintrag „diese Abbildung kam aus jener Berechnung", kannst du die Abbildung selbst hashen und nachsehen, ob es stimmt. Du nimmst niemandem die Verbindung auf sein Wort ab.
Herkunft gibt es gratis, mit einem freien Protokoll
Herkunft ist die Kette vor einem Ergebnis: Diese Abbildung kam aus jener Berechnung, die jenes Modell und jene Fassung der Daten benutzte, die aus jenen Quelldateien zusammengestellt wurde, die aus jener Studie stammen. Wo es das überhaupt gibt, wird es meist getrennt gepflegt, in einem eigenen System, nachträglich ausgefüllt.
Hier pflegt es niemand. Wenn jede Transformation festhält, welche Dateien hineingingen und welche herauskamen, und Dateien über ihren Inhalt identifiziert werden, dann bilden die Einträge den Graphen bereits. Herkunft ist nichts, was obendrauf gelegt wird — es ist, was ein Stapel solcher Einträge ist, in beide Richtungen gelesen. Rückwärts vom Ergebnis zu den Rohdaten. Vorwärts von einer Fassung der Daten zu allem, was je darauf aufbaute — die Frage, die du brauchst, wenn sich ein Datensatz später als falsch herausstellt.
Kaufen musst du dafür nichts: Das Protokoll ist offen, die Referenzwerkzeuge sind ein einzelnes Binary ohne Abhängigkeiten.
Die Hälfte, die sich nicht nachrechnen lässt
Alles bisher lässt sich maschinell prüfen. Transformation noch einmal ausführen oder die Bytes noch einmal hashen — die Antwort ist auf niemandes guten Glauben angewiesen. Das ist die plankton-Schicht.
Aber vieles von dem, worauf es bei einem Ergebnis ankommt, ist nicht von dieser Art. Das wurde geprüft. Das wurde freigegeben. Das ersetzt jenes. Das ist die Fassung, die gezählt hat. Kein noch so häufiges Wiederholen bringt solche Aussagen hervor — sie werden behauptet, nicht errechnet. Das Äußerste, was du haben kannst, ist der Vermerk, wer sie behauptet hat, und eine Signatur, die das belegt.
Das ist die nekton-Schicht, und die beiden getrennt zu halten ist der ganze Entwurf. Das eine lässt sich nachrechnen. Das andere kann nur bezeugt werden — von wem auch immer den Schlüssel führt. Eine Person, eine Abteilung, ein Agent, dem du einen Schlüssel gegeben hast: Die Schicht fragt nicht, wer oder was da unterschreibt, sondern nur, ob die Unterschrift gilt und zu welchem Schlüssel sie gehört.
Vermischt man beides, entsteht ein System, das streng aussieht und es nicht ist — weil sich nicht mehr unterscheiden lässt, welche seiner Aussagen Beweise sind und welche Versprechen. Getrennt kannst du einen Eintrag lesen und genau sehen, wo das Nachrechenbare aufhört und das Bezeugte beginnt.
Solche Aussagen hängen nicht in der Luft. Jede hängt an genau einer Transformation, in genau dem Zustand, in dem sie damals war. Auf Basis dieser Berechnung hatte ich die Idee. Nach drei weiteren Schritten bin ich auf jene gekommen. Geprüft habe ich diese hier, nicht die davor. Und weil die Transformation über ihren Inhalt identifiziert wird, kann die Aussage nicht stillschweigend auf etwas anderes überspringen: Ändert sich die Berechnung, ändert sich ihr Hash — und die alte Freigabe gilt sichtbar nicht mehr für das Neue.
Damit wird der Verlauf lesbar. Nicht nur, was am Ende herauskam, sondern an welcher Stelle was behauptet, geprüft oder entschieden wurde — und von wem.
Die längere Fassung dieses Arguments — warum nur Logik und Mathematik aus sich selbst beweisbar sind und was daraus folgt — steht in kton: wie aus einer Frage ein Protokoll wurde.
Föderiert, und was das bedeutet
Es gibt keine zentrale Datenbank. Kein Unternehmen, das die Einträge hält, keinen Dienst, bei dem du dich anmeldest, nichts, um dessen Zugang verhandelt werden müsste. Wer Einträge hat, hat seinen eigenen kton Speicher: eine Person auf einem Laptop, ein Labor, eine Universität, eine Firma. Dazwischen liegt kein Unterschied außer der Größe.
Ein kton Speicher ist ein Verzeichnis von Dateien, jede benannt nach ihrem eigenen Hash. Was in deinem liegt, entscheidest du — was du selbst gemacht hast, und was andere veröffentlicht haben und dir behaltenswert schien. Es gibt keine Serversoftware zu installieren und nichts auszuhandeln. Willst du jemandem deine Einträge geben, gibst du ihm das Verzeichnis — auf einem Webserver, in einem Repository, wie es gerade passt.
Und wer zwei solcher Verzeichnisse hat, sieht sie zusammen: Wo beide etwas über dieselben Bytes wissen, fügt es sich, ohne dass die zwei je voneinander gehört haben. Fremde Einträge zu übernehmen heißt dabei nicht, für sie einzustehen — die Aussagen darin behalten die Unterschriften, mit denen sie gekommen sind, und die gehören weiter den anderen.
Dass die Kette irgendwo abbricht, ist damit der Normalfall und kein Versagen. Ein Beispiel aus der Arzneimittelentwicklung. Wer mit den Daten arbeitet, hat die anonymisierten, zusammengefassten Daten — und dazu die Hashes der Schritte davor und den Algorithmus, mit dem anonymisiert wurde. Was fehlt, sind die Patientendaten selbst. Die sieht nur, wer sie sehen darf.
Prüft eine Behörde, hat sie beides. Sie kann die Anonymisierung gegen die echten Daten noch einmal laufen lassen und nachsehen, ob dasselbe herauskommt. Und wenn es stimmt, kann sie genau das als Eintrag hinterlassen: geprüft, reproduziert, unterschrieben. Diesen Eintrag sehen dann alle — auch die, die die Patientendaten nie gesehen haben und nie sehen werden.
Eine Folge davon gehört deutlich gesagt. Weil jeder Eintrag beim Lesen gegen seinen eigenen Hash geprüft wird, kann ein kton Speicher die Einträge, die er beherbergt, nicht fälschen. Er kann sich weigern, etwas herauszugeben. Aber er kann nichts Falsches herausgeben, ohne dass es auffällt. Zurückhalten ist möglich. Lügen nicht.
Damit bleibt die Kontrolle dort, wo die Daten sind. Du entscheidest, was du weitergibst, an wen und wann. Und beim Lesen entscheidest du, welchen Speichern du glaubst — nicht der, der veröffentlicht hat. Verboten wird dabei nichts. Das Protokoll hindert dich nicht daran, alles offenzulegen, und es hindert niemanden daran, deinen Einträgen zu misstrauen. Es sorgt nur dafür, dass in beiden Fällen sichtbar ist, woran man ist.
Was das nicht beweist
Das gehört genau gesagt, weil solche Werkzeuge routinemäßig überverkauft werden.
Dass dieselbe Rechnung noch einmal dasselbe ergibt, heißt nicht, dass es stimmt. Ein schlecht gewähltes Modell rechnet genauso zuverlässig wie ein gutes. Auf dem falschen Datensatz kommt jedes Mal dasselbe Falsche heraus. Dass es sich wiederholen lässt, sagt etwas über die Rechnung. Über die Wissenschaft sagt es nichts.
Dass ein Eintrag signiert ist, heißt nicht, dass die Aussage stimmt. Es heißt: Die Unterschrift ist echt, und man weiß, wem sie gehört. Das ist viel wert — es ist der Unterschied zwischen einer Aussage, für die jemand geradesteht, und einer anonymen. Ob die Arbeit gut war, sagt es nicht.
Und es steht nur drin, was jemand hineingeschrieben hat. Eine Entscheidung, die nie aufgezeichnet wurde, holt auch das beste Protokoll nicht zurück.
Noch etwas, das in der sauberen Trennung leicht untergeht: Auch ein plankton-Eintrag ist zunächst eine Behauptung. Er sagt, diese Eingaben und dieses Kommando hätten diese Ausgaben ergeben. Nachprüfen kannst du das nur, wenn du an die Bytes herankommst und die Rechnung noch einmal laufen lassen kannst. Kommst du nicht heran, bleibt es eine Behauptung — eine gut geformte, aber eine.
Das Beispiel von vorhin ist genau dieser Fall. Wer die Patientendaten nicht sehen darf, kann die Anonymisierung nicht nachrechnen; für alle außer der Behörde ist dieser eine Schritt nicht geprüft, sondern bezeugt. Die Trennung bleibt — ein plankton-Eintrag ist grundsätzlich nachrechenbar, ein nekton-Eintrag grundsätzlich nicht. Aber ob du nachrechnen kannst, hängt daran, woran du herankommst. Was du selbst prüfen kannst, musst du niemandem glauben. Für alles andere bist du darauf angewiesen, dass es jemand getan hat und dafür geradesteht.
Was du bekommst, ist schmaler und nützlicher als „vertrauenswürdige Ergebnisse": Du hörst auf zu raten. Die Kette ist entweder da und prüfbar, oder sie ist sichtbar nicht da. Beides sind Antworten. Keine davon verlangt, mir zu glauben.
Ansehen
Am klarsten wird es beim Benutzen. Hier ist ein frei erfundenes Paper aus der Arzneimittelentwicklung, in dem jede Abbildung ihre eigene Kette mitträgt:
Der Browser hasht jede Abbildung beim Laden der Seite und schlägt das Ergebnis in einem kton Speicher signierter Einträge nach. Findet er nichts, passiert nichts — die Abbildung bleibt eine Abbildung. Findet er etwas, kannst du hineingehen.
Dann siehst du, wie das Ergebnis dargestellt wurde, aus welcher Analyse es kam und welches Modell dahinterstand. Von dort gehst du weiter zurück, bis zu den Daten, auf denen alles aufsetzt. Und waren diese Daten selbst schon bearbeitet, kommst du noch weiter — sobald du den Speicher kennst, aus dem sie stammen.
Hast du selbst veröffentlicht, siehst du deinen Plot außerdem dort stehen, wo er hingehört: zwischen all den Versuchen, die du nicht veröffentlicht hast.
Du kannst die Seite dabei auf mehrere Speicher zeigen lassen, und sie ergänzen einander von selbst. Gegen welche Quellen eine Abbildung geprüft wird, entscheidest du und nicht der, der sie veröffentlicht hat. Die Seite und die Speicher wurden nie füreinander eingerichtet. Sie treffen sich bei den Bytes.
Wo es steht
Es gibt zwei Dinge. Die Spezifikation — der Vertrag darüber, wie sich solche Einträge austauschen lassen, damit unabhängig voneinander gebaute Programme einander verstehen. Sie steht bei 0.2 und ist ein Entwurf.
Und die Programme, die sie umsetzen: zwei kleine Kerne, einer je Schicht, und darüber ein Cockpit, das beide zusammenspielen lässt und selbst nichts davon noch einmal baut. Geschrieben in Go, ohne fremde Bibliotheken, für jedes Betriebssystem, frei.
Diese Aufteilung ist der Grund für etwas, das du weiter oben schon gesehen hast. Die Kerne sind klein genug, um im Browser zu laufen — deshalb kann eine Seite eine Abbildung selbst hashen und selbst nachsehen, ohne irgendwo anzufragen. Alles, was ans Netz muss, liegt im Cockpit, nicht im Kern. Und das Cockpit kannst du weglassen: Danach geht jeder einzelne Handgriff immer noch, nur direkt mit den beiden Kernen.
Der Code steht unter Apache 2.0, die Spezifikation unter der Community Specification License 1.0 — der Lizenz, die andere in die Lage versetzt, dasselbe unabhängig zu bauen. Genau darum geht es: Was nur ein einziges Programm lesen kann, taugt nicht als gemeinsame Grundlage. Aus demselben Grund ist das kton protocol auf dem Weg zu einer eigenen Foundation.
Die Namen
Beide Wörter kommen aus der Meeresbiologie, und sie sind nicht zufällig gewählt.
Plankton treibt. Es bewegt sich nicht aus eigenem Antrieb, sondern wird getragen — winzig, überall, die Basis der Nahrungskette. So verhält sich eine Berechnung: Sie geschieht, sie will nichts, und sie kommt jedes Mal gleich heraus.
Nekton schwimmt. Fische, Tintenfische, Wale — alles, was sich aus eigener Kraft bewegt und entscheidet, wohin. So verhält sich eine Aussage: Da setzt jemand seinen Namen darunter, weil er es will.
Und kton ist die Silbe, die beide gemeinsam haben.
Das Protokoll, die Spezifikation und die Referenzimplementierung:
kton.dev →