Salt’n’Pepper – Username als Pepper zum Salt

Soeben hatte ich eine Idee für einen dynamisch aus den vorliegenden Logindaten erzeugten Salt – quasi Pepper zum Salt.

Für diejenigen unter euch, die nicht wissen, was Salt in Verbindung mit der Speicherung von Passwörtern bedeutet, hier ein kurzer Auszug aus der Wikipedia:

Salt (engl. „Salz“) bezeichnet in der Kryptographie eine zufällig gewählte Bitfolge, die an einen gegebenen Klartext vor der Verwendung als Eingabe einer Hashfunktion angehängt wird, um die Entropie der Eingabe zu erhöhen. Die Verwendung eines Salts erhöht den Aufwand von Wörterbuch-und Brute-Force-Angriffen oder Angriffen unter Verwendung einer Rainbow Table auf die Chiffre deutlich…

Da bei einer Loginsession (in 99% aller Fälle) genau zwei Konstanten zur Verfügung stehen – zum Einen der „Benutzername“ und zum Anderen das „Passwort“ – läßt sich doch genau mit diesen ein solches, von mir „Salt’n’Pepper“ getauftes, Verfahren realisieren.

Ganz neu scheint diese Idee oder der Gedanke jedenfalls nicht zu sein (siehe hier).

Ich bin mir nur noch nicht sicher, ob es sich bei dieser Idee wirklich um eine sinnvolle handelt, oder ob der Ansatz eher zu „security through obscurity“ bzw.  „security by obscurity“ zählt. Was aber auch laut Wikipedia nicht grundsätzlich negativ wäre:

Als Ergänzung bestehender Sicherheitskonzepte kann sich Verschleierung jedoch als wirkungsvoll z. B. gegenüber automatisierten Angriffen erweisen.

In den mir bekannten Systemen wird entweder ein komplett anderes Hashing-Verfahren wie z.B. phpass eingesetzt (wie z. B. bei WordPress), oder es wird ein simples Md5-Hashing in Kombination mit einer Unbekannten als Salt für den Hash verwendet. Die Salt-Funktion wird dabei, um eine weitere Trennung der sicherheitsrelevanten Funktionen zu erreichen, oftmals in der Datenbank, als „stored-procedure“ hinterlegt.

Auf jeden Fall erhöht man die Anzahl der zur Berechnung des ursprünglichen Passwortes notwendigen (unbekannten) Informationen und erhöht dadurch ja schon die bedingte Entropie des erzeugten Hash.

So in etwa könnte das Ganze formuliert werden:

hP = hash( p + hB + s )

Dabei entspricht „hP“ dem Ziel-Hash, „p“ dem Passwort, „hB“ dem Hash des Benutzernamens und „s“ der statischen Salt-Value.

Wichtig! „hB“ wird hier lediglich als Hash des Benutzernamens dargestellt, was natürlich nur beispielhaft gemeint ist. Hier liegt es an der Kreativität des Entwicklers, den Hash statt mit einem simplen MD5 ggf. mit einem kombinierten Verfahren zu erzeugen.

Ich würde mich diesmal sehr über Feedback oder Kritik in Form von Kommentaren freuen, das Thema ist sicherlich nicht nur für mich interessant.

Euer Benjamin Carl

4 Antworten zu “Salt’n’Pepper – Username als Pepper zum Salt”

  1. Markus sagt:

    Ich gehe ähnlich, wenn auch eigentlich ganz anders vor ;-) Ich nutze nicht den Username für den Salt, sondern einen eigenen Salt für jeden User, der ebenso einmalig ist. Wenn es einem Angreifer nämlich gelänge, den globalen Salt herauszufinden, hätte er es sehr viel leichter zusammen mit dem Username und einer Dictionary Attack die Passwörter zu finden.
    So muss er aber noch den User-Salt kennen.
    Also meine Hashfunktion sieht wie folgt aus: hash(passwort + user_salt + global_salt)

  2. Hallo Markus,

    interessant dass zu hören. Du verwendest also, wenn ich es richtig verstanden habe, einen proprietären Algorithmus um einen Username-spezifischen Salt zu generieren, den du dann in den Hash des Passwort einfließen lässt, richtig?

  3. Markus sagt:

    Mein User-Salt hat nichts mit dem Username zu tun. Es ist einfach ein neuer zufällig generierter String aus Zahlen und Groß-/Kleinbuchstaben.

  4. PHPGangsta sagt:

    @Markus: Und wo speicherst du diesen zufällig generierten String von jedem User? Wenn du ihn auch in die User-Tabelle speicherst bringt das keinen Mehrwert, wenn ein Angreifer an den Datenbankinhalt kommt hat er auch diesen String.

    Wenn man den Usernamen in den Passwort-Hash einbaut sollte man darauf achten dass der Username evtl. geändert werden kann, und dann muss man auch das Passwort neu berechnen. Eventuell ist es dann nützlich, die UserID zu nehmen, die ist auch eindeutig und ändert sich nicht, man muss also den Passwort-Hash nicht anpassen wenn der User seinen Usernamen ändert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

*