Nicht zufälliges Salz für Passwort-Hashes

89

UPDATE: Ich habe kürzlich aus dieser Frage gelernt , dass ich (und ich bin sicher, dass andere dies auch getan haben) in der gesamten folgenden Diskussion etwas verwirrend war: Was ich immer wieder als Regenbogentabelle bezeichne, wird tatsächlich als Hash-Tabelle bezeichnet. Regenbogentabellen sind komplexere Kreaturen und tatsächlich eine Variante von Hellman Hash Chains. Obwohl ich glaube, dass die Antwort immer noch dieselbe ist (da es sich nicht um eine Kryptoanalyse handelt), könnte ein Teil der Diskussion etwas verzerrt sein.
Die Frage: " Was sind Regenbogentische und wie werden sie verwendet? "


Normalerweise empfehle ich immer, einen kryptografisch starken Zufallswert als Salt zu verwenden, um ihn mit Hash-Funktionen (z. B. für Passwörter) zu verwenden, z. B. zum Schutz vor Rainbow Table-Angriffen.

Aber ist es tatsächlich kryptografisch notwendig, dass das Salz zufällig ist? Würde ein eindeutiger Wert (eindeutig pro Benutzer, z. B. Benutzer-ID) in dieser Hinsicht ausreichen? Es würde in der Tat verhindern, dass eine einzige Regenbogentabelle verwendet wird, um alle (oder die meisten) Passwörter im System zu knacken ...
Aber schwächt mangelnde Entropie wirklich die kryptografische Stärke der Hash-Funktionen?


Hinweis: Ich frage nicht, warum ich Salz verwenden soll, wie ich es schützen soll (muss es nicht sein), einen einzelnen konstanten Hash verwenden (nicht) oder welche Art von Hash-Funktion ich verwenden soll.
Nur ob Salz Entropie braucht oder nicht.


Vielen Dank für die bisherigen Antworten, aber ich möchte mich auf die Bereiche konzentrieren, mit denen ich (ein wenig) weniger vertraut bin. Hauptsächlich Implikationen für die Kryptoanalyse - Ich würde mich am meisten freuen, wenn jemand einen Beitrag vom krypto-mathematischen PoV hat.
Wenn es zusätzliche Vektoren gibt, die nicht berücksichtigt wurden, ist dies ebenfalls eine großartige Eingabe (siehe @ Dave Sherohman-Punkt auf mehreren Systemen).
Wenn Sie darüber hinaus eine Theorie, Idee oder Best Practice haben, stützen Sie diese bitte entweder mit Beweisen, Angriffsszenarien oder empirischen Beweisen. Oder sogar gültige Überlegungen für akzeptable Kompromisse ... Ich bin mit Best Practice (Kapital B Kapital P) zu diesem Thema vertraut. Ich möchte beweisen, welchen Wert dies tatsächlich bietet.


EDIT: Einige wirklich gute Antworten hier, aber ich denke, wie @Dave sagt, kommt es auf Rainbow Tables für gebräuchliche Benutzernamen an ... und möglicherweise auch weniger gebräuchliche Namen. Was ist jedoch, wenn meine Benutzernamen global eindeutig sind? Nicht unbedingt eindeutig für mein System, sondern für jeden Benutzer - z. B. E-Mail-Adresse.
Es würde keinen Anreiz geben, eine RT für einen einzelnen Benutzer zu erstellen (wie @ Dave betont hat, wird das Salz nicht geheim gehalten), und dies würde immer noch das Clustering verhindern. Das einzige Problem wäre, dass ich möglicherweise dieselbe E-Mail-Adresse und dasselbe Passwort auf einer anderen Site habe - aber Salt würde das sowieso nicht verhindern.
Es kommt also wieder auf die Kryptoanalyse an - IST die Entropie notwendig oder nicht? (Mein derzeitiges Denken ist, dass es aus Sicht der Kryptoanalyse nicht notwendig ist, aber aus anderen praktischen Gründen.)

