2009-12-10 9 views
9

Ok, ich versuche den Grund zu verstehen, Salz zu verwenden.Was ist der Zweck des "Salzes" beim Hashing?

Wenn sich ein Benutzer anmeldet, erzeuge ich ein eindeutiges Salz für ihn/sie, das ich in DB speichere. Dann hasse ich es und das Passwort mit SHA1. Und wenn er/sie sich anmeldet, hasse ich ihn erneut mit sha1($salt.$password).

Aber wenn jemand meine Datenbank hackt, kann er das Hash-Passwort UND das Salz sehen.

Ist das schwieriger zu knacken als nur das Passwort ohne Salz zu hashen? Ich verstehe nicht ...

Sorry, wenn ich dumm bin ...

+0

Denken Sie nur daran: Da jeder Benutzer ein anderes Salz hat, ist die Kombination von Salz + Passwort einzigartig, auch wenn das Passwort nicht ist. – Gumbo

+0

Salz macht Ihren Hash-Geschmack viel besser, deshalb. –

+0

siehe http://stackoverflow.com/search?q=salt – VolkerK

Antwort

8

Wenn Sie ein Salz nicht verwenden, dann kann ein Angreifer ein Passwort precompute < -> Hash-Datenbank offline, noch bevor sie gebrochen haben in Ihrem Server. Durch das Hinzufügen eines Salzes wird die Größe dieser Datenbank massiv erhöht, was die Durchführung eines solchen Angriffs erschwert.

Wenn sie einmal eingebrochen sind, können sie ein häufig verwendetes Passwort erraten, es hashen und dann alle Passwörter in der Datenbank auf Übereinstimmung überprüfen. Mit einem anderen Salz für jeden Benutzer können sie nur jeweils ein Passwort angreifen.

Es gibt einen Artikel bei Wikipedia über salts in cryptography.

+0

Es macht besonders Spaß, wenn Sie ständig Salz und hash mehrere Male. Natürlich ist es für den Benutzer langsamer, sich anzumelden, aber es ist nicht machbar, das Salz zu kennen, um das Passwort zu erzwingen. – StrixVaria

+0

@StrixVaria: Wie würde das erneute Verketten des Salzes und das Re-Hashing anders sein, als einfach das Salz mehrmals zu verketten? Ich glaube nicht, dass dies Ihnen zusätzliche Sicherheit bieten würde. –

+0

Nur wegen der zusätzlichen Zeit, die es für jeden "rate" im Brute-Force-Versuch dauern würde. Wenn Sie x mal hashen, dauert es x mal länger pro Schätzung. Wenn x groß wird, nimmt die Anzahl der möglichen Versuche ab. – StrixVaria

1

Eine andere Absicht hinter der Verwendung eines Salzes besteht darin, sicherzustellen, dass zwei Benutzer mit demselben Kennwort nicht denselben Hash in der Benutzertabelle haben (vorausgesetzt, ihr Salz ist nicht das gleiche). Die Kombination aus einem Salz und einem Passwort kann jedoch am Ende zu demselben "String" oder Hash führen und der Hash wird genau gleich sein. Stellen Sie also sicher, dass Sie eine Kombination aus Salz und Passwort verwenden, wo zwei verschiedene Kombinationen nicht funktionieren zu demselben Hash führen.

1

Wenn ein Angreifer einen giant table of hash values for plaintext passwords erstellt, verhindert die Verwendung eines Saltes, dass er dieselbe Tabelle verwendet, um mehr als ein Kennwort zu knacken. Der Angreifer müsste für jedes Salz eine separate Tabelle erstellen. Beachten Sie, dass Ihr Salz ziemlich lang sein sollte, damit es tatsächlich funktioniert. Andernfalls enthält die vorberechnete Tabelle des Angreifers wahrscheinlich immer den Hashwert "salts +".

Verwandte Themen