it-swarm.com.de

Verwenden Sie zwei Salze für die Benutzerauthentifizierung?

Wenn Sie Benutzeranmeldeinformationen in einer Datenbank speichern, wissen wir alle, dass das Hashing des Kennworts das absolute Minimum ist, das Sie tun sollten. Es ist jedoch besser, es vor dem Hashing zu salzen. Das Salz sollte zufällig generiert werden, lang genug und für jeden Benutzer eindeutig sein.

Ich erinnere mich, irgendwo einen Artikel über zwei Salze gelesen zu haben (aber ich erinnere mich nicht, wo) (sowohl lang genug als auch zufällig generiert):

  1. Ein globales Salz
  2. Ein Salz pro Eintrag

Der resultierende Hash wäre: hash(globalSalt + password + uniqueSalt) (die Reihenfolge der Verkettung ist nicht wirklich wichtig).

Gibt es einen Grund, warum dies sicherer ist, als nur ein einziges Salz pro Eintrag zu haben? Wir nehmen an, dass der Angreifer Zugriff auf die Codedateien hat, in denen das globale Salt gespeichert ist.

6
Wookai

Ich habe eine Antwort geschrieben, dann etwas mehr gelesen und meine Antwort im Wesentlichen bearbeitet. Diese Frage wurde bereits bei Stack Overflow diskutiert. Das akzeptierte Antwort auf diese Frage ist ein guter Ausgangspunkt, folgen Sie den Links.

Ich nehme an, dass:

Das statische Salz (das Sie global nennen) ist etwas wertvoll, weil:

  • Es ist einfach zu implementieren und erfordert keine Datenbanksuche zur Laufzeit, d. H. Es ist einfach zu skalieren.
  • Dieses Salt ist statisch und kann als globale Konstante im Anwendungscode gespeichert oder aus einer INI -Datei gelesen werden. Auf diese Weise wird der Zugriff auf die Datenbank (z. B. SQL-Injection-Angriff) nicht unbedingt sichtbar.

Das Salz pro Passwort ist wichtig, weil:

  • Es ist eine zufällige Zeichenfolge, die für jedes Kennwort eindeutig ist, auf der Serverseite generiert und in der Datenbank im Klartext gespeichert wird. Bei N Kennwörtern ergibt dies effektiv den gesamten Suchraum für eine Rainbow-Tabelle N x N anhängen. Dies kann von vorberechneten Rainbow-Tabellen heute aufgrund der schieren Größe des Datensatzes nicht effektiv angegriffen werden.

Ein weiterer nützlicher Tipp, den ich aus den Diskussionen zum Stapelüberlauf gelernt habe, ist das Verschlüsseln des Benutzernamens , sofern dies möglich ist. Daran habe ich eigentlich nicht gedacht, aber in bestimmten Szenarien macht es natürlich Sinn.

BEARBEITEN: Bitte lesen Sie den ausgezeichneten Artikel "Genug mit den Rainbow-Tabellen: Was Sie über sichere Passwortschemata wissen müssen" . Das meiste, was über das Hashing von Passwörtern gesagt wird, ist falsch, einschließlich des gesamten 'MD5/SHA256 mit Salt'-Ansatzes, der so oft verwendet wird.

8

Bei StackOverflow wurde schon so ziemlich alles gefragt: Double Salt für das Hashing von Passwörtern?

4
John Conde

Ich habe diese Frage gerade gelesen und sie erinnerte mich an eine Frage, die ich vor ungefähr einem Jahr auf SO gepostet habe: Umfassende Informationen zu Haschsalzen . Möglicherweise möchten Sie die Fragen und Antworten durchlesen, da sie einige andere Informationen enthalten, die für alle sehr nützlich sein können, die mehr über Hashes erfahren möchten.

Ich sollte auch beachten, dass die Implementierung der Benutzerauthentifizierung im Allgemeinen nichts ist, was Sie wirklich alleine angehen möchten, wenn Sie dies vermeiden können. Denken Sie immer daran, das Rad nicht neu zu erfinden, es sei denn, Sie möchten mehr über Räder erfahren .

1
evolve