Frage

Bei der Arbeit haben wir zwei konkurrierenden Theorien für Salze. Die Produkte Ich arbeite bei der Verwendung so etwas wie ein Benutzername oder Telefonnummer an Salz der Hash. Im Grunde etwas, das für jeden Benutzer unterschiedlich ist, ist aber leicht zu uns zur Verfügung. Das andere Produkt zufällig generiert ein Salz für jeden Benutzer und ändert sich jedes Mal, wenn der Benutzer das Kennwort ändert. Das Salz wird dann in der Datenbank verschlüsselt.

Meine Frage ist, wenn der zweite Ansatz ist wirklich notwendig? Ich kann von einer rein theoretischen Perspektive verstehen, dass es sicherer ist als der erste Ansatz ist, aber was ist aus einer Praktikabilität Sicht. Gerade jetzt einen Benutzer zu authentifizieren, muss das Salz sein, unverschlüsselt und auf die Anmeldeinformationen angewandt.

Nachdem darüber nachzudenken, ich sehe nur keinen echten Sicherheitsgewinn aus diesem Ansatz. Ändern das Salz von Konto zu Konto, ist es immer noch sehr schwierig für jemanden, den Hash-Algorithmus zu Brute zu versuchen zu erzwingen, selbst wenn der Angreifer war bewusst, wie schnell feststellen, was es für jedes Konto war. Das wird unter der Annahme, dass die Passwörter ausreichend stark sind. (Offensichtlich die richtige Hash-Suche für eine Reihe von Passwörtern, wo sie sind alle zwei Ziffern ist wesentlich einfacher als die richtige Hash-Passwörter zu finden, die 8 Ziffern). Bin ich in meiner Logik falsch, oder ist es etwas, das ich fehle?

EDIT: Okay, also hier ist der Grund, warum ich denke, es ist wirklich strittig um das Salz zu verschlüsseln. (Lemme wissen, ob ich auf dem richtigen Weg bin).

Für die folgende Erklärung gehen wir davon aus, dass die Passwörter sind immer 8 Zeichen und das Salz 5 und alle Passwörter bestehen aus Kleinbuchstaben (es macht die Mathematik leichter).

für jeden Eintrag ein anderes Salz bedeutet, dass ich nicht die gleiche Rainbow-Tabelle verwenden können (eigentlich technisch konnte ich, wenn ich eine ausreichende Größe hatte, aber lassen wir das im Moment ignorieren). Das ist der eigentliche Schlüssel zum Salz aus dem, was ich verstehe, weil jedes Konto zu knacken ich das Rad neu zu erfinden, habe so für jeden zu sprechen. Nun, wenn ich weiß, wie das richtige Salz zu einem Passwort anzuwenden, um den Hash zu erzeugen, würde ich es tun, weil ein Salz wirklich erstreckt sie nur die Länge / Komplexität der gehasht Phrase. So würde ich die Anzahl der möglichen Kombinationen Schneiden werde wir brauchen würden, zu erzeugen, zu „wissen“ Ich habe das Passwort + Salz von 13 ^ 26-8 ^ 26, weil ich weiß, was das Salz. Nun, da macht es einfacher, aber immer noch sehr hart.

So auf das Salz zu verschlüsseln. Wenn ich das Salz kenne verschlüsselt ist, würde ich nicht versuchen und entschlüsseln (vorausgesetzt, ich weiß, dass es ein ausreichendes Maß an Verschlüsselung hat) es zuerst. Ich würde es ignorieren. Anstatt zu versuchen, herauszufinden, wie es zu entschlüsseln, zu dem vorherigen Beispiel zurück würde ich nur eine größere Regenbogen-Tabelle alle Schlüssel für die 13 ^ 26 enthält, erzeugen. Nicht zu wissen, das Salz würde mich auf jeden Fall verlangsamen, aber ich glaube nicht, dass die monumentale Aufgabe zu versuchen, hinzufügen würde zuerst das Salz Verschlüsselung zu knacken. Deshalb glaube ich nicht, es lohnt sich. Gedanken?

Hier ist ein Link zu beschreiben, wie lange Passwörter unter einem Brute-Force-Angriff halten werden: http://www.lockdown.co.uk/?pg=combi

War es hilfreich?

Lösung

Die Antwort ist, sich zu fragen, was Sie wirklich versuchen, von zu schützen? Wenn jemand Zugriff auf Ihre Datenbank hat, dann haben sie Zugriff auf die verschlüsselten Salze, und sie haben wahrscheinlich den Zugriff auf den Code als auch. Mit allem, was könnten sie die verschlüsselten Salze? Wenn ja, dann ist die Verschlüsselung ziemlich nutzlos sowieso. Das Salz ist wirklich da, es zu machen, so dass es nicht möglich ist, eine Regenbogen-Tabelle zu bilden, Ihre gesamte Passwort-Datenbank in einem Rutsch zu knacken, wenn es aufgebrochen wird. Von diesem Standpunkt aus betrachtet, solange jedes Salz ist einzigartig gibt es keinen Unterschied, wäre ein Brute-Force-Angriff mit Salzen oder den verschlüsselten Salz für jedes Passwort einzeln erforderlich.

