Md5 salt, php Passwort
Ich weiß, dass es alots von Fragen zu diesem Thema, aber ich wirklich brauchen, zu Fragen.
Heute habe ich ' ve wurden arbeiten an der Verschlüsselung der Passwörter mit md5.
Also, was ich getan habe, ist.
Bekam ich 4 Salze. (Sie ändert sich je nach user-Werte)
- von E-Mail-id und substr dann md5 Ihnen
- von E-Mail und id, substr anderen Positionen
- eine lange Zeichenkette, substr und dann md5
- anderen lange Zeichenkette, substr und dann md5
Dann habe ich die md5 salt1 und 3 und das Passwort mit dem salt 2 und salt4
Danach habe ich das Kennwort ändern automatisch, wenn ein Benutzer änderungen seiner E-Mail-oder seine id geändert.
Was denken Sie über diese?
Don ' T roll your own crypto-Schema. Verwenden Sie eine gut getestet und analysiert Systeme, wie
Sie könnte genauso gut passieren das Salzen durch einen blender 🙂
crypt
, die bieten auch eine variable Anzahl von Runden.Sie könnte genauso gut passieren das Salzen durch einen blender 🙂
InformationsquelleAutor Kilise | 2013-01-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nichts.
MD5 ist gebrochen und schlecht.
Mit der Mailadresse als Salz ist eine gute Idee. Aber mit md5 ist es nicht. Verwenden Sie stattdessen bcrypt, scrypt oder pbkdf2.
Nicht erfinden Ihre eigenen ecryption, es sei denn, Sie wirklich wissen, was Sie tun, und glauben Sie mir, Sie nicht
verwenden Sie bcrypt stackoverflow.com/questions/4795385/... Die Frage ist, wie hoch sollten die Kosten sein? Wenn Sie mich Fragen, so hoch, dass Ihr server muss 500ms-1sek um den hash zu berechnen. en.wikipedia.org/wiki/Bcrypt
Mit dem E-mail-Adresse ist nicht eine gute Idee für das Salzen, weil das Salz sollte eindeutig sein für JEDEN hash. Also, wenn der Benutzer sein Passwort ändern, ein neues Salz sollte erstellt werden.
Nun habe ich bereits gemacht, dass das Salz ändert sich, wenn seine E-Mail ist gettting geändert, nicht alles lösen dann?
Wenn der Benutzer sein/Ihr Passwort ein neuer hash erstellt würde, mit dem gleichen Salz. Plus, kann ein Angreifer pre-erstellen von hash-Tabellen mit errieten die E-Mail-Adressen, die verwendet werden könnten, auf mehrere Seiten, die ich Schätze, das ist, nit-Kommissionierung, aber für mich ist das, was crypto ist: großes Augenmerk auf die scheinbar belanglosen.
InformationsquelleAutor Fabian Blechschmidt
Lassen Sie uns zuerst definieren wir ein paar Begriffe.
Verschlüsselung ist beim Kodieren einer Nachricht so, dass es nicht gelesen werden kann. Verschlüsselung beinhaltet eine Klartext, ein Chiffre und ein Schlüssel. Es ist, wie wenn man ein Buch (Klartext, plaintext) in einen verschlossenen Raum (Chiffre), die können nur geöffnet werden mit einem bekannten Werkzeug (a-Taste). Es gibt viele Arten von Verschlüsselung, aber das ist eine einfache Beschreibung. Verschlüsselung ist zwei-Wege, das heißt, Sie können codieren und decodieren der Nachricht.
Kryptografische hash ist, wenn Sie jede Art von Daten und erzeugen Sie eine Feste Größe Wert (in der Regel als eine hash oder eine digest). Kryptographische hashes sind unidirektional, was bedeutet, dass Sie nicht den Prozess umkehren.
Einen Salz ist ein eindeutiger string, oder eine Sammlung von bits, ähnlich wie ein nonce (eine eindeutige Nummer, die nur einmal verwendet werden). Salze werden nur verwendet, um machen es unmöglich für einen cracker-Prozess eine Liste von hashes. Sie sollen nicht verwendet werden als ein Geheimnis (d.h. wie einen kryptografischen Schlüssel). Der einzige Grund, warum Menschen in der Regel sprechen über die Zufälligkeit, wenn es um die Salze ist, weil Sie möchten, erzeugen ein einzigartiges Salz (wenn die Zufälligkeit ist nicht groß genug, Sie kann bekommen Kollision Salze, zum Beispiel).
Okay, nun, wie sollten Sie hash ein Passwort.
Relativ sichere Art und Weise der Vermischung das Passwort ist zu einfach tack auf einen eindeutigen hash auf ein Passwort, und speichern Sie dann das Salz mit dem Kennwort:
Dass ist ein guter Weg, es zu tun, wenn Ihre website nicht abgerufen werden keinerlei sensible Daten von seinen Nutzern.
Wenn Sie sich mit sensiblen Daten, oder wenn Sie nur wollen, um sicherzustellen, dass Sie tun alles, um Sie zu halten Sachen sicher, dann gibt es eine PHP-Funktion, die den Hash für Sie. Es heißt
crypt()
(Lesen Sie die Dokumentation zu lernen, wie es funktioniert). Hier ist ein Beispiel, wie hash ein Passwort über die Funktion:Wird sicher hash ein Passwort.
Die Sache zu realisieren ist, dass die
crypt()
Funktion ist viel sicherer als alles, was Sie mit oben kommen kann (es sei denn, Sie sind ein Spezialist auf dem Gebiet).In neueren Versionen von PHP (5.5.0+) es ist ein Passwort-hashing-API das macht es noch einfacher hash ein Passwort.
Gibt es auch verschiedene hashing-Bibliotheken gibt. PHPass Anklang.
crypt()
Funktion. Achten Sie darauf, Lesen Sie die Dokumentation gründlich durch, bevor Sie mit der Funktion wenn. Es funktioniert in einer etwas seltsame Art und Weise, wo das Salz muss vorangestellt werden, die mit verschiedenen Informationen."Das ist ein guter Weg, es zu tun, wenn Ihre website nicht abgerufen werden keinerlei sensible Daten von seinen Nutzern." NEIN, es ist nicht. Benutzer der Wiederverwendung gibt es Passwörter. Sie haben, um sicherzustellen, dass wenn Sie die Datenbank gehackt wird, sind die Passwörter nicht bruteforced. Die meisten Passwörter werden gebaut, mit einem einfachen Algorithmus, einschließlich der Namen der website (im besten Fall). Aber oft können Sie sich einloggen mit dem Passwort in twitter, facebook oder paypal!
M. Olsen: erkennst du, was
07
aus Ihrer Antwort ($2y$07$
) bedeutet? Ist es nicht im Zusammenhang mit "don' T Doppel-hashing"?Es ist nicht double hashing, es ist der Schlüssel stretching/Stärkung verwendet, um Rissbildung nicht möglich ist.
M. Olsen: "es ist der Schlüssel stretching/Stärkung" --- mit was? Runden, die in der Tat Schleifen. Ich werde sogar zitieren, das Handbuch für Sie "Die zwei-stellige Kosten-parameter ist die Basis-2-Logarithmus der iteration count". Gedanken?
InformationsquelleAutor Sverri M. Olsen
Ist es schlecht, weil es verwendet MD5.
MD5 ist eine sehr schnelle Bedienung. Es kann ausgeführt werden, Milliarden mal pro Sekunde auf die Grafikkarten-hardware. Es gilt als schlechte Praxis, um es für alle Passwort-bezogene Dinge.
Bcrypt verwenden. Verwenden Sie einen zufälligen salt. Verwenden Sie die kommende PHP-API für hashing, Verifikation und Aufbereitung Passwörter. Diese include-Datei implementiert, die es für die Versionen ab PHP 5.3.7: https://github.com/ircmaxell/password_compat
Lesen Sie die Dokumentation: rufen Sie einfach
password_hash()
mit dem Kennwort zum erstellen eines neuen hash. Rufen Siepassword_verify()
mit dem Benutzer-Passwort und dem gespeicherten hash, um zu sehen, ob es richtig ist. Optional können Sie überprüfen, ob der hash muss aktualisiert werden, da Sie einige änderungen vorgenommen, um die hashing-Konfiguration.Ihre hashing-Schema ist sehr verworren: es ist unwahrscheinlich, dass jemand erraten, wie Sie erstellt Ihre hashes. Allerdings, wenn jemand hat eine Kopie Ihres Algorithmus und Ihre Passwörter, dann wäre es einfach umkehren die hashes zurück zum text. Wie @Sven schon sagte, MD5 ist auch schnell, um zu verhindern, dass dieser Angriff. Eine gute crypto-System (bcrypt, etc) dauert eine lange Zeit, um zu arbeiten, so dass selbst wenn Sie Ihre Passwörter gestohlen werden (und das hashing-Schema schon bekannt ist), wäre es unpraktisch zu versuchen, reverse die hashes.
Ist es wirklich egal, wie dunkel die Regelung ist? Die Salze sind immer substringed dann gehasht. dann sind Sie immer gehashte Passwort mit dem in einem anderen Schema. Es wäre also sicher. Und natürlich wäre es einfach, wenn jemand eine Kopie des Algorithmus. Korrigieren Sie mich, wenn ich falsch Liege
Warum die Mühe mit der Erstellung und Aktualisierung von hashes und salts, wenn Sie können die beste Sicherheit zum Nulltarif mit der Bibliothek, die ich vorgeschlagen?
InformationsquelleAutor Sven
Ich persönlich nicht empfehlen, mit der Benutzer-id und seiner E-Mail in der Hash des Passworts.
Sie kann sich mit den Kennwort:
Das Salz muss nur eindeutig sein, Zufälligkeit neben dem Punkt, wie das Salz angewendet wird, macht kaum einen Unterschied; und double hashing kann die Dinge WENIGER sicher.
Ja, ja, aber der user ist zu Fragen, md5, die ich persönlich nicht empfehlen, aber falls er nicht PHP 5.3+ oder mcrypt installiert, kann er zumindest SHA1 -...
MD5 ist in Ihrer Antwort -, dass gesehen werden kann, als eine Empfehlung. Sie haben nicht vorgeschlagen, alles andere lableded "besser".
M. Olsen: Sie haben gesagt, es ist WENIGER sicher, nicht mir. Sie verbreiten die Informationen, die Sie nicht beweisen kann. Warum denkst du es ist richtig? Wenn jemand schreibt etwas, ohne Beweise - es bedeutet nicht, sollten Sie ihm Vertrauen. Sicherheit ist eine schrecklich präzise Sache ist die: wenn etwas angegeben ist - kann es sein, und sollte bewiesen werden, ansonsten ist es ein Schwachsinn.
InformationsquelleAutor Plamen Nikolov
eine einfache Möglichkeit wäre die Generierung einer zufälligen salt für jeden user und hash deines Passworts, wie diese
Für hohe Sicherheits-hash, können Sie überprüfen Sie diesen link, die erklären, wie zu implementieren PBKDF2:
http://crackstation.net/hashing-security.htm#phpsourcecode
ich weiß , es war nur eine einfache Antwort für basic implementatio und ein link zur besseren Erklärung auf hoher Ebene der Umsetzung.
InformationsquelleAutor Julien Rollin