Bei der Arbeit haben wir zwei konkurrierende Theorien für Salze. Die Produkte, an denen ich arbeite, verwenden so etwas wie einen Benutzernamen oder eine Telefonnummer, um den Hash zu salzen. Im Wesentlichen etwas, das für jeden Benutzer anders ist, aber für uns leicht verfügbar ist. Das andere Produkt generiert zufällig 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, ob der zweite Ansatz wirklich notwendig ist? Ich kann aus rein theoretischer Sicht verstehen, dass es sicherer ist als der erste Ansatz, aber was ist aus praktischer Sicht? Um einen Benutzer zu authentifizieren, muss das Salt jetzt unverschlüsselt und auf die Anmeldeinformationen angewendet werden.
Nachdem ich darüber nachgedacht habe, sehe ich keinen wirklichen Sicherheitsgewinn durch diesen Ansatz. Das Ändern des Salt von Konto zu Konto macht es für jemanden immer noch äußerst schwierig, den Hashing-Algorithmus brutal zu erzwingen, selbst wenn der Angreifer wusste, wie er schnell feststellen kann, was es für jedes Konto ist. Dies setzt voraus, dass die Passwörter ausreichend sicher sind. (Offensichtlich ist es wesentlich einfacher, den richtigen Hash für eine Reihe von Passwörtern zu finden, bei denen es sich um alle zwei Ziffern handelt, als den richtigen Hash von Passwörtern mit 8 Ziffern zu finden.) Bin ich in meiner Logik falsch oder fehlt mir etwas?
EDIT: Okay, hier ist der Grund, warum ich denke, dass es wirklich umstritten ist, das Salz zu verschlüsseln. (Ich weiß, ob ich auf dem richtigen Weg bin).
Für die folgende Erklärung nehmen wir an, dass die Passwörter immer 8 Zeichen und das Salz 5 sind und alle Passwörter aus Kleinbuchstaben bestehen (dies erleichtert nur die Mathematik).
Ein anderes Salz für jeden Eintrag bedeutet, dass ich nicht denselben Regenbogentisch verwenden kann (technisch könnte ich das, wenn ich einen mit ausreichender Größe hätte, aber lassen Sie uns das für den Moment ignorieren). Dies ist der wahre Schlüssel zum Salz nach meinem Verständnis, denn um jeden Account zu knacken, muss ich das Rad sozusagen für jeden neu erfinden. Wenn ich nun weiß, wie man das richtige Salt auf ein Passwort anwendet, um den Hash zu generieren, würde ich es tun, weil ein Salt wirklich nur die Länge / Komplexität der Hash-Phrase erweitert. Ich würde also die Anzahl der möglichen Kombinationen reduzieren, die ich generieren müsste, um zu "wissen", dass ich das Passwort + Salz von 13 ^ 26 auf 8 ^ 26 habe, weil ich weiß, was das Salz ist. Das macht es einfacher, aber immer noch sehr schwer.
Also auf das Salz verschlüsseln. Wenn ich weiß, dass das Salz verschlüsselt ist, würde ich nicht zuerst versuchen, es zu entschlüsseln (vorausgesetzt, ich weiß, dass es über eine ausreichende Verschlüsselungsstufe verfügt). Ich würde es ignorieren. Anstatt herauszufinden, wie man es entschlüsselt, würde ich beim Zurückkehren zum vorherigen Beispiel einfach eine größere Regenbogentabelle generieren, die alle Schlüssel für die 13 ^ 26 enthält. Nicht zu wissen, dass das Salz mich definitiv verlangsamen würde, aber ich denke nicht, dass es die monumentale Aufgabe hinzufügen würde, zuerst zu versuchen, die Salzverschlüsselung zu knacken. Deshalb denke ich nicht, dass es das wert ist. Gedanken?
Hier ist ein Link, der beschreibt, wie lange Passwörter bei einem Brute-Force-Angriff halten: http://www.lockdown.co.uk/?pg=combi