Was ist Schlüsselableitung?
Schlüsselableitung ist der Prozess, einen Quellwert – typischerweise ein Passwort, eine Passphrase oder ein gemeinsames Geheimnis – mittels eines deterministischen Algorithmus in einen oder mehrere kryptografische Schlüssel mit hoher Entropie umzuwandeln.
Vom Menschen gewählte Passwörter sind als kryptografische Schlüssel von Natur aus schwach. Sie sind kurz, haben begrenzte Zeichensätze und folgen vorhersehbaren Mustern. Eine Schlüsselableitungsfunktion (KDF) schließt diese Lücke, indem sie das Passwort durch einen rechenintensiven Algorithmus verarbeitet, der einen Schlüssel fester Länge erzeugt, der für die Verschlüsselung geeignet ist.
Schlüsselableitungsfunktionen sind bewusst so gestaltet, dass sie langsam und ressourcenintensiv sind. Das ist für die meisten Software-Bereiche, in denen Geschwindigkeit zählt, kontraintuitiv – für KDFs ist die Langsamkeit jedoch ein Sicherheitsmerkmal. Ein Angreifer, der ein Passwort per Brute-Force knacken will, muss die KDF für jeden Versuch ausführen. Wenn die KDF 100 Millisekunden pro Versuch benötigt, würde das Testen einer Milliarde Passwörter über drei Jahre dauern – im Vergleich zu Sekunden mit einer schnellen Hash-Funktion.
Verbreitete KDFs sind PBKDF2, bcrypt, scrypt und Argon2. Jede balanciert verschiedene Ressourcen (CPU-Zeit, Speicher, Parallelität) aus, um unterschiedlichen Angriffsstrategien standzuhalten. Die Wahl der KDF hängt von der Umgebung ab: Browserbasierte Anwendungen verwenden typischerweise PBKDF2, weil sie über die Web Crypto API verfügbar ist, während serverseitige Anwendungen möglicherweise Argon2 wegen seiner Speicherhärte bevorzugen.
Wie Vaulted Schlüsselableitung verwendet
Wenn du eine optionale Passphrase für ein Geheimnis setzt, verwendet Vaulted Schlüsselableitung, um diese Passphrase in einen Wrapping-Schlüssel umzuwandeln. Konkret führt es PBKDF2 mit 100.000 Iterationen, SHA-256 und einem zufälligen 16-Byte-Salt über die Web Crypto API aus. Der abgeleitete Schlüssel wird mit AES-KW verwendet, um den ursprünglichen AES-256-GCM-Verschlüsselungsschlüssel einzuwickeln (Key Wrapping). Der Empfänger muss dieselbe Passphrase eingeben, um denselben Wrapping-Schlüssel abzuleiten, den Verschlüsselungsschlüssel zu entpacken und das Geheimnis schließlich zu entschlüsseln.