Bei der Arbeit haben wir zwei konkurrierende Theorien für Salze. Die Produkte, an denen ich arbeite, verwenden einen Benutzernamen oder eine Telefonnummer, um den Hashwert zu salzen. Im Wesentlichen etwas, das für jeden Benutzer anders ist, aber für uns leicht verfügbar ist. Das andere Produkt generiert nach dem Zufallsprinzip für jeden Benutzer ein Salz und ändert es jedes Mal, wenn der Benutzer das Kennwort ändert. Das Salz wird dann in der Datenbank verschlüsselt.Die Notwendigkeit, das Salz für einen Hash zu verstecken
Meine Frage ist, ob der zweite Ansatz wirklich notwendig ist? Ich kann aus einer rein theoretischen Perspektive verstehen, dass es sicherer ist als der erste Ansatz, aber was ist aus praktischer Sicht. Um jetzt einen Benutzer zu authentifizieren, muss das Salz unverschlüsselt und auf die Anmeldeinformationen angewendet werden.
Nachdem ich darüber nachgedacht habe, sehe ich keinen wirklichen Sicherheitsgewinn von diesem Ansatz. Das Ändern des Salt von Konto zu Konto macht es immer noch extrem schwierig für jemanden, den Hashalgorithmus brutal zu erzwingen, auch wenn der Angreifer wusste, wie schnell er für jedes Konto ermitteln konnte. Dies geht davon aus, dass die Passwörter ausreichend stark sind. (Offensichtlich ist das Finden des korrekten Hash für eine Gruppe von Passwörtern, wo sie alle zwei Ziffern sind, wesentlich einfacher als das Finden des korrekten Hashs von Passwörtern, die 8 Ziffern sind). Bin ich falsch in meiner Logik oder gibt es etwas, das ich vermisse?
EDIT: Okay, also hier ist der Grund, warum ich denke, es ist wirklich strittig, das Salz zu verschlüsseln. (Ich weiß, ob ich auf dem richtigen Weg bin).
Für die folgende Erklärung gehen wir davon aus, dass die Passwörter immer 8 Zeichen lang sind und das Salt 5 ist und alle Passwörter aus Kleinbuchstaben bestehen (das erleichtert die Mathematik einfach).
Mit einem anderen Salz für jeden Eintrag bedeutet, dass ich nicht die gleiche Rainbow-Tabelle verwenden kann (eigentlich könnte ich technisch, wenn ich eine ausreichende Größe hätte, aber ignorieren wir das im Moment). Dies ist der wahre Schlüssel zum Salz von dem, was ich verstehe, denn um jeden Bericht zu knacken, muss ich das Rad sozusagen für jeden neu erfinden. Wenn ich nun weiß, wie man das richtige Salz auf ein Passwort anwendet, um den Hash zu erzeugen, würde ich es tun, weil ein Salz wirklich nur die Länge/Komplexität der Hash-Phrase verlängert. Also würde ich die Anzahl der möglichen Kombinationen reduzieren, die ich erzeugen müsste, um "wissen" zu können, dass ich das Passwort + Salz von 13^26 bis 8^26 habe, weil ich weiß, was das Salz ist. Nun, das macht es einfacher, aber immer noch sehr schwer.
Also auf die Verschlüsselung des Salzes. Wenn ich weiß, dass das Salz verschlüsselt ist, würde ich es zuerst nicht versuchen und entschlüsseln (vorausgesetzt, ich weiß, dass es ein ausreichendes Maß an Verschlüsselung hat). Ich würde es ignorieren. Anstatt zu versuchen, herauszufinden, wie man es entschlüsseln kann, gehe ich zum vorherigen Beispiel zurück und erzeuge einfach eine größere Rainbow-Tabelle, die alle Schlüssel für das 13^26 enthält. Das Salz nicht zu kennen würde mich definitiv bremsen, aber ich denke nicht, dass es die monumentale Aufgabe, die Salzverschlüsselung zuerst zu knacken, hinzufügen würde. Deshalb denke ich nicht, dass es das wert ist. 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
Gute Frage, Kevin, sehr aktuell. Ich kann nichts zur Sicherheit sagen, aber es gibt einen Performance-Erfolg für all diese Verschlüsselung und Entschlüsselung, sicher. – DOK
Sie müssen die Rainbow-Tabelle der anständigen Größe nicht ignorieren - diese Tabelle macht auch die verschlüsselte Meldung salzig, da sie den gesalzenen Hash entschlüsseln kann und erneut verwendet werden kann, um den ursprünglichen Hash zu entschlüsseln. Die gute Nachricht ist, dass der Tisch wahrscheinlich Jahrhunderte brauchen würde. – tloach
Die Sache, die mich erwischt, ist, dass ich nicht ganz sicher bin, dass ein Regenbogen-Tisch dieser Größe so lange braucht, um ihn zu erschaffen. Er ist eine verrückte Idee, nehmen Sie eine verteilte Rechnerplattform wie Kraken (es ist wirklich so, wie es ist), um es zu erzeugen. Wie lange würde es dann dauern? – kemiller2002