AviD
quelle
Ich muss sagen, dass mich viele der folgenden Antworten verwirren. Der Hauptpunkt bei der Verwendung von Salz besteht einfach darin, einen Angriff auf den Regenbogentisch zu verhindern. Daher sollte alles, was für den Benutzer einzigartig ist, so ausgeführt werden, dass der Angreifer gezwungen wird, für jedes Salz einen Regenbogentisch neu zu erstellen. mein 2c.
Goran
Wenn Salz benötigt wird für z. Website haben Sie oft IDs in URLs. Wenn der Angreifer weiß (und wir gehen davon aus, dass er dies tut), dass das Passwort salt userid + username ist, ist es ziemlich einfach, den Angriff zu ändern, um den Salt-Wert zu vermeiden.
Dmajkic
@dmajkic, salt soll RT-Angriffe verhindern und dieselben Passwörter für verschiedene Benutzer unterscheiden. Dies ist auch bei Benutzernamen eine Selbstverständlichkeit.
AviD
@AviD: Das stimmt. Aber wenn ich meinen Hash für meinen Pass kenne und weiß, dass Salt mein Benutzername ist, kann ich einfach einen Hash-Pass-Wert für jedes Wörterbuchwort erstellen und ihn mit einem anderen Pass-Hash vergleichen. Deshalb ist die Zeit besser als der Benutzername.
Dmajkic
1
Ich habe gerade einen Artikel auf der Website des PHP Security Consortium gefunden, der in seinem Beispiel eine md5-Hash- Zufallszahl als Salt verwendet. Phpsec.org/articles/2005/password-hashing.html
helloworlder

Antworten:

156

Salt wird traditionell als Präfix zum Hash-Passwort gespeichert. Dies macht es bereits jedem Angreifer mit Zugriff auf den Passwort-Hash bekannt. Die Verwendung des Benutzernamens als Salt oder nicht wirkt sich nicht auf dieses Wissen aus und hat daher keine Auswirkungen auf die Sicherheit eines einzelnen Systems.

Die Verwendung des Benutzernamens oder eines anderen benutzergesteuerten Werts als Salt würde jedoch die systemübergreifende Sicherheit verringern, da ein Benutzer, der auf mehreren Systemen, die denselben Kennwort-Hashing-Algorithmus verwenden, denselben Benutzernamen und dasselbe Kennwort hatte, denselben Kennwort-Hash erhalten würde jedes dieser Systeme. Ich halte dies nicht für eine erhebliche Haftung, da ich als Angreifer zuerst Kennwörter ausprobieren würde, die ein Zielkonto bekanntermaßen auf anderen Systemen verwendet hat, bevor ich andere Mittel zur Gefährdung des Kontos versuche. Identische Hashes würden mir nur im Voraus sagen, dass das bekannte Passwort funktionieren würde, sie würden den eigentlichen Angriff nicht einfacher machen. (Beachten Sie jedoch, dass ein schneller Vergleich der Kontodatenbanken eine Liste von Zielen mit höherer Priorität liefern würde, da ich erfahren würde, wer Kennwörter wiederverwendet und wer nicht.)

Die größere Gefahr dieser Idee besteht darin, dass Benutzernamen häufig wiederverwendet werden. Nahezu jede Site, die Sie besuchen möchten, verfügt beispielsweise über ein Benutzerkonto mit dem Namen "Dave", und "admin" oder "root" sind noch häufiger anzutreffen Die Erstellung von Regenbogentabellen für Benutzer mit diesen gebräuchlichen Namen ist viel einfacher und effektiver.

Diese beiden Fehler können effektiv behoben werden, indem dem Kennwort vor dem Hashing ein zweiter Salzwert hinzugefügt wird (entweder fest und verborgen oder wie Standardsalz verfügbar). An diesem Punkt können Sie jedoch auch nur Standard-Entropiesalz verwenden den Benutzernamen hinein zu arbeiten.

Bearbeitet, um hinzuzufügen: Viele Leute sprechen über Entropie und ob Entropie in Salz wichtig ist. Es ist, aber nicht aus dem Grund, warum die meisten Kommentare dazu zu denken scheinen.

Der allgemeine Gedanke scheint zu sein, dass Entropie wichtig ist, damit das Salz für einen Angreifer schwer zu erraten ist. Dies ist falsch und in der Tat völlig irrelevant. Wie einige Male darauf hingewiesen haben, können Angriffe, die von Salt betroffen sind, nur von jemandem mit der Passwortdatenbank ausgeführt werden, und jemand mit der Passwortdatenbank kann nur nachsehen, wie hoch das Salz jedes Kontos ist. Ob es erraten wird oder nicht, spielt keine Rolle, wann Sie es trivial nachschlagen können.