Andere Tipps

Verstecken eines Salzes nicht notwendig ist.

Ein anderes Salz sollte für jeden Hash verwendet werden. In der Praxis ist dies einfach, indem man 8 oder mehr Bytes aus kryptographischer Qualität Zufallszahlengenerator zu erreichen.

Aus vorherige Antwort von mir :

  

Salz hilft vorausberechnete Wörterbuchangriffe zu vereiteln.

     

Angenommen ein Angreifer eine Liste möglicher Passwörter hat. Er kann jede Hash   und vergleichen Sie es mit dem Hash seines Opfers Passwort, und sehen, ob es   Streichhölzer. Wenn die Liste groß ist, könnte dies eine lange Zeit in Anspruch nehmen. Er tut nicht   verbringen mag, dass viel Zeit auf seinem nächsten Ziel, so dass er zeichnet das Ergebnis   in einem „Wörterbuch“, wobei ein Hash-Punkte ihren entsprechenden Eingang. Wenn   Die folgende Liste von Passwörtern ist sehr, sehr lange, kann er Techniken wie ein verwenden   Rainbow Table, um etwas Platz zu sparen.

     

Sie jedoch an sein nächstes Ziel sein Passwort gesalzen. Auch wenn die   Angreifer weiß, was das Salz, seine vorberechneten Tabelle ist   wertlos das Salz ändert den Hash von jedem Passwort führt. Er   muss alle Kennwörter in seiner Liste wieder Hash, das Ziel der Anbringung   Salz mit dem Eingang. Jedes andere Salz erfordert eine andere   Wörterbuch, und wenn genügend Salze verwendet werden, wird der Angreifer keinen Platz haben   zu speichern Wörterbücher für sie alle. Handel Raum, Zeit zu sparen ist kein   Option mehr; Der Angreifer muss Hashing jedes Kennwort zurückgreifen   in seiner Liste für jedes Ziel er angreifen will.

     

Also, es ist nicht notwendig, das Salz geheim zu halten. Sicherstellen, dass die   Angreifer nicht über ein vorausberechneten Wörterbuch, das dem entspricht   insbesondere Salz ist ausreichend.


über diese ein bisschen mehr Nach einigem Nachdenken, ich habe erkannt, dass sich täuschen in das Salz denken kann versteckt werden gefährlich. Es ist viel besser das Salz davon ausgeht, kann nicht verborgen bleiben, und gestalten Sie das System trotz dass sicher zu sein. Ich biete eine ausführlichere Erklärung in einem anderen Antwort.

Mein Verständnis von „Salz“ ist, dass es erschwert Rissbildung, aber es versucht nicht, die zusätzlichen Daten zu verstecken. Wenn Sie versuchen, mehr Sicherheit zu erhalten, indem das Salz „Geheimnis“ zu machen, dann nur Sie wirklich wollen, mehr Bits in dem Verschlüsselungsschlüssel.

Der zweite Ansatz ist nur etwas sicherer. Salze schützen Benutzer vor Wörterbuchangriffen und Rainbow-Table-Attacken. Sie machen es schwieriger für einen ambitionierten Angreifer das gesamte System zu gefährden, sind aber immer noch anfällig für Angriffe, die auf einen Benutzer des Systems ausgerichtet sind. Wenn Sie Informationen verwenden, die öffentlich zugänglich, wie eine Telefonnummer ist, und der Angreifer wird sich dessen bewusst , dann haben Sie sie einen Schritt in ihrem Angriff gespeichert. Natürlich ist die Frage strittig, ob der Angreifer Ihre gesamte Datenbank bekommt, Salze und alle.

EDIT: Nach dem Re-Lektüre über diese Antwort und einige der Kommentare, fällt mir ein, dass einige der Verwirrung auf die Tatsache zurückzuführen sein, dass ich nur die zwei sehr spezifische Vergleich Fälle in der Frage vorgelegt: random Salz im Vergleich zu nicht-zufälligem Salz. Die Frage nach der einer Telefonnummer als Salz mit ist strittig, ob der Angreifer Ihre gesamte Datenbank bekommt, nicht die Frage ein Salz überhaupt verwendet wird.

Ein verstecktes Salz ist nicht mehr Salz. Es ist Pfeffer. Es hat seine Verwendung. Es unterscheidet sich von Salz.

