Was ist PBKDF2?
PBKDF2 (Password-Based Key Derivation Function 2) ist ein Schlüsselableitungsalgorithmus gemäß RFC 8018, der eine pseudozufällige Funktion – typischerweise HMAC-SHA-256 – iterativ auf ein Passwort und einen Salt anwendet, um einen abgeleiteten Schlüssel zu erzeugen, der per Brute-Force rechnerisch aufwendig zu knacken ist.
Auch bekannt als: Password-Based Key Derivation Function 2, PBKDF, RFC 8018
PBKDF2 funktioniert, indem es einen HMAC (Hash-based Message Authentication Code) wiederholt auf die Kombination aus Passwort und einem zufälligen Salt anwendet. Die Iterationsanzahl steuert, wie oft diese Operation ausgeführt wird – mehr Iterationen bedeuten mehr CPU-Zeit pro Schlüsselableitungsversuch und erhöhen so direkt die Kosten für einen Angreifer, der das Passwort erraten will.
Der Salt ist ein zufälliger Wert, der für jede Schlüsselableitungsoperation einmalig ist. Er verhindert vorberechnete Lookup-Angriffe (Rainbow-Tables), indem er sicherstellt, dass dasselbe Passwort bei unterschiedlichen Salts unterschiedliche abgeleitete Schlüssel ergibt. Der Salt muss nicht geheim sein – er wird typischerweise zusammen mit dem abgeleiteten Schlüssel oder dem Geheimtext gespeichert.
PBKDF2 wurde im Jahr 2000 standardisiert und wird nach wie vor breit unterstützt, insbesondere in Browsern über die Web Crypto API. Während neuere KDFs wie Argon2 durch ihren hohen Speicherbedarf stärkere Resistenz gegen GPU- und ASIC-Angriffe bieten, bleibt PBKDF2 eine solide Wahl für browserbasierte Anwendungen, bei denen Web-Crypto-API-Kompatibilität unerlässlich ist und die Iterationsanzahl hoch genug eingestellt werden kann, um angemessene Sicherheit zu bieten.
Wie Vaulted PBKDF2 verwendet
Vaulted verwendet PBKDF2 über die Web Crypto API, wenn einem Geheimnis eine Passphrase hinzugefügt wird. Die Implementierung nutzt 100.000 Iterationen mit HMAC-SHA-256 und einem zufälligen 16-Byte-Salt. Der abgeleitete 256-Bit-Schlüssel wird als AES-KW-Wrapping-Schlüssel verwendet, um den Haupt-AES-256-GCM-Schlüssel zu verschlüsseln. Der Salt wird zusammen mit dem eingewickelten Schlüssel im URL-Fragment gespeichert, damit der Empfänger denselben Wrapping-Schlüssel aus der Passphrase neu ableiten kann.