Der Grund, warum Entropie wichtig ist, besteht darin, eine Häufung von Salzwerten zu vermeiden. Wenn das Salz auf dem Benutzernamen basiert und Sie wissen, dass die meisten Systeme ein Konto mit dem Namen "root" oder "admin" haben, können Sie eine Regenbogentabelle für diese beiden Salze erstellen und die meisten Systeme knacken. Wenn andererseits ein zufälliges 16-Bit-Salz verwendet wird und die zufälligen Werte ungefähr gleichmäßig verteilt sind, benötigen Sie eine Regenbogentabelle für alle 2 ^ 16 möglichen Salze.

Es geht nicht darum, den Angreifer daran zu hindern, zu wissen, was das Salz eines einzelnen Kontos ist, sondern darum, ihm nicht das große, fette Ziel eines einzelnen Salzes zu geben, das für einen erheblichen Teil der potenziellen Ziele verwendet wird.

Dave Sherohman
quelle
Einverstanden. Ich würde mehr Wert auf die Wiederverwendung von Benutzernamen legen, da ich denke, dass dies der Angriff ist, der am wahrscheinlichsten gegen hypothetische Systeme erfolgreich ist, die den Benutzernamen als Salt verwenden und die gegen ein System mit zufälligem Salt fehlgeschlagen wären.
Steve Jessop
Ich schätze Ihren Standpunkt zur systemübergreifenden Sicherheit. Außerdem denke ich, dass es in Zukunft nicht unwahrscheinlich ist, benutzerspezifische Regenbogentabellen zu sehen ...
AviD
@AviD: Glaubst du? Das ist ein ziemlich spezifischer Angriffsvektor.
David Grant
2
Nicht zur Erzeugung von Salzen, nein. Die einzigen Angriffe, die von Salz betroffen sind, sind solche, die direkt gegen die gehashten Passwörter ausgeführt werden. Ein Angriff kann diese Art von Angriff nur ausführen, wenn eine Kopie Ihrer Kennwortdatenbank vorhanden ist, die auch die Salze enthält. Da der Angreifer die Salze bereits in seinem Besitz hat, benötigen sie nur eine ausreichende Entropie, um zu vermeiden, dass mehrere Passwörter mit demselben Salz gehasht werden, das jedes grundlegende (P) RNG bereitstellt.
Dave Sherohman
3
@ acidzombie24: Die Verwendung eines einzelnen festen Salt (nach meiner Erfahrung normalerweise als "Nonce" bezeichnet) für alle Passwörter ist weniger sicher als die Verwendung eines eindeutigen zufälligen Salt für jedes Passwort, da ein Angreifer dennoch trivial bestimmen kann, ob zwei oder mehr Konten gemeinsam genutzt werden das gleiche Passwort. Andererseits wird die Nonce wahrscheinlich eher in Ihrem Code als in der Datenbank gespeichert, sodass ein Angreifer, der nur über Ihre Datenbank verfügt, keinen Zugriff darauf hat. Aus diesem Grund ist die sicherste Option, sowohl eine systemweite Nonce (im Code gespeichert) als auch ein Salt pro Kennwort (in der Datenbank gespeichert) zu verwenden.
Dave Sherohman
29

Die Verwendung eines Salzes mit hoher Entropie ist unbedingt erforderlich, um Passwörter sicher zu speichern.

Nimm meinen Benutzernamen 'gs' und füge ihn meinem Passwort hinzu. 'MyPassword' gibt gsMyPassword. Dies kann mit einer Regenbogentabelle leicht behoben werden, da der Wert möglicherweise nicht in der Regenbogentabelle gespeichert ist, wenn der Benutzername nicht genügend Entropie aufweist, insbesondere wenn der Benutzername kurz ist.

Ein weiteres Problem sind Angriffe, bei denen Sie wissen, dass ein Benutzer an zwei oder mehr Diensten teilnimmt. Es gibt viele gebräuchliche Benutzernamen, die wahrscheinlich wichtigsten sind admin und root. Wenn jemand eine Regenbogentabelle mit Salzen mit den häufigsten Benutzernamen erstellt hat, kann er diese verwenden, um Konten zu gefährden.

Früher hatten sie ein 12-Bit-Salz . 12 Bit sind 4096 verschiedene Kombinationen. Das war nicht sicher genug, da heutzutage so viele Informationen leicht gespeichert werden können . Gleiches gilt für die 4096 am häufigsten verwendeten Benutzernamen. Es ist wahrscheinlich, dass einige Ihrer Benutzer einen Benutzernamen auswählen, der zu den häufigsten Benutzernamen gehört.

