Als ich zum ersten Mal ein Anmeldesystem verschickte, tat ich das, was mir jedes Tutorial aus dieser Zeit sagte: gespeichert md5($password) In der Benutzertabelle und weiter ging Es funktionierte, und es war still und leise eine Katastrophe Jahre des Aufbaus von auth in WordPress-Plugins und Laravel-Apps später, habe ich einen viel gesünderen Respekt für die Lücke zwischen & quot; der Passwortprüfung pässe" und & quot; die Passwörter sind sicher, wenn diese Datenbank durchsickert." Bcrypt ist das Tool, das den größten Teil dieser Lücke schließt, und es ist die Standardeinstellung in fast jedem Framework, für das ich mich erreiche Also habe ich ein erstellt bcrypt-generator auf Toolz.dev Das hashes ein Passwort mit einem Kostenfaktor, den Sie kontrollieren, überprüft ein Passwort gegen einen vorhandenen Hash, und tut alles in Ihrem Browser, so dass nichts, was Sie tippen, jemals irgendwo gesendet wird Dies ist die Anleitung dazu und um sich selbst zu verschlüsseln.
tl; dr: Bcrypt verwandelt ein Passwort in einen gesalzenen, absichtlich langsamen 60-Zeichen-Hash, sodass eine durchgesickerte Datenbank keine durchgesickerte Passwortliste ist. Die Toolz bcrypt-generator Hashes jedes Passwort mit einem einstellbaren Kostenfaktor (4 bis 31), überprüft ein Passwort anhand eines Hashs, den Sie einfügen, und zeigt die Version, die Kosten und das Salz, das es analysiert hat. Es erstellt den Standard
$2b$Format, das OpenBSD, PHPpassword_hashDie B-Crypt-Bibliotheken Laravel und Node akzeptieren alle und es läuft vollständig clientseitig.
Was ist bcrypt?
Bcrypt ist eine Passwort-Hashing-Funktion, die von Niels Provos und David Mazieres entwickelt und 1999 in ihrem USENIX-Artikel vorgestellt wurde "Ein zukunftsfähiges Passwortschema". Es basiert auf der Blowfish-Blockverschlüsselung, jedoch mit einer Wendung: Anstatt Daten zu verschlüsseln, läuft Blowfish's-Schlüsseleinrichtungsschritt immer und immer weiter, wobei das Passwort und ein zufälliges Salz als Schlüsselmaterial verwendet werden. Das Ergebnis ist ein einseitiger Hash, der kostengünstig einmal zu berechnen und teuer, um eine Milliarde Mal zu berechnen, was genau den Anforderungen für die Speicherung von Eigentumspasswörtern entspricht.
Dass " teuer auf purpose" idee ist das herzstück davon Ein allzweck-hash wie sha-256 ist so konstruiert, dass er schnell ist, weil prüfsummen und integritätsprüfungen geschwindigkeit wollen passwort-hashing will das gegenteil Wenn ein angreifer ihre datenbank stiehlt, steht nur noch zwischen ihnen und jedem klartext-passwort, wie lange es dauert, zu raten Ein schneller hash lässt eine moderne gpu milliarden von kandidaten pro sekunde testen; ein bcrypt-hash zu sinnvollen kostenobergrenzen, die bei einigen tausend pro sekunde pro kern liegen kampf durchsicker, völlig anderes ergebnis.
Bcrypt hat mehr als zwei Jahrzehnte überlebt, weil es die Grundlagen richtig gemacht hat und weil es anpassungsfähig ist Durch den Kostenfaktor kann der gleiche Algorithmus, der auf Hardware von 1999 abgestimmt wurde, ohne etwas anderes zu ändern, für Hardware von 2026 hochgewählt werden Es bleibt eine empfohlene Option in der OWASP Passwort-Speicher-Cheat-Blatt, und es ist die out-of-the-box-Standard in Laravel, Spring Security, und viele andere Stacks, in denen ich arbeite Wenn Sie den tieferen Hintergrund wollen, warum schnelle Hashes für diesen Job falsch sind, wird die Datenschutz Online-Tools Der Leitfaden behandelt die Argumentation, die die gesamte Branche zu langsamem, gesalzenem Haschen veranlasste.
Was beinhaltet ein bcrypt Hash?
Eines der schönsten Dinge an bcrypt ist, dass sich seine Ausgabe selbst beschreibt Nehmen Sie einen echten Hash:
$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW
Lesen Sie von links nach rechts, teilen Sie es auf den Dollarzeichen auf und es zeigt Ihnen alles, was Sie benötigen, um ein Passwort dagegen zu überprüfen:
| Feld | Beispiel | Bedeutung |
|---|---|---|
| Version | 2b |
Die bcrypt-Variante. 2b Ist das aktuell korrigierte OpenBSD-Format |
| kosten | 12 |
Der Faktor Arbeit. Der Schlüsselaufbau läuft 2^12 = 4096 Iterationen |
| Salz | R9h/cIPz0gi.URNNX3kh2O |
22 Zeichen benutzerdefinierter Base64, Dekodierung auf 16 zufällige Bytes |
| Verdauung | PST9/PgBkqquzi.Ss7KIUgO2t0jWMUW |
31 Zeichen, die die 23-Byte-bcrypt-Ausgabe kodieren |
Da das Salz und die Kosten live in der Schnur liegen, ist für die Überprüfung nichts anderes erforderlich. Wenn Sie einen Hash in die einfügen bcrypt-generator Verifizieren Sie den Modus, es liest die Kosten und das Salz direkt aus der Zeichenfolge, berechnet den Digest mit genau diesem Salz neu und vergleicht. Es gibt keine separate Salzsäule zu verwalten, was einer der Gründe ist, warum bcrypt so angenehm zu speichern ist: Es handelt sich um ein einzelnes undurchsichtiges Feld in Ihrer Benutzertabelle.
Das benutzerdefinierte Base64-Alphabet ist eine Anmerkung wert, da es Menschen auf den Kopf stellt. Bcrypt verwendet ./A-Za-z0-9, was eine andere Reihenfolge als Standard Base64 ist Ein bcrypt salt ist kein Standard Base64 string, also versuche nicht, es mit einem generischen Base64 Tool zu dekodieren und erwarte aussagekräftige Bytes Wenn du neugierig auf die überall sonst verwendete Standardvariante bist, wird die Basis64-kodierung Führer geht durch das normale Alphabet und wo es auftaucht.
Wie generiere ich einen bcrypt Hash?
Im Tool sind es drei Schritte: Passwort eingeben, Kosten auswählen, auf Generieren klicken Unter der Haube macht das Generieren eines Hashs mehr als es aussieht Zuerst wird mit der Web Crypto API ein kryptographisch starkes Zufallssalz von 16 Bytes erzeugt Dann führt bcrypt seinen teuren Schlüsselplan aus, sät Blowfish mit Passwort und Salz und iteriert 2^cost Zeiten Schließlich verschlüsselt er eine feste magische Zeichenfolge (& quot; OrpheanBeholderScryDoubt") 64 mal mit dem resultierenden Chiffrierzustand und Base64-kodiert die Ausgabe, Dieser ganze Tanz erzeugt den 60 Zeichen Hash.
Die häufigste Überraschung ist, dass das Hashing desselben Passworts zweimal zwei verschiedene Hashes ergibt Das ist richtig und beabsichtigt Jeder Hash bekommt sein eigenes zufälliges Salt, also zwei Benutzer, die beide auswählen hunter2 Am Ende völlig unterschiedliche gespeicherte Werte haben Ein Angreifer, der die Tabelle stiehlt, kann nicht erkennen, dass zwei Konten ein Passwort teilen, und kann eine vorberechnete Tabelle nicht kontoübergreifend wiederverwenden Wenn Sie einen bestimmten Hash zum Testen reproduzieren möchten, liefern Sie die vollständige Salt-Zeichenfolge und nicht die bloßen Kosten, was genau der Verifizierungsmodus intern tut.
In Ihrem Bewerbungscode stellen Sie das alles nie von Hand zusammen Sie rufen die Bibliothek an:
// PHP
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
// Node with bcrypt / bcryptjs
const hash = await bcrypt.hash(password, 12)
// Laravel
use Illuminate\Support\Facades\Hash;
$hash = Hash::make($password); // bcrypt by default
Das Toolz-Tool ist für die Momente rund um diesen Code gedacht: Überprüfung der geistigen Gesundheit, wie ein Hash zu einem bestimmten Preis aussieht, Generierung eines bekannten Hashs für einen Seeder oder eine Testvorrichtung oder Bestätigung, dass ein Hash, den Sie in einer Konfiguration gefunden haben, mit dem Passwort übereinstimmt, das Sie gefunden haben denken, dass es das tut.
Wie wähle ich einen Kostenfaktor?
Der Kostenfaktor ist der eine Knopf, über den man nachdenken muss, und die ehrliche Antwort ist & quot; messen, nicht kopieren." Die Faustregel von OWASP lautet, dass ein einzelner Hash irgendwo etwa eine Viertelsekunde auf Ihrer Produktionshardware dauern sollte. Dieses Ziel gleicht zwei gegensätzliche Kräfte aus: zu niedrig und Sie machen das Cracken billig, zu hoch und jeder legitime Login zahlt den Preis, was wichtig ist, wenn ein ausgelasteter Endpunkt bei jeder Anfrage hashing.
Weil die Kosten eine Zweierpotenz sind, verdoppelt jeder Schritt die Arbeit Kosten 11 ist doppelt so langsam wie Kosten 10, Kosten 12 sind viermal so langsam Auf typischer Serverhardware der 2020 er Jahre landen Kosten 10 bis 12 in der richtigen Nachbarschaft, weshalb Frameworks dort standardmäßig vorhanden sind Das Tool zeigt eine grobe Zeitschätzung, während Sie den Schieberegler ziehen, damit Sie spüren können, wie schnell die Kosten zusammenkommen, aber behandeln Sie das als relativen Leitfaden, nicht als Benchmark Ihres Servers Die tatsächliche Zahl hängt von Ihrer CPU ab, und die einzige Möglichkeit, es zu wissen, ist die Zeit password_hash Auf der Box, auf der es ausgeführt wird.
Ein praktisches Muster, das es zu wissen gilt: weil die Kosten in jedem Hash gespeichert sind, können Sie sie ohne Migration im Laufe der Zeit erhöhen. Bei einer erfolgreichen Anmeldung haben Sie den Klartext für einen Moment in der Hand, also prüfen Sie, ob die gespeicherten Hash' s-Kosten unter Ihrem aktuellen Ziel liegen und, wenn ja, erneut aufwärmen und aktualisieren. PHP legt dies direkt durch password_needs_rehash. Es bedeutet, dass Ihre Sicherheit mit der Hardware Schritt hält, ohne jemals einen Passwort-Reset zu erzwingen.
Bcrypt versus SHA-256, Argon2 und Scrypt
Der Vergleich, der am wichtigsten ist, ist bcrypt gegen einen einfachen schnellen Hash, und gegen die neueren speicherharten Funktionen, So reihen sie sich für die Passwortspeicherung ein:
| Funktion | Gesalzen | Langsam mit Absicht | Gedächtnishart | Gut für Passwörter? |
|---|---|---|---|---|
| MD5 / SHA-256 | Nein (von selbst) | kein | kein | Nein, viel zu schnell |
| bcrypt | Ja, eingebaut | Ja, abstimmbare Kosten | kein | Ja, empfehlenswert |
| Scrypt | ja | ja | ja | ja |
| Argon2id | ja | ja | ja | Ja, bevorzugt für neue Systeme |
Ein blanker SHA-256 eines Passworts, auch gesalzen, ist das falsche Werkzeug: Er ist auf Geschwindigkeit ausgelegt, so fällt eine durchgesickerte Datenbank gesalzener SHA-256-Hashes schnell auf eine GPU, wenn man nur einen schnellen Digest für eine Prüfsumme oder einen Cache-Schlüssel anstelle eines Passworts benötigt, ist das, was die Hash-generator Ist für, und die Unterscheidung ist der springende Punkt Argon2id, der Gewinner des Password Hashing Competition 2015, fügt Speicherhärte hinzu, die der benutzerdefinierten Hardware widersteht, die bcrypt beschleunigen kann, und es ist die erste Wahl für ein brandneues System, bei dem Sie die Laufzeit steuern Aber bcrypt ist nicht veraltet Es ist kampferprobt, es ist die Standardeinstellung in Tools, die ich täglich verwende, und es zu wählen ist eine fundierte Entscheidung, besonders wenn Ihr Framework es ausliefert Der Fehler, den Sie vermeiden sollten, ist nicht " bbcrypt statt Argon2, " es ist " ein schnelleres Hash anstelle eines beliebigen von ihnen. ", das Sicherheitspaar mit den Dienstprogrammen Entwicklerproduktivitätstools Führer hat die Karte.
Was ist mit der 72-Byte-Grenze und anderen Gotchas?
Bcrypt liest nur die ersten 72 Bytes des Passworts Alles Vergangene, was stillschweigend ignoriert wird, was bei normalen Passwörtern nie eine Rolle spielt, aber eine sehr lange Passphrase beißen kann, insbesondere eines mit Multi-Byte-UTF-8-Zeichen, bei dem die Byteanzahl schneller steigt als die Zeichenanzahl. Das Tool warnt Sie, wann immer Ihre Eingabe 72 UTF-8 Bytes überschreitet, sodass die Kürzung nie eine stille Überraschung ist. Einige Systeme umgehen das Limit, indem sie das Passwort mit SHA-256 und Base64 vor der Übergabe an bcrypt vorbehauen, wodurch ein beliebig langes Passwort in eine feste Kurzeingabe gefaltet wird; Wenn Sie dies tun, tun Sie es konsequent bei beiden.
Das andere Gotcha ist das Versionspräfix Du wirst sehen $2a$, $2y$, und $2b$ In freier Wildbahn. $2a$ War das Original, die $2y$ wurde ein PHP-spezifisches Tag eingeführt, nachdem in einigen Implementierungen ein Sign-Extension-Fehler gefunden wurde $2b$ Ist die aktuelle korrigierte OpenBSD Version Für neue Hashes wünscht man sich $2b$(was dieses Tool produziert Alle drei überprüfen identisch für gewöhnliche ASCII-Passwörter; die Unterschiede treten nur bei bestimmten Nicht-ASCII-Bytes nahe der 72-Byte-Grenze auf Wenn Sie ein Token in ein Tool einfügen, das auch strukturierte Anmeldeinformationen prüft, wie die JWT-DecoderBedenken Sie, dass ein bcrypt-Hash kein Token ist, den Sie zum Lesen einer Nutzlast dekodieren; Es handelt sich um einen einseitigen Digest, bei dem es nichts zu verraten gibt.
Wo der bcrypt-Generator in einen echten Workflow passt
Für sich genommen ist ein Hash nur die halbe Wahrheit, also sitzt der Mixer neben den anderen Anmeldeinformationen-Tools, die ich offen halte Wenn ich eine Testdatenbank setze oder ein Demokonto einrichte, generiere ich das Passwort selbst mit dem PasswortgeneratorÜberprüfen Sie, ob ein vernünftiger Festigkeitsbalken mit dem gelöscht wird Kennwortstärke-PrüfungUnd erst dann durch die laufen lassen bcrypt-generator Den gespeicherten Hash zu bekommen Diese Reihenfolge ist wichtig: Ein starkes Zufallspasswort hinter einem Kosten-12-bcrypt-Hash ist wirklich schwer zu knacken, während ein schwaches Passwort hinter demselben Hash immer noch einem Wörterbuchangriff unterliegt, da der Angreifer nur die Handvoll wahrscheinlicher Kandidaten erraten muss und nicht den gesamten Schlüsselraum. Der Kostenfaktor verschafft Ihnen Zeit; Gegen die Passwort-Entropie wird diese Zeit aufgewendet.
Der Verifizierungsmodus verdient sich seinen Platz beim Debuggen Wenn ein Login auf mysteriöse Weise bei der Inszenierung fehlschlägt, ist der schnellste Weg, das Problem zu isolieren, den gespeicherten Hash und das Passwort einzufügen, von dem Sie glauben, dass es korrekt ist, und zu sehen, ob sie übereinstimmen. Eine Übereinstimmung bedeutet, dass der Fehler vorgeschaltet ist, wie das Passwort die Prüfung erreicht; Eine Nichtübereinstimmung bedeutet, dass der gespeicherte Hash mit einem anderen Passwort oder einer verstümmelten Kodierung geschrieben wurde. Jede Antwort erspart Ihnen das Raten, und weil das Ganze lokal läuft, können Sie es mit einem echten Hash tun, der aus einer Datenbank gezogen wurde, ohne dass dieser Hash jemals Ihren Computer verlassen hat Es ist das gleiche client-seitige Prinzip hinter jedem Tool auf der Website, und für alles, was Anmeldeinformationen berührt, ist es keine Nice.
Häufig gestellte Fragen
Ist es sicher, ein echtes Passwort in diesem bcrypt-Generator zu hashen?
Ja, weil das Hashing komplett in Ihrem Browser passiert und nirgendwo etwas gesendet wird, können Sie dies im Netzwerk-Tab Ihrer Entwickler-Tools bestätigen: Das Generieren eines Hashs stellt keine Anfrage. Allerdings ist ein Browser-Tab kein Passwort-Manager. Vermeiden Sie es also, die Live-Anmeldeinformationen eines Produktionskontos in eine Webseite einzufügen, die Sie nicht erstellt haben, und schließen Sie die Registerkarte, wenn Sie fertig sind.
Warum erzeugt das gleiche Passwort jedes Mal einen anderen bcrypt-Hash?
Denn bcrypt generiert für jeden Hash einen neuen Random Salt und mischt diesen in das Ergebnis Das ist eine Funktion: Zwei Benutzer, die dasselbe Passwort wählen, bekommen immer noch unterschiedliche gespeicherte Hashes, sodass ein Angreifer keine freigegebenen Passwörter erkennen oder eine vorberechnete Tabelle wiederverwenden kann Die Verifizierung funktioniert immer noch, da das Salt innerhalb der Hash-Zeichenfolge selbst gespeichert ist.
Welchen Kostenfaktor sollte ich für bcrypt verwenden?
Nutzen Sie die höchsten Kosten, die Ihr Anmeldefluss ohne lästige Verzögerung tolerieren kann, was für die meisten Server der 2020er Jahre 10 bis 12 kostet. OWASP schlägt vor, dass ein einzelner Hash ungefähr eine Viertelsekunde auf Ihrer Produktionshardware dauern sollte. Da jeder Schritt die Arbeit verdoppelt, messen Sie auf Ihrem eigenen Server, anstatt eine Nummer zu kopieren, und erhöhen Sie die Kosten alle paar Jahre, wenn die Hardware schneller wird.
Kann ein bcrypt-Hash wieder auf das Passwort zurückgesetzt werden?
No. Bcrypt ist eine Einwegfunktion, daher gibt es keine mathematische Möglichkeit, einen Hash wieder in das ursprüngliche Passwort umzuwandeln. Der einzige Angriff ist das Raten: Ein Angreifer hashet Kandidatenpasswörter mit dem gleichen Salz und den gleichen Kosten und prüft nach einem Match. Deshalb ist der Kostenfaktor wichtig, weil er festlegt, wie teuer jede Vermutung ist und warum starke eindeutige Passwörter plus hohe Kosten das Raten unpraktisch machen.
Ist bcrypt 2026 noch sicher, oder soll ich auf Argon2 umsteigen?
Bcrypt gilt immer noch als sicher für die Passwortspeicherung und bleibt eine empfohlene Option im OWASP Password Storage Cheat Sheet. Argon2id, der Gewinner des Password Hashing Competition 2015, wird für neue Systeme bevorzugt, bei denen Sie die Laufzeit steuern, da es auch GPU- und Spezialhardware-Angriffen widersteht. Bcrypt ist eine gute Wahl, insbesondere wenn Ihr Framework es standardmäßig ausliefert; Der eigentliche Fehler besteht darin, einen schnellen Allzweck-Hash anstelle einer Passwort-Hashing-Funktion zu verwenden.
Was ist die 72-Byte-Grenze in bcrypt?
Bcrypt liest nur die ersten 72 Bytes des UTF-8 codierten Passworts, also werden alle darüber hinausgehenden Zeichen ignoriert Bei normalen Passwörtern spielt das nie eine Rolle, aber eine sehr lange Passphrase kann gekürzt werden, weshalb einige Systeme das Passwort mit SHA-256 vor bcrypt vorspülen Dieses Tool warnt Sie, wann immer Ihre Eingabe 72 Bytes übersteigt, sodass die Kürzung nie eine Überraschung ist.
Was bedeuten die Präfixe $2a$, $2b$ und $2y$?
Es sind Versions-Tags für das bcrypt-Ausgabeformat $2 a$ war das Original, $2y$ war ein PHP-spezifischer Fix für einen Sign-Extension-Bug, und $2 b$ ist die aktuell korrigierte OpenBSD-Version Für neue Hashes stimmt $2 b$, was dieses Tool produziert Alle drei verifizieren identisch auf ASCII-Passwörter; die Unterschiede treten nur bei bestimmten Nicht-ASCII-Bytes an der 72-Byte-Grenze auf.
Ist bcrypt dasselbe wie Verschlüsselung?
Nein. Verschlüsselung ist mit einem Schlüssel umkehrbar, so können verschlüsselte Daten wieder auf das Original entschlüsselt werden Bcrypt-Hashing ist einseitig und absichtlich langsam, und es ist nur für die Verifizierung gedacht: Sie müssen nie das Passwort wiederherstellen, nur um zu bestätigen, dass jemand das richtige eingegeben hat Das Speichern von Passwörtern mit Verschlüsselung statt Hashing ist ein Anti-Pattern, denn wer den Schlüssel hält, kann jedes Passwort wiederherstellen.



