Zuletzt aktualisiert am 06.12.2025 5 Minuten Lesezeit

Salt

Ein Salt ist eine zufällig generierte Zeichenkette, die bei der Passwortspeicherung an das Passwort angehängt wird, bevor es durch eine Hashfunktion verarbeitet wird. Der Begriff stammt aus dem Englischen und bedeutet wörtlich "Salz" - ähnlich wie Salz ein Gericht verändert, macht ein kryptografisches Salt jeden Passwort-Hash einzigartig.

Das Besondere am Salt: Es muss nicht geheim sein. Der Salt wird zusammen mit dem Hash-Wert in der Datenbank gespeichert und ist für jeden Benutzer unterschiedlich. Dadurch erzeugen selbst identische Passwörter völlig verschiedene Hash-Werte - ein entscheidender Schutz gegen Rainbow-Table-Angriffe.

Warum ist ein Salt notwendig?

Ohne Salt könnten Angreifer sogenannte Rainbow Tables verwenden - riesige, vorberechnete Datenbanken, die Hash-Werte ihren ursprünglichen Passwörtern zuordnen. Bei einem Datenbankdiebstahl müsste der Angreifer nur nachschlagen, welches Passwort zu welchem Hash gehört.

Ein Salt zerstört die Wirksamkeit dieser Angriffsmethode grundlegend: Da jeder Benutzer einen eigenen, zufälligen Salt besitzt, müsste ein Angreifer für jeden einzelnen Salt eine separate Rainbow Table erstellen. Bei einem 128-Bit-Salt wären das 2^128 verschiedene Tabellen - praktisch unmöglich.

Wie funktioniert Salting bei der Passwortspeicherung?

Der Ablauf beim Erstellen eines neuen Benutzerkontos sieht folgendermaßen aus:

  1. Salt generieren: Das System erzeugt einen zufälligen Salt (mindestens 16 Bytes)
  2. Kombinieren: Salt und Passwort werden zusammengeführt (z.B. "salt" + "passwort")
  3. Hashen: Die Kombination durchläuft eine Hashfunktion
  4. Speichern: Sowohl Salt als auch Hash werden in der Datenbank abgelegt

Bei der Anmeldung liest das System den gespeicherten Salt, kombiniert ihn erneut mit dem eingegebenen Passwort, berechnet den Hash und vergleicht das Ergebnis mit dem gespeicherten Wert. Stimmen beide überein, ist das Passwort korrekt.

Praktisches Beispiel

Angenommen, zwei Benutzer wählen dasselbe Passwort "geheim123":

Benutzer Passwort Salt Gehashte Kombination
Anna geheim123 x7Kp2mQs hash("geheim123x7Kp2mQs") = a3f2b1...
Max geheim123 9LnR4tWv hash("geheim1239LnR4tWv") = 8c7d6e...

Obwohl beide dasselbe Passwort verwenden, sind die resultierenden Hash-Werte völlig unterschiedlich. Ein Angreifer kann nicht erkennen, dass Anna und Max das gleiche Passwort haben.

Best Practices für die Salt-Generierung

Die sichere Generierung von Salts folgt klaren Richtlinien, die unter anderem vom OWASP und dem BSI empfohlen werden:

  • Mindestlänge: 16 Bytes (128 Bit), besser 32 Bytes
  • Echte Zufälligkeit: Kryptografisch sichere Zufallszahlengeneratoren verwenden (z.B. /dev/urandom unter Linux)
  • Einzigartigkeit: Jeder Benutzer und jedes Passwort erhält einen eigenen Salt
  • Niemals wiederverwenden: Bei Passwortänderung neuen Salt generieren
  • Nicht vorhersehbar: Keine Benutzernamen, Zeitstempel oder andere berechenbare Werte als Salt

Salt in modernen Hashing-Algorithmen

Moderne Passwort-Hashing-Algorithmen integrieren das Salting automatisch. Du musst dich nicht selbst um die Salt-Generierung kümmern - die Bibliotheken erledigen das für dich:

bcrypt

bcrypt generiert automatisch einen 128-Bit-Salt und speichert ihn zusammen mit dem Hash in einem standardisierten Format. Ein bcrypt-Hash sieht beispielsweise so aus:

$2a$12$7Dj5dRTbzw/9YiaeJnGRre.IwYcdoD2PTyE22xBIolQonzzPx02u

# Aufschlüsselung:
# $2a$    = Algorithmus-Version
# 12$     = Cost-Faktor (Anzahl der Iterationen: 2^12)
# 7Dj5... = 22 Zeichen Salt (Base64-kodiert)
# zIw...  = 31 Zeichen Hash

Argon2

Argon2 ist der Gewinner der Password Hashing Competition 2015 und gilt als aktueller Standard. Er erzeugt ebenfalls automatisch Salts und speichert alle Parameter im Ausgabe-String:

$argon2id$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0$hash...

# Parameter:
# argon2id = Variante (empfohlene Hybrid-Version)
# m=65536  = Speicherverbrauch in KB (64 MB)
# t=3      = Anzahl der Durchläufe
# p=4      = Parallelität
# c2Fsd... = Salt (Base64-kodiert)

scrypt

scrypt wurde ursprünglich für Kryptowährungen entwickelt und nutzt ebenfalls Salting. Es ist besonders speicherintensiv, was GPU-basierte Angriffe erschwert.

Salt vs. Pepper - der Unterschied

Neben dem Salt gibt es ein verwandtes Konzept namens Pepper. Beide erhöhen die Sicherheit, unterscheiden sich aber grundlegend:

Eigenschaft Salt Pepper
Einzigartigkeit Pro Benutzer unterschiedlich Systemweit identisch
Speicherort In der Datenbank beim Hash Extern (Konfiguration, HSM)
Geheimhaltung Nicht geheim Streng geheim
Zweck Schützt gegen Rainbow Tables Schützt bei Datenbank-Kompromittierung

Ein Pepper bietet eine zusätzliche Sicherheitsebene: Selbst wenn ein Angreifer die Datenbank mit allen Salts und Hashes stiehlt, fehlt ihm der Pepper. Das BSI empfiehlt die Kombination beider Maßnahmen für maximale Sicherheit.

Implementierung in der Praxis

Als Fachinformatiker für Anwendungsentwicklung wirst du regelmäßig mit Passwort-Hashing arbeiten. Hier ein Beispiel in Python mit bcrypt:

import bcrypt

# Passwort hashen (Salt wird automatisch generiert)
passwort = "meinGeheimesPasswort".encode('utf-8')
hash_mit_salt = bcrypt.hashpw(passwort, bcrypt.gensalt(rounds=12))

print(hash_mit_salt)
# Ausgabe: b'$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/X4.E...'

# Passwort bei Login prüfen
eingabe = "meinGeheimesPasswort".encode('utf-8')
if bcrypt.checkpw(eingabe, hash_mit_salt):
    print("Login erfolgreich!")
else:
    print("Falsches Passwort!")

Wichtig: Verwende immer etablierte Bibliotheken wie bcrypt, Argon2 oder scrypt. Implementiere niemals eigene Salt-Logik - die Bibliotheken handhaben das automatisch und sicher.

Häufige Fehler vermeiden

Bei der Arbeit mit Salts gibt es einige Fallstricke, die du vermeiden solltest:

  • Statischer Salt: Ein systemweiter Salt für alle Benutzer bietet kaum Schutz
  • Kurzer Salt: Weniger als 16 Bytes reduziert die Sicherheit erheblich
  • Vorhersehbarer Salt: Benutzernamen oder Zeitstempel sind keine geeigneten Salts
  • Unsichere Zufallsgeneratoren: random() statt kryptografisch sicherer Funktionen
  • Eigenentwicklung: Selbst implementierte Salting-Logik statt bewährter Bibliotheken

Quellen und weiterführende Links