Ich habe diesen Passwortprüfer gefunden , der die Entropie Ihres Passworts ermittelt. Eine geringere Entropie in Passwörtern (z. B. durch die Verwendung von Benutzernamen) erleichtert Regenbogentabellen erheblich, da sie versuchen, mindestens alle Passwörter mit geringer Entropie abzudecken, da sie mit größerer Wahrscheinlichkeit auftreten.

Georg Schölly
quelle
Jedoch +1 für einen guten Punkt, Sie sind im Gespräch über eine möglicherweise massive Regenbogen - Tabelle. Um alle Werte der Länge von gsMyPassword abzudecken (unter der Annahme einer alphanumerischen Groß- und Kleinschreibung), sind 36 ^ 12 Zeilen in der Tabelle erforderlich!
David Grant
Als Folge: Das verteilte Regenbogentischprojekt hat 63.970 geknackte Hashes, aber 36 ^ 12 sind 4.738.381.338.321.616.896!
David Grant
Vielen Dank, und das macht Sinn - aber wie Mr.PotatoHead betonte, erweitern Sie Ihren Speicherplatz immer noch über die vernünftige Möglichkeit hinaus, mit RT zu knacken. Angenommen, meine Benutzernamen bestehen aus mindestens 6-8 Zeichen. Welchen zusätzlichen erforderlichen Wert bietet die Entropie?
AviD
@Potato: Sie nehmen eine Regenbogentabelle an, die alle möglichen Kombinationen von alphanumerischen Zeichen enthält. Dies muss nicht der Fall sein, eine effektive Regenbogentabelle enthält Hashes für gängige Passwörter / Hashes. Salz schützt vor Wörterbuchangriffen oder kombinierten Regenbogentabellen / Wörterbüchern.
Guillaume
3
Die Verwendung des Benutzernamens als Salt ist auch eine schlechte Idee für Systeme, auf denen ein Konto mit vorhersehbaren Namen und hohen Berechtigungen vorhanden ist: "Administrator" unter Windows, "root" unter * nix, "sa" in MSSQL usw.
niemand
8

Es ist wahr, dass der Benutzername allein problematisch sein kann, da Benutzer Benutzernamen auf verschiedenen Websites teilen können. Es sollte jedoch eher unproblematisch sein, wenn die Benutzer auf jeder Website einen anderen Namen hatten. Warum also nicht einfach auf jeder Website einzigartig machen? Hash das Passwort etwas wie folgt

Hash-Funktion ("www.yourpage.com /" + Benutzername + "/" + Passwort)

Dies sollte das Problem lösen. Ich bin kein Meister der Kryptoanalyse, aber ich bezweifle, dass die Tatsache, dass wir keine hohe Entropie verwenden, den Hash schwächer machen würde.

konne
quelle
Ich glaube, Sie haben Recht, dass dies ausreicht. Angesichts der Tatsache, dass Hashes ein kompliziertes mathematisches Feld sind und es sehr gut möglich ist, dass Salze mit niedriger Entropie die Hashes in Zukunft leichter erraten können (insbesondere wenn Hashes gebrochen werden), würde ich nicht auf die Sicherheit wetten, wenn dies bewiesen ist Eine sicherere Lösung ist nicht viel teurer.
Georg Schölly
7

Ich verwende gerne beides: ein zufälliges Salz mit hoher Entropie pro Datensatz sowie die eindeutige ID des Datensatzes selbst.

Dies erhöht zwar nicht viel die Sicherheit gegen Wörterbuchangriffe usw., entfernt jedoch den Randfall, in dem jemand sein Salz und seinen Hash in einen anderen Datensatz kopiert, um das Kennwort durch sein eigenes zu ersetzen.

(Zugegeben, es ist schwer, sich einen Umstand vorzustellen, unter dem dies zutrifft, aber ich kann keinen Schaden an Gürteln und Hosenträgern sehen, wenn es um Sicherheit geht.)

