Wenn Sie einem Hash-Wert Salt-Werte für ein Passwort hinzufügen, das nicht im Klartext gespeichert werden kann, von welchem Ort kommen die Salt-Werte am besten? Nehmen wir für den Kontext an, dass dies für Kennwörter bei einer Webseitenanmeldung gilt.
12
Antworten:
Normalerweise habe ich eine Spalte
created TIMESTAMP
in einer Benutzertabelle, damit ich sehen kann, wann sich der Benutzer registriert hat. Ich möchte keine zusätzliche Spalte für Salt hinzufügen, daher verwende ich die Timestamp-Spalte als Salt:quelle
Ist das wichtig?
Das Salz dient zwei Zwecken. Es macht es unpraktisch, große Tabellen mit vorgefertigten Passwörtern ("Regenbogentabellen") zu verwenden, und es lässt identische Passwörter in der Liste der Hashes unterschiedlich aussehen. Indem Sie die identischen Passwörter unterschiedlich aussehen lassen, vermeiden Sie ein Problem, bei dem mehrere Personen ein bestimmtes Passwort verwenden, das vermutlich ein allgemeines schwaches ist.
Daher sollte jedes Konto über ein eigenes Salz verfügen, und die Salze sollten nicht übermäßig vorhersehbar sein, da es wahrscheinlich keine Gruppe von Salzen gibt, die auftreten werden. (Wenn viele Sites bei 1 anfingen und hochgezählt wurden, könnten Bösewichte beispielsweise Regenbogentabellen mit einer geringen Anzahl von Salzen erstellen.) Sie müssen in keiner Weise zufällig sein, außer im Allgemeinen unvorhersehbar. Sie sind nicht geheimer als der Hash selbst, daher müssen sie nicht unbedingt unermesslich sein.
Verwenden Sie eine beliebige Methode, um ein Salz zu erzeugen. Wenn es im Vergleich zur Anzahl der Accounts viele potenzielle Salt-Werte gibt (frühe Unix-Systeme verwendeten häufig zwei Bytes für eine mögliche Anzahl von 65536), würde eine halbzufällige Zuweisung fast nie ein doppeltes Salt ausgeben.
quelle
Jedes Mal, wenn Sie ein neues Passwort speichern möchten (Registrierung, Passwort-Reset, Passwort-Update), ist eine gute Technik:
for i in (0...65536) { password = hmac(password) }
quelle
Nutzen Sie das Framework. In .NET können Sie den RNGCryptoServoiceProvider verwenden ...
Andere Frameworks sollten ähnliche Klassen haben, die Sie nutzen können. Um Zufälligkeit zu erreichen, setzt Software oftmals den Benutzer gegenüber den
Random
oben genannten ein. Die zufällige Bewegung einer Maus in einem definierten Bereich, um Salz bereitzustellen, ist eine Option, die von TrueCrypt verwendet wird. Es kommt auf Ihre spezifischen Bedürfnisse und Ihr Sicherheitsniveau an. da könnte dein salz einfach sein!@#$%
.quelle
Sie generieren serverseitig ein Salt und weisen es bei seiner Erstellung einem Benutzerkonto zu. Verwenden Sie besser eine Krypto-Generierungs-API, die mit Ihrem Framework verfügbar ist, aber im Prinzip ist jede Sequenz ausreichend.
Normalerweise werden Dinge wie folgt gespeichert:
Beispiel:
PasswordHashWithSalt =
A15CD9652D4F4A3FB61A2A422AEAFDF0DEA4E703 j5d58k4b56s8744q
quelle
Verwenden Sie bcrypt und lesen Sie diesen Artikel, da normale Hashes in der heutigen Zeit keinen ernsthaften Schutz bieten.
Erwägen Sie die Verwendung des SDR Zero Knowledge Password-Protokolls, das zahlreiche Open Source-Bibliotheken enthält und patentfrei ist.
SDR erfordert Salz und der beste Ort dafür ist der Kunde. Zeit ihre Tastenanschläge, Mausbewegungen, Hash ihre Umgebungsvariablen, Zufallszahlen, Dateierstellungszeiten in ihrem temporären Ordner, um am Ende auf unvorhersehbare Weise Salz von Ihrem Server zu machen. SDR nimmt das Salt, eine große Primzahl, das Benutzerpasswort und generiert einen Verifiziererschlüssel. Sie speichern kein Passwort, es verlässt nie den Computer, aber Sie können überprüfen, ob das Passwort für den Überprüfungsschlüssel und das Salt gültig ist. Es ist immun gegen Man in the Middle- und Dictionary-Angriffe. Verschlüsseln Sie die Schlüssel und Salt in der Datenbankspalte, um sicherzugehen.
quelle