Symmetrische Verschlüsselung
Julius Caesar schrieb seine Briefe an seine Generäle in Geheimschrift: jeder
Buchstabe ein paar Plätze weiter im Alphabet. A wird
D, B wird E. Wer wusste, wie viele
Plätze, konnte lesen. Wer es nicht wusste, sah Unsinn. Dieses „wie viele
Plätze“ ist der Schlüssel — und zweitausend Jahre später ist
dieser Gedanke immer noch die Grundlage dafür, wie deine Nachrichten
gesichert sind.
Wörter, die du gleich brauchst
- Schlüssel
- Das Geheimnis, das du brauchst, um zu verschlüsseln und zu entschlüsseln. Bei Caesar eine Zahl von 1 bis 25. Bei modernen Systemen eine Reihe von 256 zufälligen Bits. Wer den Schlüssel hat, kann lesen. Wer nicht, nicht.
- Symmetrisch
- Derselbe Schlüssel schließt und öffnet. Wie der Schlüssel deines Fahrradschlosses: einer, und den musst du mit jedem teilen, der das Schloss öffnen darf.
- Klartext und Geheimtext
- Klartext ist deine normale Nachricht. Geheimtext ist das, was nach dem Verschlüsseln herauskommt: für jeden ohne Schlüssel einfach Rauschen.
- AES
- Die Geheimschrift, die heute fast alles benutzt: dein WLAN, deine Nachrichten, deine Bank-App. Seit 2001 der Weltstandard, und in all diesen Jahren hat niemand ein Loch darin gefunden. Es gibt drei Größen — AES128, AES192 und AES256 — und diese Zahl ist die Länge des Schlüssels in Bits. Die Demo unten benutzt AES256.
Derselbe Schlüssel, in beide Richtungen
Das ist der Kern dieses Kapitels. Verschlüsseln und Entschlüsseln benutzen denselben Schlüssel. In Formeln:
Geheimtext = AES(Schlüssel, Klartext)
Klartext = AES−1(Schlüssel, Geheimtext)
Obere Zeile: Nachricht rein, Geheimtext raus. Untere Zeile: genau andersherum — AES−1 ist der Rückweg, so wie ÷ 3 der Rückweg von × 3 ist. Aber schau, was in beiden Zeilen steht: Schlüssel. Dasselbe Wort, derselbe Wert. Ein Schlüssel, der schließt und öffnet, wie der Schlüssel deines Fahrradschlosses.
Gleich in der Demo siehst du das wieder: ein einziges Passwortfeld, das du sowohl bei Verschlüsseln als auch bei Entschlüsseln benutzt. Daraus folgt etwas:
| Wer | Was er haben muss |
|---|---|
| Du, zum Verschlüsseln | den Schlüssel |
| Dein Freund, zum Entschlüsseln | genau denselben Schlüssel |
| Der Lauscher | alles außer dem Schlüssel — und damit kommt er nirgendwo hin |
Bevor ihr auch nur eine einzige Nachricht austauschen könnt, müsst ihr beide schon dasselbe Geheimnis kennen. Das klingt selbstverständlich, wenn dein Freund neben dir auf dem Sofa sitzt. Ist es aber nicht, und unten in diesem Kapitel siehst du, warum.
Was sich in 2000 Jahren geändert hat
Caesar hatte 25 mögliche Schlüssel. Die probierst du in einer Viertelstunde alle von Hand durch. AES256 hat 2256 mögliche Schlüssel. Lass alle Computer der Erde zusammen daran arbeiten, und sie sind immer noch beschäftigt, wenn die Sonne erlischt. Das Prinzip ist dasselbe; nur die Mathematik unter der Motorhaube ist unvergleichlich schlauer.
Dieser eine Gedanke oben — ein Schlüssel, zwei Richtungen — ist also seit zweitausend Jahren gleich geblieben. Was in der Praxis dazukommt, um es wasserdicht zu machen, siehst du nach der Demo.
Probier es selbst
Alles passiert in deinem Browser. Es wird nichts an den Server geschickt.
- Klick Verschlüsseln. Das verschlüsselte Paket erscheint im unteren Feld — unlesbar.
- Klick Entschlüsseln. Deine Nachricht kommt zurück.
- Ändere jetzt einen Buchstaben im Passwort und klick wieder Entschlüsseln. Keine Nachricht, nur eine Verweigerung.
- Setz das Passwort zurück. Klick Ein Bit umklappen — die Demo ändert eine einzige 0 im Paket in eine 1. Klick Entschlüsseln. Das Siegel ist gebrochen.
- Verschlüssele dieselbe Nachricht zweimal. Vergleich die beiden Pakete.
Zwei Verbesserungen, die dazugekommen sind
Alles oben gilt schon seit Caesar. Aber mit „ein Schlüssel, zwei Richtungen“ allein bist du noch nicht fertig: dieselbe Nachricht zweimal geschickt würde zweimal gleich aussehen, und du würdest nicht merken, wenn jemand unterwegs an deinem Geheimtext herumgespielt hat. Dafür sind zwei Dinge dazugekommen, und du findest beide in dem Paket wieder, das dir die Demo gerade gegeben hat.
Zwei Wörter dazu
- IV (Initialisierungsvektor)
- Eine zufällige Zahl, die bei jeder Nachricht anders ist, damit dieselbe Nachricht zweimal mit demselben Schlüssel trotzdem zwei verschiedene Geheimtexte ergibt. Sonst würde ein Mitleser sehen: „hey, diese Nachricht hat er gestern auch geschickt“.
- Siegel (GCM)
- Eine Kontrollzahl von 16 Bytes, die hinten am Geheimtext hängt und mit dem Schlüssel berechnet wird. Ändert sich unterwegs ein einziges Bit, dann stimmt das Siegel nicht mehr und das Entschlüsseln wird verweigert. GCM ist der Name der AES-Betriebsart, die so ein Siegel erzeugt.
Was in diesem Paket steckt
Das Paket im unteren Feld ist nicht nur deine verschlüsselte Nachricht. Es sind vier Stücke hintereinander, und die Demo zeigt dir die ersten zwei einzeln:
| Stück | Geheim? | Wofür |
|---|---|---|
| Salt | nein | Um aus deinem Passwort einen Schlüssel zu machen. Kennst du aus Kapitel 3 — gleicher Trick, gleicher Grund. |
| IV | nein | Sorgt dafür, dass dieselbe Nachricht jedes Mal anders aussieht. |
| Geheimtext | ja | Deine Nachricht, verschlüsselt. Das einzige Stück, das etwas verbirgt. |
| Siegel | nein, aber unfälschbar | Bricht, sobald sich ein einziges Bit am Geheimtext ändert. |
In Formeln. Achte auf die zweite Zeile: das ist die Verschlüsselungsformel von oben, jetzt mit dem IV dazu.
Schlüssel = PBKDF2(Passwort, Salt)
Geheimtext = AES(Schlüssel, IV, Klartext)
Siegel = GCM(Schlüssel, IV, Geheimtext)
Der IV: dieselbe Nachricht, jedes Mal anders
Schau auf die zweite Formel. AES bekommt nicht nur den Schlüssel und deine Nachricht, sondern auch den IV. Benutzt du jedes Mal denselben IV, dann ergibt dieselbe Nachricht mit demselben Schlüssel immer exakt denselben Geheimtext. Das ist das Problem mit dem Salt aus Kapitel 3, nur in einem anderen Mantel:
| Nachricht | IV | Geheimtext |
|---|---|---|
| Ich bin hinter der Sporthalle… | 0a1b2c3d… | 5d4c29d39a38… |
| Ich bin hinter der Sporthalle… | 0a1b2c3d… (derselbe) | 5d4c29d39a38… (derselbe!) |
| Ich bin hinter der Sporthalle… | 9d8e7f6a… (neu) | 276598dfaf7f… |
Zeile eins und zwei: wer mitliest, sieht zweimal dasselbe Paket vorbeikommen. Er weiß nicht, was du geschickt hast, aber sehr wohl, dass du dasselbe geschickt hast wie gestern — und manchmal reicht das schon. Zeile drei: neuer IV, und es ist nichts mehr wiederzuerkennen. Darum zieht die Demo bei jedem Klick auf Verschlüsseln einen frischen IV, und darum hast du bei Schritt 5 zwei völlig verschiedene Pakete gesehen. Der IV muss nicht geheim sein. Er muss nur neu sein.
Das Siegel: ein Bit falsch und die Tür bleibt zu
Die dritte Formel macht das Siegel: eine Berechnung über den ganzen Geheimtext, mit dem Schlüssel darin verarbeitet. Die Empfängerin macht diese Berechnung noch einmal und vergleicht. Stimmt das Siegel, wird entschlüsselt. Stimmt es nicht, dann kommt überhaupt nichts heraus — kein „fast richtig“, kein Müll, einfach eine Verweigerung. Das hast du bei Schritt 4 gesehen.
Warum kann ein Pfuscher das Siegel nicht einfach selbst neu berechnen, nachdem er ein Bit geändert hat? Weil der Schlüssel in der Formel steckt. Ohne Schlüssel kann er zwar Bits umklappen, aber kein Siegel machen, das stimmt. So bekommst du zwei Dinge auf einmal: niemand kann lesen, was drin steht, und niemand kann unbemerkt daran herumspielen. Das Zweite hatte Caesar nie.
Das Problem, das Caesar auch schon hatte
Caesar konnte seinem General den Schlüssel zuflüstern, bevor der losritt. Du kannst das auch: flüster das Passwort, oder schreib es auf einen Zettel, den du weitergibst. Aber wie machst du das mit einer Website in Amerika, die du noch nie gesehen hast und die dir innerhalb einer Sekunde eine gesicherte Verbindung geben muss?
Du kannst den Schlüssel nicht einfach mitschicken — dann liest der Lauscher ihn mit und alles war umsonst. Und verschlüsselt mitschicken kannst du ihn auch nicht, denn womit dann? Dafür bräuchtest du schon wieder einen Schlüssel, den ihr beide bereits kennt. Du drehst dich im Kreis.
Das heißt das Schlüsselaustauschproblem, und es schien jahrhundertelang unlösbar. Bis sich 1976 zwei Mathematiker etwas ausdachten, das wie ein Zaubertrick klingt. Das ist das nächste Kapitel.
Das ist Mathematik: eine Rechenart, die sich selbst rückgängig macht
Warum kann ein Schlüssel in beide Richtungen? Wegen einer Rechenart, die du nur ein einziges Mal lernen musst: XOR, geschrieben als ⊕. Sie arbeitet auf einzelnen Bits, und die ganze Tabelle passt hierhin:
| a | b | a ⊕ b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Verschieden ergibt 1, gleich ergibt 0. Nimm jetzt ein Bit und XOR zweimal dasselbe dazu: 1 ⊕ 1 = 0, und dann 0 ⊕ 1 = 1 — wieder am Anfang. Probier es mit allen vier Zeilen, es stimmt immer:
(a ⊕ b) ⊕ b = a
Genau da steckt deine Antwort. AES macht aus dem Schlüssel und dem IV eine lange Kette von Bits, die völlig zufällig aussieht, und dein Geheimtext ist deine Nachricht XOR diese Kette. Entschlüsseln heißt, dieselbe Kette noch einmal dazu zu XOR-en. Nicht eine umgekehrte Rechenart — dieselbe. Daher ein Schlüssel, zwei Richtungen.
Das ist Boolesche Algebra: Rechnen mit wahr und falsch statt mit Zahlen, ausgedacht von George Boole um 1850, lange bevor es einen einzigen Computer gab. Jeder Chip der Welt ist daraus aufgebaut.