teedyay
quelle
Ich mag die Idee, das Passwort an den Benutzer zu binden. Aber wenn der Angreifer das Passwort ändern kann, kann er sicherlich auch die ID ändern.
Georg Schölly
Kommt darauf an, wie die ID lautet: Ich verwende den Primärschlüssel der Tabelle, den Sie nicht wirklich nach Belieben ändern können. TBH, wenn der Hacker in Ihre Datenbank schreibt, haben Sie bereits ziemlich große Probleme ...
Dienstag,
3
Nein, ich mag es. Ein Angreifer ist oft ein "Insider". Ich könnte mir Szenarien ausdenken, in denen das, wonach er sucht, nicht in der Datenbank enthalten ist. Wenn er jedoch die Anmeldeinformationen in der Datenbank überschreiben kann, kann er sich authentifizieren, um das zu tun, was er will.
Erickson
1
Guter Punkt. Wir finden, dass es immer schwieriger wird, den ersten Benutzer zu einer neuen Datenbank hinzuzufügen: Wir haben unsere Anwendungen effektiv so sicher gemacht, dass wir sie selbst kaum hacken können. [Verwenden Sie auch ein anwendungsspezifisches Salt, damit Sie keine Anmeldeinformationen von einer Datenbank in eine andere kopieren können.]
Dienstag,
Schließlich fand ich jemanden, der dies sagte: dem Salz etwas Benutzerspezifisches hinzufügen. Dies verhindert, dass ein Eindringling einige Anmeldeinformationen auf einen anderen Benutzer kopiert, und verhindert, dass ein Hacker ein Kennwort errät, wenn er es schafft, Ihr Hash- und Salt-Feld in der Tabelle zu erreichen. Eine Sache, die ich gerne noch mache: keine runde Anzahl von Iterationen im Hashing verwenden. Gehen Sie nicht für 10k oder 20k, sondern so etwas wie 19835.
Andrew
3

Wenn das Salz bekannt oder leicht zu erraten ist, haben Sie die Schwierigkeit eines Wörterbuchangriffs nicht erhöht. Es kann sogar möglich sein, eine modifizierte Regenbogentabelle zu erstellen, die ein "konstantes" Salz berücksichtigt.

Die Verwendung einzigartiger Salze erhöht die Schwierigkeit von BULK-Wörterbuchangriffen.

Ein einzigartiger, kryptographisch starker Salzwert wäre ideal.

HUAGHAGUAH
quelle
2
Der springende Punkt der Regenbogentabelle ist, dass die Werte vorgeneriert sind und dass, wenn Sie die Tabelle für einen Wert (z. B. ein Passwort) PLUS einer bestimmten Konstante generieren, dies eine völlig andere Tabelle ist, und Sie können dies genauso gut tun Probieren Sie das Hash-Ergebnis direkt aus. :)
David Grant
1
Ein konstanter Hash ist nichts wert. Alle Passwörter können mit einer einzigen Regenbogentabelle geknackt werden. Der Zweck des Salzes ist, dass es unmöglich ist, einen Regenbogentisch zu erstellen.
Georg Schölly
1
@gs - Ich verstehe nicht, warum Sie keine Regenbogentabelle erstellen können, die die Auswirkungen eines konstanten Salzes "enthält". Der Angriffsbereich (das Kennwort) hat sich nicht geändert, sodass die Tabelle nicht vergrößert werden muss, sondern nur neu berechnet werden muss.
HUAGHAGUAH
@ Potato - hängt vom Kompromiss ab. Wenn die 20.000 Anmeldungen Ihres Unternehmens alle mit demselben konstanten Salz gehasht wurden, ist es möglicherweise billiger, eine neue Regenbogentabelle zu berechnen, als sie alle einzeln im Wörterbuch anzugreifen. Daher meine Betonung von "BULK".
HUAGHAGUAH
3

Ich würde sagen, solange das Salz für jedes Passwort unterschiedlich ist, werden Sie wahrscheinlich in Ordnung sein. Der Punkt des Salzes ist, dass Sie nicht die Standard-Regenbogentabelle verwenden können, um jedes Passwort in der Datenbank zu lösen. Wenn Sie also jedem Passwort ein anderes Salt zuweisen (auch wenn es nicht zufällig ist), müsste der Angreifer grundsätzlich für jedes Passwort eine neue Regenbogentabelle berechnen, da jedes Passwort ein anderes Salt verwendet.

