Salt (Kryptologie)

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Salt (englisch für Salz) bezeichnet in der Kryptographie eine zufällig gewählte Zeichenfolge, die an einen gegebenen Klartext vor der Verwendung als Eingabe einer Hashfunktion angehängt wird, um die Entropie der Eingabe zu erhöhen. Es wird häufig für die Speicherung und Übermittlung von Computer-Passwörtern benutzt. Bei der Überprüfung eines Passworts wird jedoch nicht jedes Mal ein neuer Salt erzeugt, da sich sonst der entstandene Hashwert von dem gespeicherten unterscheiden und somit das Passwort abgelehnt würde. Deshalb wird bei der Generierung eines Passworts der dort verwendete Salt zusammen mit dem entstandenen Hashwert in einer Datenbank gespeichert.

Motivation[Bearbeiten | Quelltext bearbeiten]

Kryptographische Hashfunktionen, wie z. B. MD5 oder SHA erzeugen für unterschiedliche Klartexte (z. B. unterschiedliche Passwörter) jeweils unterschiedliche Hash-Werte. Aus der Kollisionsresistenz der Hashfunktion folgt, dass die Wahrscheinlichkeit, dass für zwei unterschiedliche Passwörter der gleiche Hashwert erzeugt wird, so klein ist, dass sie in der Praxis vernachlässigt werden kann. Daher kann man an gleichen Hashwerten erkennen, welche Benutzer ziemlich sicher dasselbe Kennwort gewählt haben.[1] Zudem muss bei Wörterbuch- und Brute-Force-Angriffen jedes zu prüfende mögliche Passwort nur ein einziges Mal berechnet (gehasht) werden, und dieser Wert muss anschließend nur mit einer Liste von vorliegenden Passwort-Hashes verglichen werden. Für Algorithmen wie MD5 liegen diese Listen in Form von Rainbow Tables bereits vor und erleichtern damit das Knacken von Passwörtern.

Abhilfe[Bearbeiten | Quelltext bearbeiten]

Salt[Bearbeiten | Quelltext bearbeiten]

Die Verwendung eines Salts erhöht den Aufwand dieser Angriffe auf die Verschlüsselung (Chiffre) deutlich.[2] Wörterbuchangriffe durch Rainbow Tables werden erschwert, da nicht mehr in einer Liste von verschlüsselten Werten (Hashtabelle) der zugehörige unverschlüsselte Wert nachgeschlagen werden kann, sondern für jeden Klartext hash (Klartext + Salt) = bekannter Hash überprüft werden muss, was viel Rechenzeit kostet. Rainbow Tables müssten deshalb sehr viel umfangreicher werden,[3] sie müssten alle ursprünglich unterstützten Passwörter in jeder Kombination mit den angehängten Bits Salt enthalten – die Anzahl der neuen Einträge wäre dabei -mal so groß wie zuvor. Damit kann ein Salt die Bildung einer Tabelle unwirtschaftlich machen. Weiterhin wird die Informationssicherheit erhöht, da zwei identische Klartexte, zum Beispiel zwei zufällig gleich gewählte Passwörter unterschiedlicher Benutzer, durch unterschiedliche Salts zu verschiedenen Verschlüsselungen (Chiffren) führen.

Pepper[Bearbeiten | Quelltext bearbeiten]

Um Wörterbuch- und Brute-Force-Angriffe zu erschweren, kann das Passwort mit einer vom Server gewählten und geheimgehaltenen Zeichenfolge kombiniert werden, bevor der Hash-Wert berechnet wird. Diese Zeichenfolge wird Pepper (Pfeffer)[4] genannt und ist normalerweise für alle Passwörter auf einem Server gleich. Wenn der Pepper zusätzlich noch jeweils für jedes Passwort geändert wird, kann die Sicherheit weiter erhöht werden. Der Pepper wird nicht in derselben Datenbank gespeichert wie das Passwort, sondern an einem möglichst sicheren Ort hinterlegt. Erlangt ein Angreifer nur Zugriff auf die Datenbank (SQL-Injection), so erfährt er immer noch die Hash-Werte; die Hash-Werte stammen aber nicht mehr von schwachen Passwörtern, sondern von Kombinationen von Passwort und einem starken Pepper. Kein Wörterbuch enthält je solche Passwörter, ein Wörterbuchangriff ist darum sinnlos und auch ein Brute-Force-Angriff wird deutlich erschwert. Häufig wird empfohlen einen HMAC zu verwenden, um Passwort und Pepper zu kombinieren.

Anwendungen[Bearbeiten | Quelltext bearbeiten]

Protokolle, die Salt benutzen, sind beispielsweise SSL und CipherSaber. Wo die Anmeldung über das Internet oder andere Netzwerke erfolgt, werden die Zugangsdaten häufig mit Salts versehen. Rainbow-Table-Angriffe werden somit effektiv verhindert, falls nach einem Einbruch in die Server-Infrastruktur die Datenbank mit den Benutzernamen und Kennwort-Hashwert kopiert wird. Durch Anfügen von Salts werden die vorgefertigten Rainbow Tables wertlos, was besonders für häufig anzutreffende, kurze oder einfache Passwörter wichtig ist. Weiterhin ergeben mehrere gleiche Passwörter unterschiedliche Hashwerte.

Probleme[Bearbeiten | Quelltext bearbeiten]

Bildet ein Verfahren aufgrund eines Programmierfehlers oder einer fehlerhaften Implementierung z. B. nur 1.000 unterschiedliche Salts, kann das Erstellen einer Rainbow Table weiterhin lohnend sein. Derartige Fälle werden als „schwache“ Salts bezeichnet. Ein solches Verfahren sind die von Windows-Systemen (XP, Vista) angelegten, zwischengespeicherten Anmeldeinformationen (DCC, Domain Cached Credentials, von Cracking-Programmen auch als MS-Cache-Hashes bezeichnet). Der Benutzername wird dabei als Salt verwendet. Rainbow Tables können daher weiterhin für weit verbreitete Benutzernamen erzeugt werden, z. B. administrator.

Auf reine Brute-Force-Angriffe (Durchprobieren von Klartexten/Passwörtern) bzw. Angriffe die nicht auf das Chiffrat abzielen hat ein Salt keine sicherheitssteigernde Wirkung. Hierfür sind zusätzlich rechnerisch aufwändige Berechnungen zwischenzuschalten (key stretching), deren Zweck es ist ein Durchprobieren bis zur praktischen Nutzlosigkeit zu verlangsamen. Ein Beispiel dafür ist der PBKDF2-Algorithmus der häufig zum Speichern von Passwörtern zum Einsatz kommt.

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Passwort - Sicherer mit Hash und Salt. In: Datenschutzbeauftragter INFO 11. März 2013, Abgerufen am 5. November 2013
  2. Sicheres Speichern von Passwörtern - Versalzen wir die Suppe. www.martinstoeckli.ch Abgerufen am 30. Oktober 2013
  3. Cracker-Bremse - Bremsfaktor. In: c't 13/2011, Seite 148 Abgerufen am 30. Oktober 2013
  4. Sicheres Speichern von Passwörtern - Geben wir noch etwas Pfeffer dazu. www.martinstoeckli.ch Abgerufen am 30. Oktober 2013

Siehe auch[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]