Was ist Salt (Kryptografie)?
Ein kryptografischer Salt ist ein zufälliger Wert, der mit einem Passwort oder einer anderen Eingabe kombiniert wird, bevor diese von einer Hash-Funktion oder Schlüsselableitungsfunktion verarbeitet wird. Er stellt sicher, dass identische Eingaben unterschiedliche Ausgaben erzeugen, und macht vorberechnete Angriffstabellen wirkungslos.
Auch bekannt als: salt, cryptographic salt
Ohne Salt erzeugen identische Passwörter immer identische Hashes. Ein Angreifer mit einer vorberechneten Tabelle, die gängige Passwörter ihren Hash-Werten zuordnet (Rainbow-Table), kann jeden übereinstimmenden Hash in einer gestohlenen Datenbank sofort nachschlagen. Salting vereitelt diesen Angriff, indem es vor dem Hashing einen eindeutigen zufälligen Wert in jedes Passwort einmischt. Selbst wenn zwei Nutzer dasselbe Passwort haben, sorgen unterschiedliche Salts für unterschiedliche Hash-Ausgaben.
Ein Salt muss nicht geheim sein – er wird typischerweise im Klartext zusammen mit dem Hash oder dem abgeleiteten Schlüssel gespeichert. Sein Zweck ist es, den Angreifer zu zwingen, jeden Hash einzeln zu berechnen, statt vorberechnete Tabellen zu nutzen. Ein zufälliger 16-Byte-Salt bietet 2^128 mögliche Variationen für jedes Passwort, was Vorberechnungen vollständig unpraktikabel macht.
Salts sind in zwei Kontexten essenziell: beim Passwort-Hashing (wo sie gespeicherte Passwort-Hashes in Datenbanken schützen) und bei der Schlüsselableitung (wo sie sicherstellen, dass dieselbe Passphrase für unterschiedliche Operationen verschiedene abgeleitete Schlüssel erzeugt). In beiden Fällen muss der Salt mit einem kryptografisch sicheren Zufallsgenerator erzeugt werden und pro Operation einzigartig sein – nie über Nutzer oder Verschlüsselungsoperationen hinweg wiederverwendet.
Wie Vaulted Salt (Kryptografie) verwendet
Wenn einem Vaulted-Geheimnis eine Passphrase hinzugefügt wird, wird clientseitig ein zufälliger 16-Byte-Salt über die Web Crypto API generiert. Dieser Salt wird zusammen mit der Passphrase und 100.000 Iterationen in PBKDF2 eingespeist, um einen AES-KW-Wrapping-Schlüssel abzuleiten. Der Salt wird dann ins URL-Fragment eingebettet, damit der Browser des Empfängers denselben Wrapping-Schlüssel aus der Passphrase neu ableiten kann. Jedes Geheimnis mit einer Passphrase erhält seinen eigenen einzigartigen Salt – damit stellt dieselbe Passphrase für verschiedene Geheimnisse unterschiedliche Wrapping-Schlüssel sicher.