Wie benutzt man bcrypt zum Hashing von Passwörtern in PHP?
Jedes jetzt und dann höre ich den Rat "Use bcrypt für die Speicherung der Passwörter in PHP ist bcrypt Regeln".
Aber was ist bcrypt
? PHP bietet keine solche Funktionen, Wikipedia labert über eine Datei-Verschlüsselung Dienstprogramm und Web-Recherchen nur zeigen einige Implementierungen von Blowfish in verschiedenen Sprachen. Jetzt Blowfish ist auch in PHP über mcrypt
, aber wie hilft das bei der Speicherung von Passwörtern? Kugelfisch ist ein Allzweck-Chiffre, es funktioniert auf zwei Arten. Ob es verschlüsselt ist, kann entschlüsselt werden. Passwörter müssen ein one-way-Hash-Funktion.
Was ist die Erklärung?
Kommentar zu dem Problem
Diese Frage wurde angesprochen, die zuvor, und Ihr Vorschlag, mit Hilfe einer standard-Bibliothek ist ausgezeichnet. Sicherheit ist eine komplizierte Angelegenheit, und ein Paket entwickelt, von jemandem, der weiß, was zum Teufel Sie tun, sind Sie nur sich selbst helfen.
@eykanal - Seite nicht einmal erwähnt, bcrypt, viel weniger erklären, was ist.
@eykanal - ich Frage nicht, eine Erklärung, wie es funktioniert. Ich möchte nur wissen, was es ist. Denn was auch immer ich kann Graben, bis Sie auf dem Netz unter dem Stichwort "bcrypt", kann in keiner Weise für das hashing verwendet Passwörter. Nicht direkt jedenfalls und nicht in PHP. OK, jetzt verstehe ich, dass es wirklich die "phpass" - Paket, welches verwendet blowfish verschlüsseln Sie Ihr Passwort mit einem Schlüssel, der abgeleitet wird aus Ihrem Passwort (im wesentlichen verschlüsseln Sie das Kennwort mit sich selbst). Aber darauf verweisen, als "bcrypt" ist stark irreführend, und das ist, was ich wollte, zu klären, diese Frage.
@Vilx: ich habe mehr information hinsichtlich warum
bcrypt
ist ein one-way-hashing-Algorithmus gegen eine Verschlüsselung in meiner Antwort. Es gibt das ganze Missverständnis, dass bcrypt
ist nur Blowfish, wenn in der Tat es hat einen ganz anderen Schlüssel-Liste, die dafür sorgt, dass nur-text können nicht wiederhergestellt werden aus dem verschlüsselten text ohne Kenntnis des anfangszustands des-Chiffre (Salz, Runden, Schlüssel). Siehe auch Openwall Portable PHP password hashing framework (PHPass). Seine gehärtete gegen eine Reihe von gemeinsamen Angriffe auf Benutzer-Passwörter.
InformationsquelleAutor der Frage Vilx- | 2011-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
bcrypt
ist ein hashing-Algorithmus ist skalierbar mit der hardware (über eine konfigurierbare Anzahl von Runden). Seine Langsamkeit und mehreren Runden verhindert, dass ein Angreifer bereitstellen müssen massive Mittel-und hardware in der Lage sein, deine Passwörter zu knacken. Hinzu kommt, dass pro-Passwort Salze (bcrypt
ERFORDERT Salze) und Sie können sicher sein, dass ein Angriff praktisch unmöglich, ohne entweder lächerlich Betrag der Gelder oder hardware.bcrypt
verwendet die Eksblowfish - Algorithmus hash-Passwörter. Während die Verschlüsselung phase der Eksblowfish und Blowfish sind genau die gleichen, die Schlüssel Zeitplan phase der Eksblowfish sorgt dafür, dass jeder nachfolgende Zustand hängt davon ab, salt und key (Benutzer-Kennwort), und kein Staat kann vorausberechnete ohne das wissen beide. , Weil dieser wesentliche Unterschiedbcrypt
ist ein one-way-hashing-Algorithmus. Sie können abrufen des nur-text-Kennwort, ohne schon zu wissen, das Salz, Runden und Schlüssel (Passwort). [Quelle]Wie zu verwenden bcrypt:
Mit PHP >= 5.5-DEV
Passwort-hashing-Funktionen jetzt wurden auch direkt in PHP >= 5.5. Jetzt können Sie mit
password_hash()
zu erstellenbcrypt
hash von Passwort:Überprüfen, eine vom Benutzer bereitgestellte Passwort gegen ein vorhandenes hash, können Sie die
password_verify()
als solche:Mit PHP >= 5.3.7, < 5.5-DEV (auch RedHat PHP >= 5.3.3)
Es ist ein Kompatibilitäts-Bibliothek auf GitHub erstellt auf der Grundlage der Quell-code von der oben genannten Funktionen, die ursprünglich in C geschrieben, welches dieselbe Funktionalität bietet. Sobald die Kompatibilitäts-Bibliothek installiert ist, die Verwendung ist die gleiche wie oben (minus die Kürzel array-notation, wenn Sie noch auf der 5.3.x-Zweig).
Mit PHP < 5.3.7 (VERALTET)
Können Sie
crypt()
Funktion zum generieren von bcrypt-hashes von Eingabe-Zeichenfolgen. Diese Klasse kann automatisch generieren Salze und überprüfung der vorhandenen hashes gegen einen Eingang. Wenn Sie eine PHP-version größer oder gleich 5.3.7, ist es dringend empfohlen, verwenden Sie den built-in-Funktion oder die compat-Bibliothek. Diese alternative ist nur für historische Zwecke.Können Sie diesen code verwenden, wie diese:
Alternativ können Sie auch die Portable PHP-Hashing-Framework.
InformationsquelleAutor der Antwort
So, das Sie verwenden möchten bcrypt? Genial! Jedoch, wie in anderen Bereichen der Kryptographie, Sie sollte es nicht tun sich. Wenn Sie brauchen sich um nichts zu kümmern wie Schlüssel verwalten oder die Speicherung von Salzen oder dem erzeugen von Zufallszahlen, dann machst du es falsch.
Der Grund ist einfach: es ist so trivial einfach zu Schraube bis bcrypt. In der Tat, wenn man sich fast jedes Stück code auf dieser Seite, werden Sie feststellen, dass es gegen mindestens eine dieser gemeinsamen Probleme.
Face It, Kryptographie ist schwierig.
Lassen Sie es für die Experten. Lassen Sie es für Menschen, die Aufgabe ist es, die zur Erhaltung dieser Bibliotheken. Wenn Sie brauchen, um eine Entscheidung zu treffen, dann machst du es falsch.
Stattdessen nutzen Sie einfach eine Bibliothek. Mehrere vorhanden, je nach Ihren Anforderungen.
Bibliotheken
Hier ist eine Aufschlüsselung der einige der häufiger verwendeten APIs.
PHP 5.5 API - (Verfügbar für 5.3.7+)
Ab PHP 5.5, eine neue API für das hashing von Passwörtern eingeführt. Es ist auch ein shim-Kompatibilitäts-Bibliothek gepflegt (von mir) 5.3.7+. Dies hat den Vorteil, dass Sie ein peer-reviewed und einfach Verwendung Umsetzung.
Wirklich, es ist erwischt zu werden extrem einfach.
Ressourcen:
Zend\Crypt\Password\Bcrypt (5.3.2+)
Dies ist eine weitere API, die ähnlich wie die PHP 5.5 ein, und hat einen ähnlichen Zweck.
Ressourcen:
PasswordLib
Dies ist ein etwas anderer Ansatz zu Passwort-hashing. Anstatt einfach nur die Unterstützung bcrypt, PasswordLib unterstützt eine große Anzahl von hashing-algorithmen. Es ist vor allem nützlich in Kontexten, in denen Sie benötigen, um die Kompatibilität mit älteren und unterschiedlichen Systemen, die außerhalb Ihrer Kontrolle. Es unterstützt eine große Anzahl von hashing-algorithmen. Und wird unterstützt 5.3.2+
Referenzen:
PHPASS
Dies ist eine Ebene, die Unterstützung für bcrypt, sondern unterstützt auch einen ziemlich starken Algorithmus ist nützlich, wenn Sie keinen Zugang zu PHP >= 5.3.2... Es tatsächlich unterstützt PHP 3.0+ (wenn auch nicht mit bcrypt).
Ressourcen
Hinweis: nicht die PHPASS-alternativen, die nicht gehostet openwall, Sie sind verschiedene Projekte!!!
Über BCrypt
Wenn Sie bemerken, jede dieser Bibliotheken gibt eine einzelne Zeichenfolge. Das ist, weil, wie BCrypt intern arbeitet. Und es gibt eine TONNE von Antworten zu. Hier sind eine Auswahl, die ich geschrieben habe, dass ich gewonnen habe ' T copy/paste hier, aber den link zu:
md5
Passwörter auf bcryptWrap Up
Gibt es viele verschiedene Möglichkeiten. Welche Sie wählen, bleibt Ihnen überlassen. Allerdings würde ich HOCH empfehlen, dass Sie verwenden Sie eine der oben genannten Bibliotheken für den Umgang mit diesem für Sie.
Wieder, wenn Sie mit
crypt()
direkt, sind Sie wahrscheinlich etwas falsch machen. Wenn Ihr code ist mithash()
(odermd5()
odersha1()
) direkt, Sie sind fast definitiv etwas falsch.Nur eine Bibliothek...
InformationsquelleAutor der Antwort ircmaxell
Erhalten Sie eine Menge Informationen in Genug Mit Den Rainbow-Tabellen: Was Sie Wissen Müssen Über Sichere Passwort-Systeme oder Portable PHP password hashing framework.
Ziel ist die hash des Passworts mit etwas langsam, so jemand zu bekommen Sie Ihr Passwort-Datenbank wird bei dem Versuch sterben, um brute-force it (10 ms Verzögerung zu überprüfen, ein Kennwort ist nichts für Sie, viel für jemanden, der versucht, um brute-force). Bcrypt ist langsam und kann verwendet werden, einen parameter zu wählen, wie langsam es ist.
InformationsquelleAutor der Antwort Arkh
Können Sie erstellen ein one-way-hash mit bcrypt mit Hilfe von PHP -
crypt()
Funktion und die übergabe in einem entsprechenden Blowfish Salz. Das wichtigste von der ganzen Gleichung ist, dass A) der Algorithmus wurde nicht beeinträchtigt werden und B) Sie richtig Salz jedes Passwort. Nicht verwenden Sie eine Anwendung-breites Salz; öffnet Ihre gesamte Anwendung auf einen Angriff mit einem einzigen Satz von Rainbow-Tabellen.PHP - Crypt-Funktion
InformationsquelleAutor der Antwort coreyward
Edit: 2013.01.15 - Wenn dein server es unterstützt, verwenden Sie martinstoeckli Lösung statt.
Jeder will machen dieses komplizierter, als es ist. Die crypt () - Funktion macht die meiste Arbeit.
Beispiel:
Ich weiß, es sollte selbstverständlich sein, aber verwenden Sie bitte nicht "Passwort" als Passwort.
InformationsquelleAutor der Antwort Jon Hulka
Version 5.5 von PHP wird über eine integrierte Unterstützung für BCrypt, die Funktionen
password_hash()
undpassword_verify()
. Eigentlich sind dies nur ein Wrapper um die Funktioncrypt()
, und macht es einfacher, es richtig zu verwenden. Es kümmert sich um die Generierung von sicheren zufällige Salz, und bietet eine gute default-Werte.Der einfachste Weg, verwenden Sie diese Funktionen:
Dieser hash-code wird das Passwort mit BCrypt (Algorithmus
2y
), generiert einen zufälligen salt-Wert aus dem OS random source, und verwendet die Standard-Kosten-parameter (im moment 10). Die zweite Zeile prüft, ob die vom Benutzer eingegebenen Passwort passt einer bereits gespeicherten hash-Wert.Sollten Sie ändern möchten die Kosten-parameter, die Sie tun können, wie diese, die Erhöhung der Kosten-parameter um 1, verdoppelt die benötigte Zeit zur Berechnung der hash-Wert:
Im Gegensatz zu den
"cost"
parameter, ist es am besten weglassen"salt"
parameter, da die Funktion bereits tut sein bestes, um erstellen Sie eine kryptografisch sicher Salz.Für die PHP-version 5.3.7 oder höher, es existiert ein compatibility pack, vom gleichen Autor, der die
password_hash()
Funktion. Für PHP vor Version 5.3.7 gibt es keine Unterstützung fürcrypt()
mit2y
, die unicode-sichere BCrypt-Algorithmus. Man könnte ersetzen Sie es stattdessen mit2a
, das ist die beste alternative für frühere PHP-Versionen.InformationsquelleAutor der Antwort martinstoeckli
Alternative ist die Verwendung von scrypt, speziell entwickelt, um überlegen zu sein bcrypt von Colin Percival in seine Papier. Es ist ein scrypt PHP-Erweiterung in PECL. Im Idealfall, dieser Algorithmus würde gerollt werden in PHP, so dass es angegeben werden kann, für die password_* Funktionen (im Idealfall als "PASSWORD_SCRYPT"), aber das ist noch nicht da.
InformationsquelleAutor der Antwort Synchro
Aktuelle denken: hashes werden sollte die niedrigste verfügbare, nicht der Schnellste. Dieser unterdrückt rainbow-table Angriffe.
Auch mit, aber vorsorglich: Ein Angreifer sollte nie haben unbegrenzten Zugriff auf Ihre login-Bildschirm. Um zu verhindern, dass: einrichten einer IP-Adresse-tracking-Tabelle, die Datensätze alle Treffer zusammen mit dem URI. Wenn mehr als 5 versuche zu login kommen aus der gleichen IP-Adresse in einem fünf-Minuten-Periode, block mit Erklärung. Ein sekundärer Ansatz, um eine zwei-Ebenen-Passwort-Schema, wie Banken zu tun. Putting ein lock-out für Ausfälle im zweiten Durchgang steigert die Sicherheit.
Zusammenfassung: verlangsamen den Angreifer mit Zeit-Konsum von hash-Funktionen. Auch block auf zu viele Zugriffe auf Ihre login-Daten, und fügen Sie ein zweites Kennwort tier.
InformationsquelleAutor der Antwort FYA
Für OAuth 2 Passwörter:
InformationsquelleAutor der Antwort Shemeer M Ali