Die Verwendung eines Salzes mit mehr Entropie hilft nicht viel, da davon ausgegangen wird, dass der Angreifer in diesem Fall bereits über die Datenbank verfügt. Da Sie in der Lage sein müssen, den Hash neu zu erstellen, müssen Sie bereits wissen, was das Salz ist. Sie müssen also das Salz oder die Werte, aus denen das Salz besteht, in Ihrer Datei speichern. In Systemen wie Linux ist die Methode zum Abrufen des Salzes bekannt, sodass es keinen Sinn macht, ein geheimes Salz zu haben. Sie müssen davon ausgehen, dass der Angreifer, der Ihre Hash-Werte hat, wahrscheinlich auch Ihre Salzwerte kennt.

Kibbee
quelle
3
"Der Punkt des Salzes ist, dass Sie nicht die Standard-Regenbogentabelle verwenden können, um jedes Passwort in der Datenbank zu lösen." Ich bin nicht einverstanden. Der Punkt ist, dass Sie keine Standard-Regenbogentabelle verwenden können, um ein Passwort zu lösen . Wenn das Salz der Benutzername ist, könnte die Regenbogentabelle für "Wurzel" das pw der Wurzel knacken.
Steve Jessop
Das ist wahrscheinlich die einzige Regel, die wirklich wichtig ist. Grundsätzlich möchten Sie, dass das Kennwort auf Ihrem System eindeutig ist, aber es spielt keine Rolle, was es ist. Es könnte trotzdem etwas Einfaches sein. Sie brauchen nicht viel Entropie.
Kibbee
Das war auch mein Denken - aber ich blieb beim "wahrscheinlich okay" stecken. Ich sehe diese Theorie immer noch nicht bewiesen - oder zumindest bestätigt, dass es keine Auswirkungen auf die Kryptoanalyse gibt.
AviD
@onebyone: Wenn das Salt aus Benutzername + konstantem lokalen Wert besteht (ich verwende oft ':'), ruiniert dies immer noch standardisierte RTs, es sei denn, es gibt eine Vielzahl von RTs, die gemeinsame Benutzernamen und gemeinsame statische Salzwerte enthalten. Ich vermute eher, dass das nicht der Fall ist.
nsayer
Zusammen mit nsayer. Sie könnten eine systemweite konstante Zeichenfolge verwenden, für die es keine vorgenerierte RT wie # (D83d8, zusammen mit dem Benutzernamen als Salz) geben würde, und die wahrscheinlich alle Regenbogentabellenangriffe verhindern würde.
Kibbee
3

Die Stärke einer Hash-Funktion wird nicht durch ihre Eingabe bestimmt!

Die Verwendung eines Salzes, das dem Angreifer bekannt ist, macht das Erstellen einer Regenbogentabelle (insbesondere für fest codierte Benutzernamen wie root ) natürlich attraktiver, schwächt aber den Hash nicht . Die Verwendung eines dem Angreifer unbekannten Salzes erschwert den Angriff auf das System.

Die Verkettung eines Benutzernamens und eines Kennworts bietet möglicherweise immer noch einen Eintrag für eine intelligente Regenbogentabelle. Daher ist es wahrscheinlich besser, ein Salz aus einer Reihe von Pseudozufallszeichen zu verwenden, die mit dem Hash-Kennwort gespeichert sind. Wenn ich beispielsweise den Benutzernamen "Kartoffel" und das Passwort "Bier" hätte, wäre die verkettete Eingabe für Ihren Hash "Potatobeer", was ein vernünftiger Eintrag für eine Regenbogentabelle ist.

Das Ändern des Salt bei jeder Änderung des Kennworts durch den Benutzer kann dazu beitragen, längere Angriffe abzuwehren, ebenso wie die Durchsetzung einer angemessenen Kennwortrichtlinie, z. B. Groß- und Kleinschreibung, Zeichensetzung, Mindestlänge, Änderung nach n Wochen.

Ich würde jedoch sagen, dass Ihre Wahl des Digest-Algorithmus wichtiger ist. Die Verwendung von SHA-512 wird sich für jemanden, der einen Regenbogentisch generiert, als schmerzhafter erweisen als beispielsweise MD5.

