Wie hilft Passwortsalz gegen einen Regenbogen-Tisch-Angriff?
Ich habe einige Schwierigkeiten zu verstehen, den Zweck eines Salz zu einem Passwort. Es ist mein Verständnis, dass die primäre Nutzung zu erschweren, eine rainbow-table-Angriff. Aber die Methoden, die ich gesehen habe, um dies zu implementieren scheint nicht wirklich das problem schwieriger.
Ich habe gesehen, viele tutorials, die darauf hindeutet, dass das Salz verwendet werden, wie die folgenden:
$hash = md5($salt.$password)
Die überlegung ist, dass die hash-jetzt Karten nicht auf das original-Passwort, sondern eine Kombination aus dem Passwort und dem salt. Aber sagen $salt=foo
und $password=bar
und $hash=3858f62230ac3c915f300c664312c63f
. Nun jemand mit einem rainbow-table umkehren könnten den hash und kommen mit der Eingabe von "foobar". Sie könnte dann versuchen alle Kombinationen von Passwörtern (f, fo, foo, ... oobar, obar, bar, ar, ar). Möglicherweise dauert es ein paar Millisekunden, um das Passwort zu erhalten, aber sonst nicht viel.
Den anderen verwenden, die ich gesehen habe, ist auf meinem linux-system. In der /etc/shadow den Hash-Passwörter eigentlich gespeichert mit das Salz. Zum Beispiel, ein Salz von "foo" mit dem Passwort "bar" würde hash: $1$foo$te5SBM.7C25fFDu6bIRbX1
. Wenn ein hacker irgendwie in der Lage waren, um seine Hände auf diese Datei, ich sehe nicht, welchen Zweck das Salz dient, da die reverse hash te5SBM.7C25fFDu6bIRbX
bekannt ist, zu enthalten "foo".
Dank für jedes Licht, jeder kann Schuppen auf.
BEARBEITEN: vielen Dank für die Hilfe. Um zusammenzufassen, was ich verstehe, das Salz macht das gehashte Kennwort komplexer, so dass es viel weniger wahrscheinlich zu existieren in einer vorberechneten rainbow-table. Was habe ich falsch verstanden, bevor war, ich war der Annahme, eine rainbow-table gab es für ALLE hashes.
InformationsquelleAutor der Frage Rich | 2009-01-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer öffentlichen Salz wird nicht machen Wörterbuch-Attacken schwieriger, wenn Cracken eines einzelnen Passworts. Wie haben Sie darauf hingewiesen, dass der Angreifer hat Zugriff auf die gehashten Kennwort und der salt, so dass bei der Ausführung der dictionary-attack, Sie können einfach mit den bekannten Salz, wenn Sie versuchen, das Kennwort zu knacken.
Einer öffentlichen Salz macht zwei Dinge: macht es mehr Zeit in Anspruch knacken einer großen Liste von Passwörtern, und macht es unmöglich die Verwendung einer rainbow-table.
Zu verstehen, die erste, vorstellen, eine einzige Passwort-Datei, die enthält Hunderte von Benutzernamen und Passwörtern. Ohne Salz könnte ich berechnen "md5(Versuch[0])", und Scannen Sie dann über das Datei, um zu sehen, wenn das hash-zeigt sich überall. Wenn Salze vorhanden sind, dann habe ich auf " compute "md5(salt[ein] . Versuch[0])", vergleichen Sie gegen Einen Eintrag, dann "md5(salt[b] . Versuch[0])", vergleichen mit Eintrag B usw. Jetzt habe ich
n
mal so viel Arbeit zu tun ist, won
ist die Anzahl der Benutzernamen und Kennwörter in der Datei enthalten.Zu verstehen, die zweite, die Sie haben zu verstehen, was eine rainbow-Tabelle ist. Ein rainbow table ist eine große Liste vorberechneter hashes für Häufig verwendete Passwörter. Stellen Sie sich einmal die Passwort-Datei, ohne Salze. Alles, was ich zu tun ist, gehen durch jede Zeile der Datei, ziehen Sie das gehashte Passwort, und suchen Sie es in der Regenbogen-Tabelle. Ich habe nie zu berechnen, eine einzelne hash. Wenn der look-up ist deutlich schneller als die hash-Funktion (was es wahrscheinlich auch ist), dies wird erheblich beschleunigen knacken der Datei.
Aber wenn die Passwort-Datei wird gesalzen, dann ist die rainbow-Tabelle enthalten "Salz . Kennwort" pre-hashed. Wenn das Salz ist ausreichend zufällig, das ist sehr unwahrscheinlich. Wahrscheinlich werde ich Dinge wie "Hallo" und "foobar" und "qwerty" in meiner Liste der Häufig verwendeten, pre-Hash-Passwörter (die rainbow-Tabelle), aber ich werde mich nicht um Dinge wie "jX95psDZhello" oder "LPgB0sdgxfoobar" oder "dZVUABJtqwerty" pre-berechnet. Das würde der Regenbogen-Tabelle eine extrem große.
So, das Salz reduziert die Angreifer zurück zu einer Berechnung-pro-Zeile-pro-Versuch, die, wenn gepaart mit einem ausreichend lang, ausreichend zufälliges Passwort, ist (im Allgemeinen) unknackbar.
InformationsquelleAutor der Antwort Ross
Die anderen Antworten scheinen nicht, um Ihr Missverständnissen aus dem Thema, so hier geht:
Zwei verschiedenen Verwendungen von Salz
Du immer haben, speichern Sie das Salz mit dem Passwort, denn um zu überprüfen, was der Benutzer eingegeben gegen Ihre Passwort-Datenbank, Sie haben kombinieren Sie die Eingabe mit Salz, Hashen und vergleichen Sie es mit dem gespeicherten hash.
Sicherheit des hash -
Ist es nicht möglich umzukehren, hash als solche (in der Theorie zumindest). Der hash-Wert von "foo" und der hash-Wert von "saltfoo" haben nichts gemeinsam. Das ändern auch nur ein bit in der Eingabe einer kryptographischen hash-Funktion sollte komplett ändern Sie die Ausgabe.
Dies bedeutet, Sie können bauen ein Regenbogen-Tabelle mit den häufigsten Passwörtern und später dann "aktualisieren" Sie diese mit etwas Salz. Sie haben, um die salt-in-Konto von Anfang an.
Das ist der ganze Grund, warum Sie benötigen, um einen Regenbogen Tabelle auf dem ersten Platz. Weil Sie nicht auf das Passwort aus dem hash, die Sie vorausberechnen alle die hashes der am wahrscheinlichsten verwendeten Passwörter zu vergleichen und dann Ihre hashes mit Ihren hashes.
Qualität des Salzes
"foo" wäre ein extrem schlechte Wahl, Salz. Normalerweise würden Sie verwenden einen zufälligen Wert, kodiert in ASCII.
Auch, jedes Passwort hat Ihr eigenes Salz, verschiedene (hoffentlich) von allen anderen Salzen auf dem system. Dies bedeutet, dass die Angreifer angreifen jedes Passwort einzeln, anstatt der Hoffnung, dass eine des hashes mit einem der Werte in Ihrer Datenbank.
Der Angriff
Einer rainbow-table-Angriff immer muss
/etc/passwd
(oder was auch immer Passwort-Datenbank verwendet wird), oder sonst wie würden Sie vergleichen die hashes in der Regenbogen-Tabelle mit den hashes der aktuellen Passwörter?Als für den Zweck: nehmen wir an, der Angreifer will den Aufbau einer rainbow-Tabelle für 100.000 häufigsten verwendeten englischen Wörter und typische Passwörter (denke, "geheim"). Ohne Salz würde Sie precompute 100,000 hashes. Auch mit den traditionellen UNIX-Salz von 2 Charakteren (jeder ist einer von 64 Entscheidungen:
[a–zA–Z0–9./]
), hätte Sie zu berechnen und zu speichern 4,096,000,000 hashes... durchaus eine Verbesserung.InformationsquelleAutor der Antwort hop
Die Idee mit dem Salz ist es viel schwieriger, zu erraten, mit brute-force, als ein normaler Charakter-basierten Passwort. Rainbow-Tabellen sind oft gebaut mit einem speziellen Zeichensatz im Kopf, und nicht immer alle möglichen Kombinationen (obwohl Sie können).
So eine gute salt-Wert wäre eine zufällige 128-bit oder mehr integer. Dies ist, was macht rainbow-table-Angriffe fehlschlagen. Durch die Verwendung einer unterschiedlichen salt-Wert für jedes gespeicherte Kennwort, Sie sorgen auch dafür, dass rainbow-Tabelle gebaut für einen salt-Wert (wie der Fall sein könnte, wenn Sie ein populäres system, mit einem einzigen salt-Wert) nicht geben Ihnen Zugriff auf alle Passwörter auf einmal.
InformationsquelleAutor der Antwort Carl Seleborg
Noch eine große Frage, mit der viele sehr nachdenklich Antworten -- +1 SO!
Einen kleinen Punkt, den ich noch nicht gesehen, explizit erwähnt ist, dass durch das hinzufügen einer zufälligen salt für jedes Passwort, sind Sie praktisch garantiert, dass zwei Benutzer, die zufällig wählen Sie das gleiche Passwort erzeugen unterschiedliche hashes.
Warum ist das wichtig?
Vorstellen, dass die Kennwort-Datenbank bei einem großen software-Unternehmen in der Nordwest UNS. Angenommen, es enthält 30.000 Einträgen, von denen 500 das Kennwort bluescreen. Nehmen wir weiter an, dass ein hacker schafft es das Passwort erhalten, etwa durch Lesen in einem E-Mail von dem Benutzer an die IT-Abteilung. Wenn die Passwörter ungesalzen, die hacker finden den Hash-Wert in der Datenbank, dann einfach die Muster-match um den Zugriff auf die anderen 499 Konten.
Salzen der Passwörter gewährleistet, dass jede der 500 accounts hat eine eindeutige (salt+password), der Generierung eines Hashwertes für jeden von Ihnen, und damit verringert sich die Verletzung zu einem einzigen Konto. Und lasst uns hoffen, gegen alle Wahrscheinlichkeit, dass jeder Benutzer, der naiv genug, um zu schreiben, ein Klartext-Passwort in einer E-Mail-Nachricht nicht haben, Zugang zu den undokumentierten API für den nächsten OS.
InformationsquelleAutor der Antwort Adam Liss
War ich auf der Suche für eine gute Methode, Salze und fand diesen hervorragenden Artikel mit Beispiel-code:
http://crackstation.net/hashing-security.htm
Autor recomends mit zufälligen Salze pro Benutzer, so dass Zugang zu einem Salz nicht Rendern die gesamte Liste von hashes, wie leicht zu knacken.
InformationsquelleAutor der Antwort MytyMyky
Grunde ein Salz kann eine rainbow-table-Angriff fehlschlagen, ist, dass für n-bits von Salz, die rainbow-Tabelle hat 2^n mal größer als die Größe der Tabelle ohne Salz.
Ihrem Beispiel für die Verwendung von 'foo' als Salz machen könnte, der Regenbogen-Tabelle 16 Millionen mal größer.
Gegeben Carls Beispiel einer 128-bit-Salz, das macht die Tabelle 2^128 mal größeren - nun, das ist big - oder anders ausgedrückt, wie lange, bevor jemand tragbaren Speicher, der so groß?
InformationsquelleAutor der Antwort quamrana
Meisten Methoden des Einbruches hash-basierte Verschlüsselung zu verlassen, auf brute-force-Attacken. Eine rainbow-table-Angriff ist im wesentlichen eine effizientere Wörterbuch-Angriff, es ist entworfen, um die niedrigen Kosten der digitalen Speicherung zu ermöglichen Erstellung einer Karte, die eine wesentliche Teilmenge der möglichen Passwörter zu den hashes, und erleichtert das reverse-mapping. Diese Art von Angriff funktioniert, weil viele Passwörter neigen dazu, entweder ziemlich kurz oder verwenden Sie eine von ein paar Muster von Wort-basierte Formate.
Solche Angriffe sind unwirksam in dem Fall, wo Passwörter enthalten viele weitere Zeichen und entspricht nicht der gängigen word-Formaten. Ein Benutzer mit einem starken Passwort, mit zu beginnen, werden nicht anfällig für diese Art von Angriff. Leider, viele Menschen nicht wählen Sie gute Passwörter. Aber es ist ein Kompromiss, Sie können verbessern das Kennwort eines Benutzers durch hinzufügen von zufälligen junk. So jetzt, anstelle von "hunter2" Ihr Passwort konnte wirksam "hunter2908!fld2R75{R7/;508PEzoz^U430", die ein viel stärkeres Kennwort. Allerdings, da haben Sie jetzt zum speichern dieser zusätzlichen Komponente " Kennwort dies verringert die Wirksamkeit des starken composite-Passwort. Wie es sich herausstellt, es ist immer noch ein Netto-Vorteil einer solchen Regelung, da jetzt jedes Passwort, auch die schwachen, sind nicht mehr anfällig für die gleichen vorberechneter hash /rainbow-table. Stattdessen, jede Kennwort-hash-Eintrag ist anfällig, nur, um einen eindeutigen hash-Tabelle.
Sagen, Sie haben eine Website, die schwachen Anforderungen an die Passwortsicherheit. Wenn Sie kein Kennwort verwenden Salz auf alle Eure hashes sind anfällig für vorberechnete hash-Tabellen, jemand mit Zugriff auf Ihre hashes würde haben damit Zugriff auf die Kennwörter für einen großen Prozentsatz der Benutzer (wie viele, verwendet verwundbar Passwörter, das wäre ein erheblicher Prozentsatz). Wenn Sie eine Konstante verwenden Kennwort Salz vorberechnete hash-Tabellen sind nicht mehr sinnvoll, so jemanden hätte verbringen Sie die Zeit zur Berechnung einer benutzerdefinierten hash-Tabelle für das Salz, Sie könnte tun schrittweise obwohl, Computer-Tabellen, die decken, immer größere Permutationen des Problems Raum. Die schwächsten Passwörter (z.B. einfache Wort-basierte Passwörter, sehr kurze alphanumerische Passwörter) würde geknackt werden, in Stunden oder Tagen, weniger verwundbar Passwörter geknackt werden nach ein paar Wochen oder Monate. Wie die Zeit vergeht ein Angreifer Zugriff auf Passwörter für eine stetig wachsende Prozentsatz der Anwender. Wenn Sie mit einem einzigartigen salt für jedes Passwort dann würde es Tage oder Monate, um Zugriff auf jedem dieser schwächsten Passwörter.
Wie Sie sehen können, wenn Sie Schritt aus kein Salz auf ein konstantes Salz zu einem einzigartigen Salz verhängen Sie eine um mehrere Größenordnungen erhöhen, Aufwand zu knacken verwundbar Passwörter bei jedem Schritt. Ohne Salz ist der schwächste, der Ihren Benutzern die Passwörter sind trivial zugänglich, mit einer Konstanten Salz-solche schwachen Passwörter sind zugänglich, um einen entschlossenen Angreifer, mit einer einzigartigen Salz-die Kosten für den Zugriff auf Passwörter ist angehoben, so hoch, dass nur die entschlossensten Angreifer Zugang zu einer kleinen Teilmenge der gefährdeten Passwörter, und dann nur mit großem Aufwand.
Das ist genau die situation zu sein in. Sie können nie vollständig schützen Sie Benutzer aus Armen Kennwort Wahl, aber Sie erhöhen die Kosten für die Kompromittierung Ihrer Passwörter der user auf ein Niveau, das macht Kompromisse auch nur ein Benutzer-Passwort zu teuer.
InformationsquelleAutor der Antwort Wedge
Einen Zweck Salzen besiegen, die vorberechneten hash-Tabellen. Wenn jemand eine Liste von Millionen von vorberechneter hashes, Sie sind nicht in der Lage sein zu sehen bis $1$foo$te5SBM.7C25fFDu6bIRbX1 in Ihrer Tabelle, obwohl Sie wissen, dass die hash-und salt. Sie müssen noch die brute-force.
Einem anderen Zweck, wie Carl S erwähnt, ist brute Force eine Liste von hashes teurer. (geben Sie alle verschiedenen Salzen)
Diese beiden Ziele noch immer erreicht, auch wenn die Salze sind öffentlich.
InformationsquelleAutor der Antwort recursive
Soweit ich weiß, wird das Salz soll, um Wörterbuch-Attacken härter.
Es ist eine bekannte Tatsache, dass viele Menschen nutzen Sie gemeinsame Worte für Passwörter anstelle von scheinbar zufälligen Zeichenfolgen.
So, ein hacker verwenden könnte, diese zu seinem Vorteil nutzen, anstatt einfach mit brute-force. Er wird nicht für Passwörter, wie z.B. aaa, aab, aac..., stattdessen benutzen Sie Worte und gängige Passwörter (wie Herr der Ringe Namen! 😉 )
Also wenn mein Passwort ist Legolas ein hacker könnte versuchen, und denke, es mit ein "paar" versucht. Aber wenn wir das Salz, das Kennwort und es wird fooLegolas der hash ist anders, so dass die Wörterbuch-Angriff wird nicht erfolgreich sein.
Hoffe, das hilft!
InformationsquelleAutor der Antwort rgargente
Ich gehe davon aus, dass du mit PHP --- md5 () - Funktion, und $ vorangestellt Variablen --- dann können Sie versuchen, dieser Artikel Shadow Password HOWTO Speziell der 11-Absatz.
Auch, Sie haben Angst, mit message-digest-algorithmen, können Sie versuchen, echten cipher-algorithmen, wie z.B. den aus dem mcrypt Modul, oder stärker message-digest-algorithmen wie jene, die mhash Modul (sha1, sha256 und andere).
Ich denke, dass die Stärkung der message-digest-Algorithmus sind ein muss. Es ist bekannt, dass MD5 und SHA1 sind mit Kollision Probleme.
InformationsquelleAutor der Antwort daniel