Ich bin ein Anfänger in der Kryptografie und möchte in sehr einfachen Worten verstehen, was eine kryptografische “ ist salt “ ist, wann ich es möglicherweise verwenden muss und warum ich es verwenden sollte oder nicht.
Kann ich ein sehr einfaches bekommen und klare Erklärung (für Anfänger)?
Wenn Sie Referenzen zu diesem Thema kennen, sind diese ebenfalls hilfreich.
Antwort
Der Grund, warum Salze verwendet werden, ist, dass die Leute dazu neigen, dieselben Passwörter zu wählen, und zwar nicht zufällig. Viele verwendete Passwörter sind kurze echte Wörter, um das Erinnern zu erleichtern, aber auch dies ermöglicht einen Angriff.
Wie Sie vielleicht wissen, werden Passwörter im Allgemeinen nicht im Klartext gespeichert, sondern gehasht. Wenn Sie sich über den Zweck einer Hash-Funktion nicht sicher sind, lesen Sie dies bitte zuerst durch.
Nun können die Angreifer einfach eine Liste gängiger Passwörter und der entsprechenden Hashes erstellen Wenn Sie die Hashes verwenden, die eine Site mit der Tabelle gespeichert hat, werden dem Angreifer bei Verwendung allgemeiner Kennwörter die Kennwörter angezeigt.
A salt wird einfach zu hinzugefügt, um eine Kennwort-Hash-Ausgabe eindeutig zu machen. auch für Benutzer Übernehmen gängiger Passwörter . Ziel ist es, Angriffe vor der Berechnung nicht hilfreich zu machen. Wenn Ihr Passwort mit einem eindeutigen Salt gespeichert ist, hilft eine vorberechnete Passwort-Hash-Tabelle, die auf ungesalzene Passwort-Hashes oder auf ein Konto mit einem anderen Salt abzielt, nicht dabei, das Passwort Ihres Kontos zu knacken. Ein langes, zufällig generiertes Salt (mit /dev/urandom
) wird voraussichtlich global eindeutig sein . Somit können Salze verwendet werden, um Pre herzustellen -Computation-Angriffe sind völlig ineffektiv.
Der einfachste Weg, das Salt und das Passwort zu kombinieren, besteht darin, sie einfach zu verketten, dh der gespeicherte Hash-Wert ist Hash(salt||password)
Das Passwort password1
wird nun auf magische Weise zu z. B. 6$dK,3gCA%Jpassword1
, das in der Tabelle eines Passwort-Crackers wahrscheinlich nicht zu finden ist.
Das Salz kann vollständig im Clear in der Datenbank neben dem Hash-Wert gespeichert werden. Sobald der Angreifer über die Datenbank verfügt und die Kennwörter finden möchte, muss er die vorberechnete Tabelle für jedes Salz einzeln erstellen. Dies ist eine kostspielige Operation.
Eine weitere Möglichkeit, sich gegen das Knacken von Offline-Kennwörtern zu verteidigen, ist die Durchführung Passwort-Stretching, dh. Die Berechnung eines Kennwort-Hashs für jede Person wird langsamer, einschließlich des Anmeldedienstes und der Kennwortcracker. Eine Methode zum Strecken von Passwörtern wird durch mehrmaliges Iterieren der Hash-Funktion erreicht, d. H. Speichern von Hash(Hash(Hash(Hash…(Hash(salt||password)))…)
.
Eine andere verbreitete Idee im Zusammenhang mit dem Salzen heißt Pfeffer . Das heißt, ein weiterer zufälliger Wert, der mit dem Kennwort verknüpft ist, sodass der gespeicherte Wert Hash(pepper||salt||password)
ist. Der Pfeffer wird dann überhaupt nicht gespeichert . Sowohl der Anmeldeserver als auch der Kennwort-Cracker müssen den unbekannten Pfefferwert brutal erzwingen, was die Kennwort-Hash-Vergleiche für beide Parteien verlangsamt.
Von 2013 bis 2015 ein Kennwort-Hashing Wettbewerb wurde abgehalten, um nach einem besseren Algorithmus zum Strecken von Passwörtern zu suchen. Der Gewinner war der Argon2 -Algorithmus. Programmierern wird empfohlen, Argon2 zu verwenden, anstatt ihren eigenen Algorithmus zu implementieren.
Kommentare
- Wenn Sie also nur ein oder zwei Passwörter in der Datenbank gespeichert haben, ist die Verwendung von Salt praktisch nutzlos? Ich verstehe, dass dies nur hilfreich ist, wenn die Anzahl der in der Datenbank gespeicherten Passwörter nicht gering ist.
- @AbhinavChoudhury: Nein, es schützt vor Regenbogentabellen – d. H. Vorberechneten Tabellen für einen bestimmten Hash. Ein Beispiel: Nehmen Sie ein Passwort “ Passwort1 „. Wenn Sie kein ‚ t-Salz verwenden, speichern Sie ‚ HASH (“ password1 „) in Ihrer Datenbank. Wenn ein Angreifer Ihre Unterlagen erhält und HASH (*) für alle 9-stelligen Passwörter vorberechnet hat, kann er das Passwort wiederherstellen. Wenn Sie stattdessen das Passwort gesalzen haben, drücken Sie HASH (‚, damit Sie ‚ || ‚ password1 ‚) befindet sich NICHT in der Regenbogentabelle des Angreifers (da ‚ mehr als 9 Zeichen enthält).
- “ Das Salz kann vollständig im Clear in der Datenbank neben dem Hashwert “ – gespeichert werden. – Dieser Teil hat für mich nie wirklich Sinn ergeben. Ich habe mich gefragt, ob Sie das erweitern könnten.
- Der Sinn des Salzes besteht darin, sicherzustellen, dass der Hash nicht in einer vorberechneten Tabelle gefunden wird. Es muss gespeichert werden, um das Passwort zu überprüfen (andernfalls ist ‚ ein “ Pfeffer „). Das Salz sollte nicht “ geheim “ sein, nur um das Passwort eindeutig zu machen. Dies bedeutet natürlich, dass jedes gespeicherte Passwort ein eigenes, eindeutiges (und zufälliges) Salz haben muss.
Antwort
Können Sie mir helfen, zu verstehen, was ein kryptografisches „Salz“ ist?
Im Kontext des Passworts Bei der Erstellung eines „Salt“ handelt es sich um Daten (zufällig oder auf andere Weise), die einer Hash-Funktion hinzugefügt werden, um das Hacken der Hash-Ausgabe eines Kennworts zu erschweren.
Wann muss ich es möglicherweise verwenden?
Immer.
Warum sollte oder sollte ich es nicht verwenden?
Sie sollten aus den unten erläuterten Gründen immer einen Salt-Wert für Ihre Hash-Funktionen verwenden.
Es ist im Allgemeinen wahr, dass Leute schwache Passwörter wählen, und es ist sicher wahr, dass es Gigabyte öffentlich verfügbarer Regenbogentabellen gibt, die voll von Hash-Werten sind, die sie darstellen. Wenn also jemand ein Konto in Ihrem Dienst erstellt und ein Kennwort auswählt, um seine Identität zu sichern, können Sie darauf wetten, dass das von ihm gewählte Kennwort 1) häufig, 2) unsicher und 3) für Querverweise in Nachschlagetabellen verfügbar ist. P. >
Beispielsweise lautet das Kennwort Nowayin1 beim Hashing über MD5 6f367d65bc74b88e21fb9959487ffa3a und ist offensichtlich keine gute Wahl. Selbst wenn es in Ordnung aussieht (und es nicht „t“), macht die Tatsache, dass der MD5-Hash des Passworts in offenen Datenbanken angezeigt wird, es wertlos.
Aber das ist nur 128-Bit-MD5. Was ist mit etwas? stärker, wie SHA1 (160 Bit) oder sogar Whirlpool (512 Bit)?
Gleiches Problem.
Zum Beispiel P @ $$ Wort mit SHA1 ist 1e69e0a615e8cb813812ca797d75d4f08bdc2f56 „703de9e2ce“>
1qazXSW @ gehashten mit Whirlpool..ist 0bf7545b784665d23b9c174ca03688a405f05b048e9d6c49bfc2721a1fa872bbd6576273d002e56d7c2a9c378efe607af36eea9d708a776e6f60ecb26e081cdf .
Das Hauptproblem bei all diesen Passwörtern und Milliarden ähnlicher Passwörter ist die Tatsache, dass ihre häufig verwendeten Hashes allgemein bekannt geworden sind.
Ein Passwort Salz ändert dies.
Wenn dem ausgewählten Kennwort des Benutzers ein zufälliger Wert (das Salz) hinzugefügt wurde, dann würde der SHA1-Hash 1e69e0a615e8cb813812ca797d75d4f08bdc2f56 nicht mehr anzeigen als Passwort des Benutzers, da der Hash-Wert in der Regenbogentabelle nicht mehr mit ihm übereinstimmt.
Und es würde nicht viel dauern. Ein kleiner 16-Bit-Zufallswert würde beispielsweise 65.536 Varianten jedes Hash-Werts in den Nachschlagetabellen ergeben. Eine Datenbank mit 15 Milliarden Einträgen würde jetzt über 983 Milliarden Hashes benötigen, um das Salz zu berücksichtigen.
Das ist also der Punkt, an dem Sie Ihre Hashes salzen müssen, um Nachschlag- und Regenbogentabellen zu vereiteln. Aber ziehen Sie an „Hängen Sie Ihren Hut nicht an einen gesalzenen Hasch, weil Hacker nicht viel Zeit damit verschwenden, Regenbogentabellen zu verwenden, um Ihre Passwörter herauszufinden.
Sie verwenden eine 25-GPU-Clustersystem mit fünf Servern , auf dem Hashcat ausgeführt wird, das 350 Milliarden Vermutungen pro Sekunde durchbrechen kann, um Hashes für jedes denkbare achtstellige Kennwort zu knacken, das Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen enthält 6 Stunden. (Und das war im Jahr 2012.)
Techniken wie das Strecken von Schlüsseln, mit denen Hashes langsamer ausgeführt werden, können verwendet werden, um die Geschwindigkeit solcher Hardware auszugleichen, wodurch Wörterbuch- und Brute-Force-Angriffe zu langsam werden, um sich zu lohnen , aber die Hardware wird immer schneller.
UPDATE 2018:
Aktuelle Best Practices umfassen das sichere Hashing Ihrer Passwörter mit Argon2i (gegenüber Verschlüsselung bevorzugt), einer speicherintensiven Funktion, die sehr ausfallsicher für FPGAs, Mehrkern-GPUs und dedizierte ASIC-Module, mit denen nicht gestreckte Passphrasen leicht geknackt werden können. In der PHP7 -Implementierung von Argon2 wird das Salt intern für Sie behandelt.
Antwort
Ich werde versuchen, einen Teil Ihrer Frage zu beantworten, der bisher vernachlässigt wurde:
wann ich es möglicherweise verwenden muss und warum ich es verwenden sollte / nicht.
Die kurze Antwort lautet, dass Sie als Amateur keine Kryptografie auf einer Ebene verwenden sollten, die einen direkten Umgang mit Salzen erfordert.
Zum Beispiel die bcrypt
Der Passwort-Hashing-Algorithmus verwendet intern Salze. Diese Tatsache wird jedoch nicht den Entwicklern zugänglich gemacht, die ihn verwenden. Sie übergeben das Passwort einfach an bcrypt
(und optional an einen Parameter, der die Stufe „festlegt) CPU-Aufwand „erforderlich, um den Hash zu generieren) und es gibt den Hash zurück. Wenn Sie überprüfen müssen, ob ein Kennwort korrekt ist, übergeben Sie bcrypt
sowohl das Kennwort als auch den zuvor generierten Hash. Es wird angezeigt, ob das Kennwort zum Generieren des Hashs verwendet wurde oder nicht.
Befolgen Sie nicht die hier gegebenen Ratschläge und versuchen Sie, Ihre eigenen Kennwörter mit einem Salt zu hashen. Es handelt sich um ein Implementierungsdetail auf niedriger Ebene. Wenn Sie auf einer Ebene arbeiten, auf der diese Art von Dingen benötigt wird, arbeiten Sie auf einer viel zu niedrigen Abstraktionsebene. Kryptografie ist sehr schwierig korrekt durchzuführen, und das Internet ist voll von gut gemeinten Entwicklern, die „völlig unsichere, selbst entwickelte Passwort-Hashing-Schemata“ verwenden.
Antwort
Zitieren von “ Prüfungsreferenz 70-486 Entwickeln von ASP.NET MVC 4-Webanwendungen (MCSD): Entwickeln von ASP.NET MVC 4-Webanwendungen „ von William Penberthy, Pearson Education, 15. September 2013:
Salting ist ein Prozess, der die Dateiverschlüsselung und Hashes stärkt und das Aufbrechen erschwert. Salting fügt hinzu Eine zufällige Zeichenfolge am Anfang oder Ende des Eingabetextes vor dem Hashing oder Verschlüsseln des Werts. Wenn Hacker beispielsweise versuchen, eine Liste von Kennwörtern zu brechen, müssen sie das Salt sowie mögliche Passwortinformationen berücksichtigen, bevor sie brechen können Wenn jedem gesalzenen Wert ein anderer Salzwert zugewiesen wird, können Sie eine Tabelle mit potenziellen Kennwortwerten für ein Jahr erstellen Das Programm zum Knacken von Schwertern wird unhandlich.
Antwort
Ein Salz ist a Zufallszahl, die für den Zugriff auf die verschlüsselten Daten zusammen mit dem Kennwort benötigt wird.
Wenn ein Angreifer das Kennwort nicht kennt und versucht, es mit einem Brute-Force-Angriff zu erraten, versucht er jedes Kennwort muss mit jedem Salzwert ausprobiert werden.
Bei einem Ein-Bit-Salz (0 oder 1) ist die Verschlüsselung auf diese Weise doppelt so schwer zu brechen. Ein Zwei-Bit-Salz macht es viermal so schwer, ein Drei-Bit-Salz achtmal so schwer usw. Sie können sich vorstellen, wie schwierig es ist, Passwörter mit einer Verschlüsselung zu knacken, die ein 32-Bit-Salz verwendet!
Kommentare
- Nein. Es wird normalerweise angenommen, dass Salz dem Angreifer bekannt ist. In diesem Fall verbessert Salz nach einem niedrigen Schwellenwert die Sicherheit nicht.
- “ Es wird normalerweise angenommen, dass Salz dem Angreifer – > Wer nimmt das an?
- @Mike: Wer? Jemand sagt “ Sie sollten immer davon ausgehen, dass der Angreifer das Salz kennt. „. Personen auf einer anderen Seite sagen, “ Salze sind öffentlich “ und später heißt es „, dass die Salze bekannt sind, da ‚ die branchenübliche Verwendung des Wortes Salz ist. “ Ein anderer sagt, “ das Salz ist öffentlich bekannt oder sollte zumindest als öffentlich behandelt werden Wissen. „.