David Grant
quelle
Die Stärke der Funktion ändert sich nicht, aber die Ausgabe ändert sich definitiv. Wenn die Eingabe beeinflusst oder bekannt sein kann, kann möglicherweise etwas über den Hash-Wert abgeleitet werden. Das ist das Risiko.
Martin Carpenter
@ Martin: Das einzige, was Sie aus dem Hash-Wert ableiten können sollten, wenn Sie eine Übereinstimmung haben oder nicht! Wenn Sie "roota" oder "rootb" (wobei "a" und "b" das Kennwort darstellen) in eine Hash-Funktion einfügen, erhalten Sie eine radikal andere Ausgabe.
David Grant
Die Salze sind einem Angreifer anhand von Regenbogentischen bekannt.
Georg Schölly
Der Server muss das unverschlüsselte Salt kennen (um das Passwort mit dem Hash zu vergleichen), daher kann man davon ausgehen, dass ein Angreifer Zugriff auf das Salt hat, oder es sehr leicht erhalten.
Georg Schölly
Richtig, richtig, das ist eine Selbstverständlichkeit - genauer gesagt, ich meinte die Stärke des gesamten Kryptosystems (oder -subsystems, wrt hashes).
AviD
1

Salz sollte so viel Entropie wie möglich aufweisen, um sicherzustellen, dass bei einem mehrfachen Hash eines bestimmten Eingabewerts der resultierende Hash-Wert so nah wie möglich immer unterschiedlich ist.

Durch die Verwendung sich ständig ändernder Salzwerte mit möglichst viel Entropie im Salz wird sichergestellt, dass die Wahrscheinlichkeit von Hashing (z. B. Passwort + Salz) zu völlig unterschiedlichen Hashwerten führt.

Je weniger Entropie im Salz vorhanden ist, desto größer ist die Chance, dass Sie denselben Salzwert erzeugen, und desto größer ist somit die Chance, dass Sie denselben Hashwert erzeugen.

Es ist die Natur des Hash-Werts, "konstant" zu sein, wenn die Eingabe bekannt ist, und "konstant", die Wörterbuchangriffe oder Regenbogentabellen so effektiv machen. Indem der resultierende Hash-Wert so weit wie möglich variiert wird (indem hohe Entropiesalzwerte verwendet werden), wird sichergestellt, dass durch Hashing derselben Eingabe + zufälliges Salz viele verschiedene Hash-Werte erzielt werden, wodurch die Regenbogentabelle besiegt (oder zumindest die Wirksamkeit der Regenbogentabelle stark verringert) wird Anschläge.

CraigTP
quelle
Auch hier beziehe ich mich nicht auf die Verwendung eines einzelnen konstanten Salzes, sondern auf einen nicht zufälligen, aber benutzerspezifischen Wert. ZB userId.
AviD
Der springende Punkt ist, dass Ihr Salzwert niemals konstant sein sollte. Jede einzelne Sache, die Sie hashen, ob der gleiche "Eingabewert" oder nicht, sollte ein anderes Salz haben. Dave Sherohman erklärt die Nachteile der Verwendung selbst benutzerspezifischer Werte, die bei jeder Hash-Berechnung im Wesentlichen gleich bleiben.
CraigTP
-1

Die Entropie ist der Punkt des Salzwerts.

Wenn hinter Salz eine einfache und reproduzierbare "Mathematik" steckt, dann ist es dasselbe, als ob das Salz nicht da wäre. Nur das Hinzufügen eines Zeitwerts sollte in Ordnung sein.

dmajkic
quelle
Ich verstehe diesen Kommentar nicht. Sie sagen "Entropie verwenden" und dann: "Zeit verwenden"?
Martin Carpenter
Wenn der Benutzername für Salz verwendet wird, ist er nicht entropisch genug. Wenn Sie jedoch den Benutzernamen + das aktuelle Datum verwenden, ist dies der Fall, da schwer zu erraten ist, wann genau Salt erstellt wurde.
Dmajkic
"entropisch genug" ist subjektiv; Es ist dein Standard. Es ist möglicherweise nicht ausreichend, diesen Wert rechtzeitig zu bestimmen.
Martin Carpenter
Es gibt keine "absolut wahre Zufälligkeit". Es liegt an uns zu sagen, wann es "gut genug" ist. Wenn Sie der Meinung sind, dass die Zeit in diesem Fall nicht gut genug ist, verwenden Sie etwas anderes. stackoverflow.com/questions/84556/…
dmajkic
Tatsächlich besteht der Punkt des Salzes darin, dass jedes Hash-Ergebnis eindeutig ist - um (a) Angriffe auf Regenbogentabellen und (b) identische Kennwortidentifikation zu verhindern. Die Frage ist, wofür wird Entropie sonst noch benötigt, wenn überhaupt?
AviD