Bau dein eigenes Zertifikat

Drei aufeinandergestapelte Blöcke, jeder mit einem Stempel im Block darüber; der unterste Block steht auf dem nackten Boden.

Das Schloss-Symbol links in deiner Adressleiste sagt: Du bist wirklich bei der Seite, die dort steht, und nicht bei jemandem, der sich dafür ausgibt. Hinter diesem Schloss steckt ein Zertifikat. Unten baust du dir selbst zwei davon — mit echten Schlüsseln, echten Signaturen und einer echten Prüfung. Alles wird stimmen. Und trotzdem würde kein einziger Browser sie annehmen, und nicht, weil irgendwo ein Rechenfehler drinsteckt.

Wörter, die du gleich brauchst

Zertifikat
Eine Aussage der Form „dieser öffentliche Schlüssel gehört zu diesem Namen“, von jemand anderem signiert. Wie so eine Aussage in echt aussieht, steht in Kapitel 7.2; hier baust du dir selbst eine.
Subject und Issuer
Die beiden Namen in jedem Zertifikat. Subject ist, um wen es geht, Issuer ist, wer es signiert hat. Englische Wörter, denn genau so stehen sie in den Feldern.
CA
Certification authority, Zertifizierungsstelle: eine Partei, die Zertifikate für andere ausstellt. In der Demo bist das du.
Wurzelzertifikat
Das Zertifikat ganz oben, das sich selbst signiert. Subject und Issuer sind darin identisch. „Wurzel“, weil die Kette dort aufhört — so wie ein Baum in einem Schema kopfüber steht.
Selbstsigniert
Signiert mit dem privaten Schlüssel, der zum öffentlichen Schlüssel im Zertifikat selbst gehört. Es beweist, dass du diesen Schlüssel hast, und sonst nichts — du sagst nur über dich selbst, dass man dir trauen kann.
Endzertifikat
Das Zertifikat unten in der Kette, für einen echten Namen: eine Website, eine Person. Das deiner Bank ist so eines.
Vertrauensanker (trust anchor)
Der Schlüssel, bei dem du mit dem Prüfen aufhörst, weil du ihm einfach glaubst. Jede Kette endet bei so einem. Dieses Wort ist der Kern dieses Kapitels.
Fingerabdruck
Der Hash eines Schlüssels oder eines Zertifikats, als Hex mit Doppelpunkten geschrieben. Kurz genug zum Vergleichen und eindeutig genug, um als Name zu dienen.
JSON
Eine Art, Daten mit geschweiften Klammern und "name": Wert aufzuschreiben. Du siehst sie gleich in der Ausgabe.

Was du bauen wirst

Zwei Zertifikate und eine Signatur dazwischen. Das ist die kleinste Kette, die es gibt, und sie funktioniert genau wie die Kette hinter dem Schloss deiner Bank — nur stehen dort meistens drei Zertifikate drin: das Endzertifikat der Seite, ein Zwischenzertifikat und die Wurzel.

WurzelzertifikatEndzertifikat
subjectMeine eigene Wurzel-CAder Name, den du eintippst
issuerMeine eigene Wurzel-CAMeine eigene Wurzel-CA
Schlüsselpaarein eigenesein neues, eigenes Paar
wer die Signatur setztdie Wurzel, über sich selbstdie Wurzel, über das Endzertifikat
was es beweistdass jemand diesen privaten Schlüssel hatdass die Wurzel diesen Namen an diesen Schlüssel bindet

Der private Schlüssel des Endzertifikats verlässt nie seinen Besitzer. Die Wurzel signiert eine Aussage über einen öffentlichen Schlüssel und braucht den dazugehörigen privaten Schlüssel dafür nicht. Das ist dieselbe Trennung wie in Kapitel 6.

Unser Zertifikat ist JSON, ein echtes Zertifikat ist DER

Die Demo schreibt ein Zertifikat als JSON, weil du das lesen kannst. Ein echtes Zertifikat enthält denselben Kern — Seriennummer, Subject, Issuer, das Gültigkeitsfenster, den öffentlichen Schlüssel —, steht aber in DER, einer binären Schreibweise, in der jedes Feld einen festen Platz und eine feste Länge hat. Diese Felder und was noch dazukommt, stehen in Kapitel 7.2.

