Ich bin der Entwickler einer neuen Website in PHP gebaut und ich frage mich, was genau ist die beste Sache für Hashing verwenden. Ich habe md5 und sha1 angeschaut, aber gibt es etwas Sichereres.
Es tut mir leid, wenn dies eine nooby Frage ist, aber ich bin neu in PHP Security und ich versuche, meine Website so sicher wie möglich zu machen. Was ist ein Salz?
Danke,
WaseemPHP - MD5, SHA, Hashing Sicherheit
Antwort
First off md5 und sha1 zu Kollision Angriffen sein vunrable bewährt haben und Regenbogen leicht eingereicht werden können (wenn sie sehen, wenn Sie das gleiche ist in ihrer Datenbank von gemeinsamen Passwörtern Hash).
Derzeit gibt es zwei Dinge, die sicher genug für Passwörter sind, die Sie verwenden können.
Das erste Wesen sha512. sha512 ist eine Unterversion von SHA2. SHA2 wurde noch nicht als vunabate zu Kollisionsangriffen bewiesen und sha512 erzeugt einen 512-Bit-Hash. Hier ist ein Beispiel für wie sha512 verwenden:
<?php
hash('sha512',$password);
Die andere Option ist bcrypt genannt. bcrypt ist berühmt für seine sicheren Hashes. Seine wahrscheinlich die sicherste und am meisten anpassbare auch.
Bevor Sie verwenden beginnen bcrypt Sie, wenn Ihr Sever müssen überprüfen, hat es, Enter aktiviert diesen Code:
<?php
if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
echo "CRYPT_BLOWFISH is enabled!";
}else {
echo "CRYPT_BLOWFISH is not available";
}
Wenn es gibt, dass es der nächste Schritt dann aktiviert wird, ist einfach, alles was Sie brauchen, um tun, um bcrypt einen Passwort (Hinweis für mehr Anpassbarkeit müssen Sie dieses How do you use bcrypt for hashing passwords in PHP? sehen):
crypt($password, $salt);
nun Ihre zweite Frage zu beantworten. Ein Salt ist normalerweise eine zufällige Zeichenfolge, die Sie am Ende von alle Passwörter hinzufügen, wenn Sie sie hashen. Die Verwendung eines Salzes bedeutet, dass wenn jemand Ihre Datenbank bekommt, sie die Hashes für allgemeine Passwörter nicht überprüfen können. Die Überprüfung der Datenbank erfolgt über eine Rainbow-Tabelle. Sie sollten immer ein Salz beim Hashing verwenden !!
Hier sind meine Beweise für die SHA1 und MD5-Kollision Angriff Schwachstellen:
http://www.schneier.com/blog/archives/2012/10/when_will_we_se.html, http://eprint.iacr.org/2010/413.pdf, http://people.csail.mit.edu/yiqun/SHA1AttackProceedingVersion.pdf, http://conf.isi.qut.edu.au/auscert/proceedings/2006/gauravaram06collision.pdf und Understanding sha-1 collision weakness
Der ganze Zweck des Salzes von einem Angreifer zu verlangsamen eine Liste der vor Vergleich -generierte Hashes für den Ziel-Hash.
Anstatt einen Hashwert für jedes Klartextkennwort vorzuberechnen, muss ein Angreifer 16384 Hashwerte für jedes Klartextkennwort vorberechnen (2^7 * 2^7).
Das ein bisschen blass heute aber war ziemlich groß, wenn die Crypt-Funktion wurde zuerst entwickelt - die Rechenleistung zu vorberechnen, dass viele Kennwörter mal die Anzahl der Klartext-Passwort Sie vermuten (Wörterbuch) war ziemlich hoch.
Nicht so sehr heute, weshalb wir Dinge wie Shadow-Passwörter, andere Kern-Passwort-Funktionen neben Krypta und jeder Sysad wollen, dass Sie ein Passwort wählen, das nicht in einem Wörterbuch angezeigt würde.
Wenn die Hashes, die Sie generieren möchten, für Kennwörter sind, ist dies eine gut akzeptierte Methode zur Implementierung.
Danke für die Info! –
Ich habe keine Ahnung, wie Sie die Nummer 16384 bekommen haben und das Salzen ist so wichtig wie immer. Wenn Sie jedes Passwort mit einem anderen Salz kombinieren, muss ein Angreifer eine Rainbow-Tabelle für jedes einzelne Passwort erstellen und nicht eine Rainbow-Tabelle verwenden, um alle Passwörter zu erhalten. Das ist der Zweck des Salzes, es ist kein Geheimnis und es hilft nichts gegen Wörterbuchangriffe. – martinstoeckli
@martinstieckli - Ich glaube, dass Danilo zwei 7-Bit-ASCII-Zeichen als Salz angenommen hat, also 16.384 Möglichkeiten. Und ich denke, ihr Jungs "reden aneinander vorbei", d. H., Ihr beide sagt dasselbe. Anstelle einer Rainbow-Tabelle für "n" Passwörter sind es jetzt 16K Einträge für jedes der "n" Passwörter (oder, konzeptionell, eine 16K x "n" Matrix jetzt anstelle eines "n" Element Arrays). – Dan
Wenn Sie planen dies für Passwörter zu tun, dann verwenden MD5 oder SHA1 nicht. Sie sind bekannt dafür, schwach und unsicher zu sein, sogar mit Salz.
Wenn Sie sie für andere Zwecke verwenden (z. B. einen Hash einer Datei bereitstellen, um ihre Authentizität zu bestätigen, oder eine zufällige Hash-Datenbankspalte, um eine pseudozufällige Sortierreihenfolge bereitzustellen), sind sie in Ordnung (bis zu einem gewissen Punkt), aber nicht für Passwörter oder andere Dinge, die Sie als sicher betrachten würden.
Der aktuelle Best-Practice-Algorithmus für das Passwort-Hashing ist BCrypt mit passendem Salzen.
Und der beste Weg, BCrypt Passwort-Hashing in PHP zu implementieren, ist die Verwendung der neuen Passwort-API von PHP. Diese API wird in der nächsten Version von PHP, Version 5.5, die in den nächsten Monaten veröffentlicht werden soll, als eine Reihe von integrierten Funktionen vorgestellt. Die gute Nachricht ist, dass sie auch eine Abwärtskompatibilität für Benutzer der aktuellen Versionen von PHP (5.3 und 5.4) veröffentlicht haben. Obwohl PHP 5.5 noch nicht veröffentlicht wurde, können Sie die neue API sofort verwenden.
Sie können die Kompatibilitätsbibliothek von hier herunterladen: https://github.com/ircmaxell/password_compat
auch: Sie haben gefragt, was „Salz“ ist. Da ich es in dieser Antwort ein paar Mal erwähnt habe, sollte ich auch diesen Teil der Frage ansprechen.
Salt ist im Grunde eine zusätzliche Zeichenkette, die dem Passwort hinzugefügt wird, um es schwieriger zu knacken.
Zum Beispiel kann ein Angreifer im Voraus wissen, was der Hash-Wert für eine gegebene Passwort-Zeichenkette oder sogar für eine ganze Menge gegebener Passwort-Zeichenketten ist. Wenn er Ihre Hash-Daten erhalten kann und Sie kein Salz verwendet haben, kann er Ihre Hashes einfach mit seiner Liste bekannter Passwörter vergleichen, und wenn Ihre Benutzer ein einfach zu erratendes Passwort verwenden, werden sie es sein innerhalb von Sekunden geknackt, unabhängig davon, welche Hash-Methode verwendet wurde.
Wenn Sie dem Kennwort jedoch einen geheimen zusätzlichen String hinzugefügt haben, wenn Sie es hashen, stimmt der Hashwert nicht mit dem Standardhash für das ursprüngliche Kennwort überein, wodurch es für den Angreifer schwieriger wird, den Wert zu finden .
Die gute Nachricht ist, dass wenn Sie die API verwenden, die ich oben erwähnt habe, dann brauchen Sie sich nicht zu viele Gedanken über die Details zu machen, da die API das Salzen für Sie übernimmt.
Hoffe, dass hilft.
- 1. PHP Code MD5 Hashing Erklärung
- 2. Wie konvertiere ich Passwort Hashing von MD5 zu SHA?
- 3. Hashing Passwörter Techniken in PHP
- 4. MD5 Hashing in Delphi 2009
- 5. Algorithmus Komplexität und Sicherheit: MD5 oder SHA1?
- 6. MD5 Hashing gegeben einen Schlüssel in C#
- 7. Kürzester Hash? MD5/SHA. Erste Zeichen, Git
- 8. Welchen Zeichensatz haben MD5 und SHA?
- 9. MD5 Passwort-Hashing in Linq Abfrage
- 10. MD5-Hashing: Unicode-Objekte müssen vor
- 11. Warum PHP md5 unterscheidet sich von OpenSSL md5?
- 12. Wie kann ich MD5 Hashing für Passwörter in Laravel verwenden?
- 13. Kann MySQL (Windows) SHA-256 und HMAC-Hashing durchführen?
- 14. Gibt es einen erheblichen Mehraufwand durch verschiedene Versionen von sha Hashing mit (hashlib Modul)
- 15. Hash-Passwörter mit MD5 oder sha-256 C#
- 16. C# md5 und php md5 nicht mach
- 17. verwendet die java.util.UUID nach Hashing mit MD5 eine gute Option?
- 18. PHP Addieren MD5-Hashes?
- 19. Md5 Alternative in PHP?
- 20. Verwenden Sie SHA-512 und Salz, um ein MD5-Hash-Passwort zu hashen?
- 21. C# SHA-1 vs. PHP SHA-1 ... Verschiedene Ergebnisse?
- 22. Hashing in ms Zugriff
- 23. Kann ich überprüfen, was algo php session hashing verwendet?
- 24. Java md5, die PHP-Methode
- 25. Oracle's MD5 mit MD5 vergleichen
- 26. NodeJS md5 'bytestring' wie PHP md5 (str, true)
- 27. PHP und mySQL Login Sicherheit Zweifel
- 28. MD5 Hash in Silverlight
- 29. Warum wird SHA-1 als unsicher angesehen?
- 30. PHP preg_replace Sicherheit
Wofür verwenden Sie den Hash? Wie für Salz siehe http://en.wikipedia.org/wiki/Salt_(cryptography) –
Passwörter und Benutzernamen –
Hinweis: 'bcrypt' - das ist alles. – Leigh