Fortgeschrittene Kryptographie-Konzepte: Von CSPRNG bis Forward Secrecy
In einer Ära allgegenwärtiger Datenschutzverletzungen und ausgefeilter staatlich geförderter Überwachung hat sich die Rolle der Kryptographie von einer akademischen Nischendisziplin zum Fundament der digitalen Wirtschaft gewandelt. Während viele Entwickler mit grundlegenden Konzepten wie „Hashing“ oder „symmetrischer Verschlüsselung“ vertraut sind, hängt die reale Sicherheit eines Systems oft von fortgeschritteneren, nuancierteren Primitiven ab.
In diesem Leitfaden untersuchen wir die kritischen Komponenten, die moderne kryptographische Protokolle wie TLS 1.3 und Signal möglich machen: von der Erzeugung von Zufälligkeit bis hin zur Garantie, dass die Geheimnisse von heute sicher bleiben, selbst wenn die Schlüssel von morgen kompromittiert werden.
1. Die Grundlage der Zufälligkeit: CSPRNG
Jede kryptographische Operation beginnt mit einem Geheimnis, und jedes Geheimnis beginnt mit Zufälligkeit. In der Welt der Computer – die im Grunde deterministische Maschinen sind – ist echte Zufälligkeit jedoch überraschend schwer zu finden.
Was ist ein CSPRNG?
Ein kryptographisch sicherer Pseudozufallszahlengenerator (CSPRNG) ist ein spezialisierter Algorithmus, der darauf ausgelegt ist, Zahlenfolgen zu erzeugen, die von echtem zufälligem Rauschen nicht zu unterscheiden sind. Im Gegensatz zu Standard-PRNGs (wie Math.random() in JavaScript) muss ein CSPRNG zwei kritische Anforderungen erfüllen:
- Next-Bit-Test: Gegeben die ersten k Bits einer Sequenz, sollte ein Angreifer mit unbegrenzter Rechenleistung nicht in der Lage sein, das $(k+1)$-te Bit mit einer Wahrscheinlichkeit vorherzusagen, die signifikant höher als 50 % ist.
- State Compromise Extensions: Wenn der interne Zustand des Generators kompromittiert wird, sollte es unmöglich sein, frühere Zufallsausgaben zu rekonstruieren (Backtracking-Resistenz) oder zukünftige vorherzusagen (Vorhersage-Resistenz, vorausgesetzt, es wird neue Entropie hinzugefügt).
Die Entropiequelle
Ein CSPRNG ist nur so gut wie seine Entropiequelle. Moderne Betriebssysteme sammeln „Rauschen“ von Hardware-Ereignissen – wie Tastatur-Timings, Mausbewegungen, Festplatten-I/O-Interrupts und thermisches Rauschen –, um den Generator zu initialisieren (Seeding). In Linux wird dies von /dev/urandom übernommen.
2. Authentifizierte Verschlüsselung mit assoziierten Daten (AEAD)
Über Jahrzehnte hinweg wurde Entwicklern beigebracht, für die Vertraulichkeit zu verschlüsseln und für die Integrität einen MAC (wie HMAC) zu verwenden. Dieser „Encrypt-then-MAC“-Ansatz ist sicher, aber anfällig für Implementierungsfehler.
Der Aufstieg von AEAD
AEAD (Authenticated Encryption with Associated Data) vereinfacht dies, indem es sowohl Vertraulichkeit als auch Integrität in einem einzigen kryptographischen Primitiv bereitstellt. Wenn Sie einen AEAD-Modus wie AES-GCM oder ChaCha20-Poly1305 verwenden, erzeugt der Algorithmus:
- Geheimtext: Die verschlüsselten Daten.
- Authentifizierungs-Tag: Eine kryptographische Prüfsumme, die beweist, dass der Geheimtext nicht manipuliert wurde.
Assoziierte Daten (AD)
Der „AD“-Teil ermöglicht es Ihnen, Daten zu authentifizieren, die nicht verschlüsselt sind. Beispielsweise muss in einem Netzwerkpaket der Header (der die Ziel-IP enthält) im Klartext bleiben, damit Router ihn lesen können, aber er sollte authentifiziert sein, damit ein Angreifer das Ziel nicht unbemerkt ändern kann.
3. Schlüsselableitungsfunktionen (KDF)
Sie sollten niemals ein rohes Passwort als Verschlüsselungsschlüssel verwenden. Menschen wählen vorhersehbare Passwörter, während kryptographische Algorithmen Bitstrings mit hoher Entropie und gleichmäßiger Verteilung erfordern.
Was macht eine KDF?
Eine Schlüsselableitungsfunktion (KDF) nimmt eine Entropiequelle (wie ein Passwort oder ein gemeinsames Geheimnis aus einem Schlüsselaustausch) und „streckt“ oder „leitet“ einen oder mehrere kryptographisch starke Schlüssel daraus ab.
Moderne KDF-Standards
- PBKDF2: Ein älterer Standard, der wiederholtes Hashing verwendet, um Brute-Force-Angriffe zu verlangsamen.
- Argon2: Der Gewinner der Password Hashing Competition (PHC), der darauf ausgelegt ist, resistent gegen GPU- und ASIC-basiertes Cracking zu sein.
- HKDF (HMAC-basierte KDF): Weit verbreitet in Protokollen wie TLS 1.3, um mehrere unabhängige Schlüssel (z. B. einen Verschlüsselungsschlüssel und einen Authentifizierungsschlüssel) aus einem einzigen gemeinsamen Geheimnis abzuleiten.
4. Ephemerer Schlüsselaustausch und Forward Secrecy
Eines der mächtigsten Konzepte der modernen Kryptographie ist die Perfect Forward Secrecy (PFS).
Das Problem mit statischen Schlüsseln
In älteren Versionen von SSL verwendete der Server einen statischen privaten RSA-Schlüssel, um Sitzungsschlüssel auszutauschen. Wenn ein Angreifer Ihren gesamten verschlüsselten Datenverkehr über Jahre hinweg aufgezeichnet hätte und es ihm dann gelänge, den privaten Schlüssel des Servers zu stehlen, könnte er zurückgehen und den gesamten gesammelten historischen Datenverkehr entschlüsseln.
Die Lösung: Ephemerer Schlüsselaustausch
Moderne Protokolle verwenden Ephemeral Diffie-Hellman (DHE) oder Elliptic Curve Diffie-Hellman (ECDHE).
- Ephemer bedeutet, dass die Schlüssel temporär sind; für jede einzelne Sitzung wird ein neues, einzigartiges Schlüsselpaar generiert.
- Sobald die Sitzung beendet ist, werden die Schlüssel aus dem Speicher gelöscht.
Erreichen von Forward Secrecy
Da der langfristige Identitätsschlüssel des Servers nur zum Signieren des Austauschs verwendet wird (um die Identität des Servers zu beweisen) und nicht zum Verschlüsseln der Sitzungsschlüssel, hilft die Kompromittierung des langfristigen Schlüssels einem Angreifer nicht dabei, vergangenen Datenverkehr zu entschlüsseln. Dies ist der Goldstandard für den Datenschutz.
5. Zusammenfassung: Aufbau eines sicheren Systems
Um eine moderne, sichere Anwendung zu erstellen, sollten Sie diese Architekturmuster befolgen:
- Geheimnisse generieren mit einem vom System bereitgestellten CSPRNG (z. B.
crypto.getRandomValues()im Browser odercrypto.randomBytes()in Node.js). - Passwörter speichern mit Argon2 oder Scrypt.
- Daten im Ruhezustand schützen mit einem AEAD-Modus wie AES-256-GCM.
- Daten bei der Übertragung schützen mit TLS 1.3 und ECDHE für Forward Secrecy.
- Sub-Schlüssel ableiten mit HKDF, anstatt denselben Hauptschlüssel für verschiedene Zwecke wiederzuverwenden.
Durch das Verständnis dieser fortgeschrittenen Konzepte gehen Sie über das bloße „Abhaken“ von Sicherheitsanforderungen hinaus und beginnen mit dem Aufbau von Systemen, die sowohl gegen aktuelle Bedrohungen als auch gegen zukünftige Schwachstellen resistent sind.