Frage:
Wie lagere ich Salz?
George
2012-07-20 11:28:12 UTC
view on stackexchange narkive permalink

Wenn Sie erwarten, dass das Benutzerkennwort sicher gespeichert wird, müssen Sie mindestens Folgendes tun:

  $ pwd = Hash (Hash ($ Kennwort) + Salt)  

Anschließend speichern Sie $ pwd in Ihrem System anstelle des tatsächlichen Kennworts. Ich habe einige Fälle gesehen, in denen $ pwd das Salz selbst enthält.

Ich frage mich, ob das Salz separat gelagert werden sollte oder ob es in Ordnung ist, wenn ein Der Angreifer erhält gleichzeitig den Hash-Wert und das Salz. Warum?

Nun, eine Sache, die man bei Salzen beachten sollte. Wenn Sie es schaffen, sie geheim zu halten, und Ihre Passwort-Hashes durchgesickert sind, ist es (wahrscheinlich) völlig unmöglich, ein Passwort wiederherzustellen, selbst wenn 10.000 Grafikkarten es brutal erzwingen
@Earlz Das ist ** nicht ** der Zweck eines Salzes, und es ist sowieso fast unmöglich, Salze versteckt zu halten!
@Polynomial Nun, etwas zu beachten. Ich habe ein Authentifizierungssystem, das zwei Salze für jedes Passwort verwendet, eines zufällig generiert und in der Datenbank gespeichert und eines global für die Website und im Code gespeichert. Mein Ziel war es, es so zu gestalten, dass es auch dann nicht möglich ist, ein Login-Cookie zu fälschen oder das Passwort brutal zu erzwingen, selbst wenn die Datenbank durchgesickert ist.
@Earlz Das zweite Salz heißt [Pfeffer] (http://security.stackexchange.com/questions/3272/password-hashing-add-salt-pepper-or-is-salt-enough) und schützt Sie vor Angreifern, die dies tun haben nur Zugriff auf die Datenbank. Es ist nützlich, aber da Sie parametrisierte Abfragen verwenden (Sie * verwenden * sie, oder?), Ist die SQL-Injection kein Problem, sodass das Modell eines Angreifers viel weniger wahrscheinlich ist.
Heh, ich wusste nicht, dass es dafür einen Namen gibt, @Polynomial. Und ich bin mir ziemlich sicher, dass meine Datenbank sicher ist, aber nur für den Fall, dass dies nicht der Fall ist. (MongoDB). Ich denke, es kann nicht schaden und es ist nicht so schwer zu implementieren
Verzeihen Sie meine Unwissenheit, aber ist es wirklich notwendig, das Passwort zu hashen, bevor Sie das Salz hinzufügen? Wenn Sie einen guten Hashing-Algorithmus haben, sollte das keinen Unterschied machen, oder?
Was ist mit $ pwd = Hash (Hash ($ Passwort) + Benutzername)?
@X-Zero Es sollte überhaupt keinen Unterschied geben, und es macht die Dinge bei der Verwendung eines adaptiven KDF umständlicher.
@SilverViper Das ist eine schlechte Idee. Es gibt einem Angreifer das Salz, so dass er im Voraus eine Regenbogentabelle berechnen kann, bevor er offen gegen Ihre Datenbank verstößt. In einer solchen Situation kann sich der Angreifer unmittelbar nach dem Angriff anmelden und Sie haben keine Zeit zu reagieren. In meiner Antwort finden Sie eine detailliertere Erklärung dieses Problems.
+1 for using salts, which is more than big websites seem to do usually.
AililnofseCMT Yup. Some even store in plaintext. See [Plaintext Offenders](http://plaintextoffenders.com/) for examples. Another large company, not listed there, is Tesco.
Warum sollten Sie ein Salz aufbewahren? Wenn Sie es mit den Anmeldeinformationen auf irgendeine Weise berechnen könnten, z. B. "$ salt = base64_encode ($ username. $ Passwort)", müssen Sie es nicht speichern, und wenn der Benutzername und das Passwort korrekt sind, stimmen sie überein das Salz auch.
@matejkramny Das entspricht genau der Verwendung des Benutzernamens als Salt und ist aus demselben Grund schlecht: Wenn der Angreifer einen Benutzernamen kennt, in den er einbrechen möchte, kann er die Hashes für diesen Benutzernamen einfach vorberechnen. Das Einfügen des Passworts in das Salt ändert nichts. Um zu verhindern, dass Hashes vorberechnet werden, sollte das Salz in der Datenbank gespeichert werden, damit sie es nicht erhalten können, bevor sie die Hashes selbst erhalten. Dies bedeutet, dass sie viel Zeit benötigen, um die Hashes zu brechen, * nachdem * sie die Datenbank kompromittiert haben gibt Ihnen die Möglichkeit, Passwörter zu ändern, bevor sie Zugriff erhalten.
//, Welche Container verwenden Sie?Verwenden Sie jodiert oder nicht jodiert?Sie könnten mit einem vergifteten Salz enden, vermeiden Sie daher Metallbehälter, da Salz Metalle und / oder Elemente aus dem Metall auslaugt.Unabhängig davon müssen Sie keinen Lebensmittelsparer verwenden, da Salz auch dann nicht ranzig wird, wenn es der Luft ausgesetzt ist.Für große Mengen empfehle ich, das Salz in robuste Plastiktüten in Gallonengröße zu schöpfen.Dann können Sie die Beutel in einen 5-Gallonen-Eimer mit Lebensmittelqualität legen.Für alle Prepper da draußen kann es in Zeiten der Not als Tauschgegenstand verwendet werden.
//, https://selfreliantschool.com/how-and-why-to-store-salt
Sechs antworten:
Polynomial
2012-07-20 19:23:55 UTC
view on stackexchange narkive permalink

TL; DR - Sie können das Salz im Klartext ohne jegliche Verschleierung oder Verschlüsselung speichern, aber nicht nur an jemanden weitergeben, der es möchte.


Der Grund, warum wir Salze verwenden, besteht darin, Vorberechnungsangriffe wie Regenbogentabellen zu stoppen. Bei diesen Angriffen wird eine Datenbank mit Hashes und ihren Klartexten erstellt, sodass Hashes gesucht und sofort in Klartext umgewandelt werden können.

Zum Beispiel *:

  86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 ae9d71f5ee7c92d6dc9e92ffdad17b8bd49418f98 b84a516841ba77a5b4648de2cd0dfcb30ea46dbb4 c ... 948291f2d6da8e32b007d5270a0a5d094a455a02 ZZZZZX151bfc7ba4995bfa22c723ebe7921b6ddc6961bc ZZZZZY18f30f1ba4c62e2b460e693306b39a0de27d747c ZZZZZZ  

Die meisten Tabellen enthalten auch eine Liste von gemeinsamen Passwörtern:

  5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 passworde38ad214943daad1d64c102faec29de4afe9da3d password1b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3 letmein5cec175b165e3d5e62c9e13ce848ef6feac81bff qwerty123  

* Ich verwende hier SHA-1 als Beispiel, aber ich werde später erklären, warum dies eine schlechte Idee ist. sup>

Also, Wenn mein Passwort-Hash 9272d183efd235a6803f595e19616c348c275055 lautet, ist es äußerst einfach, ihn in einer Datenbank zu suchen. a Finden Sie heraus, dass der Klartext bacon4 ist. Anstatt ein paar Stunden damit zu verbringen, den Hash zu knacken (ok, in diesem Fall wären es ein paar Minuten auf einer anständigen GPU, aber wir werden später darüber sprechen), erhalten Sie das Ergebnis sofort

Offensichtlich ist dies schlecht für die Sicherheit! Also verwenden wir ein Salz. Ein Salt ist ein zufälliges eindeutiges Token, das mit jedem Passwort gespeichert wird. Angenommen, das Salz ist 5aP3v * 4! 1bN<x4i&3 und der Hash ist 9537340ced96de413e8534b542f38089c65edff3 . Jetzt ist Ihre Datenbank mit Passwörtern nutzlos, da niemand Regenbogentabellen hat, die diesen Hash enthalten. Es ist rechnerisch nicht möglich, Regenbogentabellen für jedes mögliche Salz zu erstellen.

Jetzt haben wir die Bösen gezwungen, die Hashes wieder zu knacken. In diesem Fall wäre es ziemlich einfach zu knacken, da ich ein schlechtes Passwort verwendet habe, aber es ist immer noch besser, als dass er es in einer Zehntelsekunde nachschlagen kann!

Nun, seit dem Ziel of the salt ist nur , um zu verhindern, dass vorgenerierte Datenbanken erstellt werden. Es muss nicht in der Datenbank verschlüsselt oder verdeckt werden. Sie können es im Klartext speichern. Das Ziel ist es, den Angreifer zu zwingen, die Hashes zu knacken, sobald er die Datenbank erhalten hat, anstatt sie alle in einer Regenbogentabelle nachschlagen zu können.

Es gibt jedoch eine Einschränkung. Wenn der Angreifer leise auf ein Salt zugreifen kann, bevor in Ihre Datenbank eindringt, z. Durch ein Skript, das das Salz jedem anbietet, der danach fragt, kann er so einfach wie möglich einen Regenbogentisch für dieses Salz erstellen, wenn es keinen gäbe. Dies bedeutet, dass er stillschweigend das Salz Ihres Administratorkontos nehmen und eine schöne große Regenbogentabelle erstellen kann, sich dann in Ihre Datenbank hackt und sich sofort als Administrator anmeldet. Dies gibt Ihnen keine Zeit, um festzustellen, dass ein Verstoß aufgetreten ist, und keine Zeit, Maßnahmen zu ergreifen, um Schäden zu verhindern, z. Ändern Sie das Administratorkennwort / sperren Sie privilegierte Konten. Dies bedeutet nicht, dass Sie Ihre Salze verdecken oder versuchen sollten, sie zu verschlüsseln. Es bedeutet lediglich, dass Sie Ihr System so gestalten sollten, dass sie nur durch Einbruch in die Datenbank an die Salze gelangen können.

Eine weitere zu berücksichtigende Idee ist ein Pfeffer. Ein Pfeffer ist ein zweites Salz, das zwischen einzelnen Passwörtern konstant ist, aber nicht in der Datenbank gespeichert ist. Wir könnten es als H (Salz + Passwort + Pfeffer) oder KDF (Passwort + Pfeffer, Salz) für eine Schlüsselableitungsfunktion implementieren - wir werden darüber sprechen später. Ein solcher Wert kann im Code gespeichert sein. Dies bedeutet, dass der Angreifer Zugriff auf die Datenbank und den Quellcode (oder Webapp-Binärdateien im Fall von ASP .NET, CGI usw.) haben muss, um zu versuchen, die Hashes zu knacken. Diese Idee sollte nur verwendet werden, um andere Sicherheitsmaßnahmen zu ergänzen. Ein Pfeffer ist nützlich, wenn Sie sich Sorgen über SQL-Injection-Angriffe machen, bei denen der Angreifer nur Zugriff auf die Datenbank hat. Dieses Modell wird jedoch (langsam) seltener, wenn Benutzer zu parametrisierten Abfragen wechseln. Sie verwenden parametrisierte Abfragen, richtig? Einige argumentieren, dass ein Pfeffer Sicherheit durch Dunkelheit darstellt, da Sie nur den Pfeffer verdecken, was etwas wahr ist, aber es ist nicht zu sagen, dass die Idee unbegründet ist.

Jetzt sind wir in einer Situation Hier kann der Angreifer jeden einzelnen Kennwort-Hash brutal erzwingen, aber nicht mehr nach allen Hashes in einer Regenbogentabelle suchen und Klartext-Kennwörter sofort wiederherstellen. Wie verhindern wir jetzt Brute-Force-Angriffe?

Moderne Grafikkarten enthalten GPUs mit Hunderten von Kernen. Jeder Kern ist sehr gut in Mathematik, aber nicht sehr gut in der Entscheidungsfindung. Es kann Milliarden von Berechnungen pro Sekunde ausführen, aber es ist ziemlich schrecklich bei Operationen, die eine komplexe Verzweigung erfordern. Kryptografische Hash-Algorithmen passen in die erste Art der Berechnung. Daher können Frameworks wie OpenCL und CUDA genutzt werden, um den Betrieb von Hash-Algorithmen massiv zu beschleunigen. Führen Sie oclHashcat mit einer anständigen Grafikkarte aus, und Sie können einen Überschuss von 10.000.000.000 MD5-Hashes pro Sekunde berechnen. SHA-1 ist auch nicht viel langsamer. Es gibt Leute mit dedizierten GPU-Cracking-Rigs, die 6 oder mehr Top-End-Grafikkarten enthalten, was zu einer Cracking-Rate von über 50 Milliarden Hashes pro Sekunde für MD5 führt. Lassen Sie mich das in einen Zusammenhang bringen: Ein solches System kann ein 8-stelliges alphanumerisches Passwort in weniger als 4 Minuten brutal erzwingen.

Hashes wie MD5 und SHA-1 sind eindeutig viel zu schnell für diese Art von Situation. Ein Ansatz hierfür besteht darin, Tausende von Iterationen eines kryptografischen Hash-Algorithmus durchzuführen:

  Hash = H (H (H (H (H (H (H (H (H (H (H))) H (H (H (H (... H (Passwort + Salz) + Salz) + Salz) ...)  

Dies verlangsamt die Hash-Berechnung, ist aber nicht perfekt Einige befürworten die Verwendung von SHA-2 -Familien-Hashes, dies bietet jedoch nicht viel zusätzliche Sicherheit. Ein soliderer Ansatz besteht darin, eine Schlüsselableitungsfunktion mit einem Arbeitsfaktor zu verwenden. Diese Funktionen verwenden ein Kennwort, a Salz und ein Arbeitsfaktor. Der Arbeitsfaktor ist eine Möglichkeit, die Geschwindigkeit des Algorithmus an Ihre Hardware- und Sicherheitsanforderungen anzupassen:

  hash = KDF (Kennwort, Salt, workFactor)  

Die beiden beliebtesten KDFs sind PBKDF2 und bcrypt. PBKDF2 führt Iterationen eines verschlüsselten HMAC durch (obwohl es Blockchiffren verwenden kann), und bcrypt berechnet und kombiniert eine große Anzahl von Chiffretextblöcken aus der Blowfish -Blockchiffre. Beide machen ungefähr den gleichen Job. Eine neuere Variante von bcrypt namens scrypt funktioniert nach dem gleichen Prinzip, führt jedoch eine speicherintensive Operation ein, die das Knacken von GPUs und FPGA -Farmen aufgrund der Speicherbandbreite vollständig unmöglich macht Einschränkungen.


Update: Ab Januar 2017 ist der hochmoderne Hashing-Algorithmus der Wahl Argon2, der gewonnen hat Der Passwort-Hashing-Wettbewerb.


Hoffentlich gibt Ihnen dies einen schönen Überblick über die Probleme, mit denen wir beim Speichern von Passwörtern konfrontiert sind, und beantwortet Ihre Frage zur Salzspeicherung. Ich empfehle dringend, die "Links von Interesse" am Ende von Jaccos Antwort zur weiteren Lektüre sowie die folgenden Links zu lesen:

+1, Amen. Ich wünschte, wir könnten einen Index / ein Verzeichnis erstellen, das auf die guten Antworten auf häufig gestellte Fragen wie diese verweist. Dies gilt umso mehr, als die häufig gestellten Fragen auch recht unsichere Antworten finden.
Ich habe neulich über [Scrypt] (http://en.wikipedia.org/wiki/Scrypt) gelesen, ein KDF, das rechenintensiver sein soll als Bcrypt und PBKDF2. Es kann eine weitere erwägenswerte Option sein.
AiliqsgjdgCMT I mentioned scrypt in the second-to-last paragraph. The only downside with Scrypt is that there aren't as many libraries available, and there hasn't been much study of it. Right now I'd suggest bcrypt, since FPGA-based cracking engines are not a security concern for most people, but when scrypt has been studied carefully by a few cryptographers I'd be happy to tell people to use it instead.
Schauen Sie sich auch https://wiki.mozilla.org/Identity/CryptoIdeas/01-PBKDF-scrypt an
@Polynomial möglicherweise auch einen Link zu http://stackoverflow.com/questions/1645161/salt-generation-and-open-source-software/1645190#1645190 hinzufügen?
+1 für den Link zum Abschnitt ** Links of Interest ** der Antwort von @Jacco's.
Wenn Sie jedoch Faktoren wie SMS-Code implementieren, können Sie Ihre Passwörter sogar im Klartext speichern, da sie den SMS-Code noch durchlaufen müssen.
@matejkramny Nein. Das Hauptproblem besteht darin, dass Benutzer ihre Passwörter IMMER für andere Websites wiederverwenden. Sie sind verpflichtet, alle Ihnen erteilten Passwörter zu schützen.
Was ist der Grund, das Salz immer wieder hinzuzufügen, wenn das Passwort erneut gehasht wird?
@cooky451 Ich bin mir nicht sicher, was Sie fragen, aber ich schlage vor, eine neue Frage zu erstellen.
bcrypt ist auch aus Sicht eines Programmierers am einfachsten zu verwenden. Sie müssen sich nicht einmal selbst ein Salz einfallen lassen, da die Kryptobibliothek dies für Sie erledigt, da die Ausgabe das Salz enthält (in der Form $ $ $ <31 Zeichen Hash> `). Alle benötigten Informationen werden also in dem gespeichert, was Sie sich als Hash vorstellen können. Einfacher geht es nicht (obwohl es immer noch sehr sicher ist).
Nur zur Hervorhebung: Stellen Sie sicher, dass Sie für jedes Passwort ein *** anderes *** Salz verwenden!Wenn Sie für jedes Kennwort das gleiche Salz verwenden, wird der Rechenaufwand des Brute-Force-Algorithmus erheblich reduziert.Darüber hinaus kann ein Angreifer durch Vergleichen der Hashes feststellen, welche Benutzer dasselbe Kennwort verwenden. Dies kann sich auf Benutzer auswirken, die Kennwörter für mehrere Konten wiederverwenden.
Bouncycastle hat eine Verschlüsselungsimplementierung.
Wirklich gute Antwort.Aber Sie haben die Frage "Wo lagere ich das zufällige Salz?" Immer noch nicht beantwortet?Sie benötigen dieses zufällige Salz, um zu überprüfen, ob das eingegebene Passwort korrekt ist ... irre ich mich?
"Dies bedeutet, dass der Angreifer Zugriff auf die Datenbank und den Quellcode haben muss" - dies gilt nicht für den letzten Teil.In vielen (wenn nicht den meisten) Fällen werden Zeichenfolgen nicht verschlüsselt.Ein Hacker kann problemlos eine ausführbare Datei in einen Hex-Editor laden und die meisten Zeichenfolgen anzeigen.Sie können auch den Assemblycode durchlaufen, um auch Werte zu lesen.In vielen Fällen ist kein Quellcode erforderlich, und daher ist ein auf der Clientseite (d. H. Desktop-App) gespeicherter / berechneter Salz- und Pfefferwert nicht unmöglich.nur schwer.;) Speichern Sie sie nicht im Klartext.Verschleiern Sie diese Arten von Zeichenfolgen, um das Auffinden zu erschweren.
@JamesWilkins Ja, ich habe an PHP / Python-Webanwendungen gedacht, als ich das geschrieben habe.Ich werde bearbeiten, um den vielfältigeren Fall widerzuspiegeln, in dem die Web-App eine .NET- oder CGI-Binärdatei ist.
–1 - zu viel Text und beantwortet die Frage, wo Salz aufbewahrt werden soll, nicht (obwohl ich auf halbem Weg aufgehört habe zu lesen, weil der Text für die eigentliche Frage irrelevant ist)
Jacco
2012-07-20 12:37:05 UTC
view on stackexchange narkive permalink

Ein Salt soll nicht geheim sein, stattdessen funktioniert ein Salt, indem sichergestellt wird, dass das Hash-Ergebnis für jede verwendete Instanz eindeutig ist. Dies erfolgt durch Auswahl eines anderen zufälligen Salzwerts für jeden berechneten Hash.

Die Absicht des Salzes wird nicht beeinträchtigt, wenn es bekannt ist. Der Angreifer muss weiterhin jeden Hash separat angreifen. Daher können Sie das Salt einfach neben dem Hash-Passwort speichern.

Interessante Links :
Wie werden Passwörter sicher gehasht?
Password Hashing Salz + Pfeffer hinzufügen oder ist Salz genug?
Salzgenerierung und Open-Source-Software

Denken Sie daran, dass der Angreifer im Voraus eine Regenbogentabelle für dieses Salz erstellen kann, wenn das Salz ausgetreten ist (z. B. durch einen Fehler in Ihrem Code). Dies macht es für Sie schwierig, vorbeugende Maßnahmen zu ergreifen, wenn jemand Ihre Hashes später stiehlt, da er das Passwort sofort knacken kann (er hat bereits die Regenbogentabelle!) Und auf das Konto zugreifen kann.
@Polynomial Sie haben einen sehr guten Punkt gemacht. Vielleicht möchten Sie eine Antwort schreiben, die Ihre Angaben abdeckt? Ich würde es auf jeden Fall positiv bewerten, und es ist viel einfacher, so zu lesen.
@Terry Chia: Prepending ist häufiger.
Neben dem * Hash, Salted, Passwort *.
@Polynomial wo lagern Sie dann das Salz?Es scheint, wenn der Angreifer das Salz findet, das er in die Datenbank einbrechen kann?
lxgr
2012-07-20 12:38:24 UTC
view on stackexchange narkive permalink

Das Salz kann und sollte direkt neben dem gesalzenen und gehashten Passwort gespeichert werden. Darüber hinaus sollte das Salt pro Kennwort eindeutig sein.

Sein Zweck besteht darin, es unmöglich zu machen, eine durchgesickerte Kennwortdatenbank mithilfe vorberechneter Tabellen von Kennwort-Hash-Paaren anzugreifen.

Das funktioniert weil das Salz dem Angreifer erst bekannt wird, sobald er die tatsächlichen (gehärteten) Passwörter erhält; Dadurch wird ein vorberechneter Angriff unmöglich. (Wenn Sie kein eindeutiges Salt pro Kennwort verwenden, sondern ein globales, werden möglicherweise weiterhin vorberechnete Tabellen verwendet - obwohl diese speziell für das Salt Ihrer Anwendung vorberechnet werden müssten.)

Wenn Sie das Salt an einem anderen Ort als direkt neben dem Passwort aufbewahren, erhalten Sie möglicherweise zusätzliche Sicherheit, die jedoch fast den Zweck zunichte macht: Jedes Mal, wenn Sie ein Passwort validieren möchten, benötigen Sie sowohl das Salt- als auch das Hash-Passwort. Sie müssen also sowieso sehr "nah" sein (im arichtekturalen Sinne).

Tgr
2012-07-20 22:35:16 UTC
view on stackexchange narkive permalink

Das separate Speichern Ihrer Salze bietet zusätzliche Sicherheit, aber nicht viel. Schließlich sollte die Datenbank der am besten geschützte Ort der Anwendung sein. Wenn der Angreifer also Zugriff auf die Datenbank hat, hat er wahrscheinlich Zugriff auf andere Daten . Andererseits benötigen Sie für jeden Benutzer ein anderes Salz, was bedeutet, dass Sie viel Salz benötigen - es ist einfach nicht möglich, es außerhalb der Datenbank zu speichern.

Es wird üblich, ein zweites zu verwenden Stück Salz (manchmal auch Pfeffer genannt), das für alle Benutzer gleich ist und außerhalb der Datenbank gespeichert wird (möglicherweise in einer Umgebungsvariablen oder einer Art Konfigurationsdatei), sodass der Angreifer mit einfachem SQL keinen Zugriff darauf erhält Injektion. Dies erhöht die Sicherheit, aber wie oben erwähnt, erwarten Sie nicht zu viel davon und verwenden Sie bcrypt oder eine andere langsame Hashing-Methode, um sich gegen gestohlene Salze zu verteidigen.

user7610
2012-07-20 20:58:26 UTC
view on stackexchange narkive permalink

Ich möchte Ihre Aufmerksamkeit auf einen interessanten Artikel zum Titel Sicheres Speichern von Passwörtern

TL; DR p lenken >

Der Autor im Artikel erklärt Salz und Pfeffer. Außerdem argumentiert er / sie, dass Sie tatsächlich keine Kryptografie-Hashing-Funktion zum Speichern von Passwörtern verwenden möchten. Die zwei Hauptmerkmale eines Hashs sind, dass

  1. es einseitig sein sollte und.
  2. es sollte billig zu berechnen sein.
  3. ol>

    Offensichtlich stehen diese Anforderungen im Widerspruch zueinander. So wird ein Kompromiss geschlossen. Sie möchten nicht, dass der Angreifer seine Brute-Force-Versuche billig berechnen kann. Für eine bessere Sicherheit benötigen Sie daher tatsächlich eine Schlüsselableitungsfunktion, die einseitig ist und deren Berechnung länger dauert (z. B. 0,1 s).

    Es gibt Schemata / Implementierungen, wie dies zu tun ist. so genannte adaptive Schlüsselableitungsfunktionen , die gut untersucht und als sicher eingestuft werden (Autorennamen drei: PBKDF2, bcrypt, scrypt )

Zu diesem Zeitpunkt hat Ihre Antwort noch nichts auf den Tisch gebracht, daher sollten Sie den Artikel wahrscheinlich nur in einem Kommentar verlinkt haben. Es ist ein schöner Artikel - sehr gründlich und deckt alle Grundlagen ab. Ich werde ein Lesezeichen für zukünftige Referenz behalten!
Nice article! As far as I know, PBKDF2 is an Adaptive Key Derivation Function, but BCrypt and SCrypt are not; they are adaptive cost hashing algorithms. (The difference is subtle, but real).
Polynom: Sie haben recht. Ich war so gespannt darauf, den Artikel zu veröffentlichen (ich hatte ihn in meinen Lesezeichen und war aufgeregt, dass es endlich soweit war), dass ich nur Ihre Antwort überflog und den letzten Absatz komplett verpasste. Es tut uns leid
Andrew Smith
2012-07-21 00:41:49 UTC
view on stackexchange narkive permalink

Nun, Sie trennen Hash von Salz in zwei verschiedenen Feldern - ich hoffe, Sie verstehen die richtige Antwort. Und stellen Sie sicher, dass Sie über dieselbe Menge von beiden verfügen, z. B. 256-Bit-Salt und 256-Bit-Hash. Sie können die Sicherheit erhöhen, wenn Sie einen einfachen isolierten Salt-Server verwenden.

Warum Haschisch und Salz an verschiedenen Orten aufbewahren?
Siehe z. http://security.stackexchange.com/a/17449/5501
-1 'Ein 256-Bit-Hash' bringt Ihnen hier nichts an Gewicht. Der Algorithmus muss langsam sein. Das Trennen der verschiedenen Boxen für Hash und Salt Acros schafft eine ganz neue Reihe von Problemen. Halten Sie sich stattdessen einfach an die Best Practice.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...