Warum binär und nicht einfach JSON? Eine Signatur steht über Bytes, nicht über Bedeutung. Setz in JSON ein Leerzeichen dazu oder dreh zwei Felder um, und es sind andere Bytes, obwohl dasselbe dasteht: Die Signatur stimmt nicht mehr. Die Demo löst das, indem sie vor dem Signieren immer genau dieselben Felder in genau derselben Reihenfolge wegschreibt. DER macht dasselbe, aber als Abmachung, von der niemand abweichen kann. Das ist der einzige Grund, warum ein Zertifikat unlesbar aussieht.

Bau deine eigene Kette

Alles passiert in deinem Browser. Die Schlüssel werden hier erzeugt und gehen nirgendwohin; schließt du den Tab, sind sie weg.

  1. Klick Wurzelzertifikat erzeugen. Such im JSON die Felder subject und issuer: derselbe Name. Dieses Zertifikat sagt über sich selbst, dass es stimmt.
  2. Tipp einen Namen ein — deinen Vornamen oder eine erfundene Domain wie sam.be — und klick Endzertifikat erzeugen. Schau dir x und y an: Das sind die Koordinaten eines Punktes auf der Kurve aus Kapitel 6.2, und sie sind andere als die der Wurzel. Neues Schlüsselpaar.
  3. Klick Kette prüfen. Die Demo holt den öffentlichen Schlüssel aus dem Wurzelzertifikat und prüft damit die Signatur unter dem Endzertifikat. Gültig.
  4. Klick Einen Buchstaben im Namen ändern. Die Signatur bleibt stehen, die Datumsangaben bleiben stehen, ein einziges Zeichen ändert sich — und die Prüfung läuft sofort neu. Ungültig. Das ist die wichtigste Schaltfläche in diesem Kapitel: So weißt du, dass niemand ein Zertifikat ändern kann ohne den privaten Schlüssel des Ausstellers.
  5. Klick Den Namen zurücksetzen. Wieder gültig, ohne dass irgendetwas neu signiert wurde.
  6. Klick Urteile wie ein Browser. Vier Prüfungen, dreimal JA und einmal NEIN. Lies diese vierte Zeile genau.

Alles stimmt, und trotzdem glaubt dir niemand

Deine Kette ist mathematisch in Ordnung. Jede Signatur ist echt, jede Prüfung gelingt, und die Schlüssel sind von derselben Sorte wie die hinter dem Schloss echter Seiten: ECDSA auf der Kurve P-256, genau das, was du in Kapitel 7.1 selbst benutzt hast. Stellst du das auf einen Webserver, bekommst du trotzdem eine rote Warnung über den ganzen Bildschirm.

Der Grund steht in dieser vierten Zeile der letzten Schaltfläche. Dein Browser prüft die Signaturen, klettert die Kette hoch und landet bei deiner Wurzel. Dort stellt er eine einzige Frage: Steht diese Wurzel in meiner Liste? Das ist eine echte Liste mit echten Fingerabdrücken, die mit dem Browser mitgeliefert wird. Firefox benutzt die von Mozilla, mit rund hundertfünfzig Wurzeln darin; Chrome, Safari und Windows haben je eine von Google, Apple und Microsoft. Deine Wurzel steht in keiner dieser vier, denn du hast sie vor dreißig Sekunden gemacht.

Zwischen deinem Zertifikat und dem deiner Bank steht also kein mathematischer Unterschied. Der Unterschied ist, dass jemand die CA deiner Bank auf eine Liste gesetzt hat und dich nicht. Um daraufzukommen, muss sich eine CA durchleuchten lassen, Regeln befolgen und das jedes Jahr aufs Neue prüfen lassen.

Was eine echte CA tut, bevor sie signiert

Eine CA, die ein Zertifikat für sam.be ausstellt, will zuerst wissen, ob du diese Domain wirklich verwaltest. Meistens läuft das automatisch: Leg eine bestimmte Datei auf den Server oder eine bestimmte Zeile ins DNS der Domain, und die CA schaut nach, ob sie da steht. Kannst du das, dann verwaltest du die Domain. Let's Encrypt macht es so, gratis, und deshalb hat heute so ziemlich jede Seite ein Schloss.