Pepper ist ein geheimer Schlüssel, um das Passwort + Salz hinzugefügt, die den Hash in einen HMAC (Hash-basierten Message Authentication Code) macht. Ein Hacker mit Zugriff auf das Hash-Ausgangssignal und das Salz kann theoretisch brute force erraten einen Eingangs, der den Hash generieren (und daher die Validierung in der Passwort Textbox passieren). Durch die Zugabe von Pfeffer Sie das Problem Raum in einer kryptografisch zufälligen Art und Weise erhöhen, wodurch das Problem unlösbar ohne ernsthafte Hardware.

Für weitere Informationen über Pfeffer, überprüfen hier .

Siehe auch hmac .

Hier ist ein einfaches Beispiel zeigt, warum es schlecht ist für jeden Hash das gleiche Salz haben

Betrachten Sie die folgende Tabelle

UserId  UserName,   Password
     1  Fred       Hash1 =  Sha(Salt1+Password1)    
     2  Ted        Hash2 =  Sha(Salt2+Password2)    

Fall 1, wenn Salz 1 ist die gleiche wie salt2 Wenn Hash2 mit Hash1 ersetzt wird dann 2 Benutzer mit Benutzer 1 Passwort anmelden könnten

Fall 2, wenn Salz 1 nicht die gleichen salt2 Wenn Hash2 mit Hash1 ersetzt wird, dann kann benutzer2 nicht mit den Benutzern 1 Passwort anmelden.

  

... so etwas wie einen Benutzernamen oder die Telefonnummer der Hash-Salz. ...

     

Meine Frage ist, wenn der zweite Ansatz ist wirklich notwendig? Ich kann von einer rein theoretischen Perspektive verstehen, dass es sicherer ist als der erste Ansatz ist, aber was ist aus einer Praktikabilität Sicht?

Aus praktischer Sicht ein Salz ist eine Implementierung Detail. Wenn Sie jemals, wie die Benutzerinformationen ändern gesammelt oder gepflegt - und beide Benutzernamen und Telefonnummern ändern sich manchmal, Ihre genaue Beispiele verwenden - dann können Sie Ihre Sicherheit gefährdet haben. Haben Sie eine solche nach außen gerichtete Veränderung viel tiefer Sicherheitsbedenken haben?

Hat Stoppen die Anforderung, dass jedes Konto eine Telefonnummer haben muß eine vollständige Sicherheitsüberprüfung einzubeziehen, um sicherzustellen, Sie haben diese Konten zu einem Sicherheits Kompromiss nicht geöffnet?

Es gibt zwei Techniken, mit unterschiedlichen Zielen:

  • Das „Salz“ verwendet wird, um zwei ansonsten gleich Passwörter verschlüsseln anders zu machen. Auf diese Weise kann ein Eindringling nicht effizient ein Wörterbuch-Angriff gegen eine ganze Liste von verschlüsselten Passwörter verwenden.

  • Das (gemeinsam) „Geheimnis“ wird hinzugefügt, bevor eine Nachricht Hashing, so dass ein Eindringling nicht seine eigenen Nachrichten erstellen und sie akzeptiert.

Ich neige dazu, um das Salz zu verstecken. Ich benutze 10 Bits von Salz durch eine zufällige Zahl von 1 bis 1024 bis zu Beginn des Passwortes vorangestellt wird, bevor es Hashing. Wenn das Passwort eingegeben Vergleich der Benutzer mit dem Hash, I Schleife 1-1024 und jeden möglichen Wert von Salz versuchen, bis ich das Spiel finden. Dieser Vorgang dauert weniger als 1/10 Sekunde. Ich habe die Idee es auf diese Weise aus dem PHP password_hash und password_verify . In meinem Beispiel ist die „Kosten“ 10 für 10-Bit-Salz. Oder von dem, was ein anderer Benutzer sagte, versteckt „Salz“ wird „Pfeffer“ bezeichnet. Das Salz wird in der Datenbank nicht verschlüsselt. Es ist Brute gezwungen. Es wäre die Rainbow-Tabelle notwendig machen, die Hash-1000-mal größer zu umkehren. Ich benutze sha256 weil es schnell ist, aber immer noch als sicher.

Wirklich, es hängt davon ab, aus welcher Art von Angriff Sie versuchen, Ihre Daten zu schützen.

Der Zweck eines einzigartigen Salz für jedes Passwort ist ein Wörterbuch-Angriff gegen die gesamte Passwort-Datenbank zu verhindern.

die einzigartige Salz Encrypting für jedes Passwort würde es schwieriger machen, ein individuelles Passwort zu knacken, ja, aber man muss abwägen, ob es wirklich viel von einem Vorteil ist. Wenn der Angreifer, mit brutalen Gewalt, stellt fest, dass diese Zeichenfolge:

Marianne2ae85fb5d

Hashes auf einen Hash in der DB gespeichert ist, ist es wirklich so schwer, herauszufinden, was der Teil der Pass ist und welcher Teil ist das Salz?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top