Deine WurzelEine Wurzel aus der Liste
Signiert, was du verlangst. Signiert erst nach einer Prüfung, wer der Antragsteller ist oder was er verwaltet.
Existiert in einem Tab. Steckt in Hunderten Millionen Geräten, jahrelang.
Niemand schaut zu. Jährliche Audits, öffentliche Regeln, und jedes ausgestellte Zertifikat kommt in ein öffentliches Logbuch.
Weg, sobald du deinen Browser schließt. Leckt der private Schlüssel jemals, muss die Wurzel aus allen Listen — und das bricht jede Seite darunter gleichzeitig.

Eine Liste kann man ändern. Füg deine Wurzel der Liste auf deinem eigenen Laptop hinzu, und deine eigenen Zertifikate funktionieren sofort ohne Warnung. Schulen und Firmen machen das auf ihren Geräten, und da steckt ein Haken: Wer eine Wurzel in deine Liste bekommt, kann ein gültiges Zertifikat für jede Seite machen und sich so zwischen dich und das Internet setzen, ohne dass das Schloss irgendetwas merken lässt. Siehe Kapitel 7.4 dafür, was dieses Schloss dann noch wert ist.

Dieselbe Kette steckt im Chip deiner Identitätskarte, nur mit dem belgischen Staat als CA statt dir: oben eine Wurzel des Staates, darunter ein Zertifikat für deine Karte mit deinem Namen drin. Was genau darauf steht und wie du diese Signatur setzen lässt, machst du in Kapitel 8.2.

Das ist Mathematik: wo die Mathematik aufhört

Jeder Schritt in deiner Kette ist nachrechenbar. Signatur unter dem Endzertifikat: prüfbar mit dem Schlüssel aus dem Wurzelzertifikat. Signatur unter dem Wurzelzertifikat: prüfbar mit seinem eigenen Schlüssel. Aber diese letzte Prüfung fügt nichts hinzu — wer den privaten Schlüssel hat, kann über sich selbst signieren, was er will. Ganz oben in jeder Kette steht ein Schlüssel, den du nicht nachrechnen, sondern nur glauben kannst. Das ist der Vertrauensanker.

Das ist keine Schwäche im Entwurf; so funktionieren Beweise. In der Mathematik fängst du mit Axiomen an: Aussagen, die du annimmst, weil du irgendwo anfangen musst. In der Kryptografie heißt das Fachgebiet, das das untersucht, beweisbare Sicherheit, und die Sätze dort haben alle dieselbe Form: wenn diese Annahme stimmt, dann ist dieses System sicher. Nie „das ist sicher“, immer „wenn …, dann …“.

Der Vertrauensanker ist das Axiom des Internets. Nur ist es hier keine mathematische Aussage, sondern eine Organisation, und die Liste der Axiome wird von vier Firmen verwaltet. Da hört die Mathematik auf und fängt die Abmachung an — und es ist nützlich, genau zu wissen, wo diese Grenze liegt.

Bis hierher

Das ist das letzte Kapitel. Angefangen hast du bei Text, der wie Geheimschrift aussah und keine war, und danach hast du selbst gehasht, Passwörter geknackt, mit AES verschlüsselt, ein Geheimnis vereinbart, während alle danebenstanden, Punkte auf einer Kurve addiert, eine Signatur gesetzt und gebrochen, Nachrichten verschickt, die nur dein Freund lesen kann, den Chip deiner Identitätskarte signieren lassen und jetzt eine Zertifikatskette gebaut. Nichts davon war nachgestellt: Es ist dieselbe Mathematik, die hinter dem Schloss deiner Bank läuft.

Was du jetzt auch weißt, ist, wo diese Mathematik aufhört. Verschlüsselung sorgt dafür, dass niemand mitliest und dass niemand unbemerkt etwas ändert. Wem du auf der anderen Seite vertraust, ist eine Entscheidung von Menschen. Das ist kein Loch in der Technik — es ist die Stelle, an der du noch etwas zu sagen hast.