bcrypt Generator & Verifier

Passwort-Hashes nach bcrypt erzeugen und prüfen – und dabei sehen, woraus so ein Hash eigentlich besteht. Alles läuft lokal in deinem Browser.

12

Aktueller Standard, eingeführt 2014 mit OpenBSD 5.5. Behebt einen Überlauf bei Passwörtern ab 256 Byte. Was moderne Bibliotheken erzeugen.

Alles läuft lokal in deinem Browser – weder Passwort noch Hash werden hochgeladen.

Wie ein bcrypt-Hash aufgebaut ist

Ein bcrypt-Hash ist keine undurchsichtige Zeichenkette, sondern ein klar gegliedertes Format – das sogenannte Modular Crypt Format. Er ist immer 60 Zeichen lang und besteht aus vier Teilen, die durch $ getrennt sind:

$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewKyJ.NfBu4nEqfa
└──┘└─┘└────────────────────┘└─────────────────────────────┘
  │  │            │                         │
  │  │            │                         └── Digest (31 Zeichen = 23 Byte)
  │  │            └── Salt (22 Zeichen = 16 Byte Zufall)
  │  └── Kostenfaktor: 2^12 = 4.096 Runden
  └── Versionskennung

Die Versionskennung sagt, nach welcher Spielart gerechnet wurde. $2b$ ist der heutige Standard, $2a$ die lange übliche Vorgängerform und $2y$ eine von PHP eingeführte Kennung. Für Passwörter, wie bcrypt sie verarbeitet, rechnen alle drei identisch.

Der Kostenfaktor ist der wichtigste Wert überhaupt: Er ist ein Zweierlogarithmus. Bei 12 durchläuft die Schlüsselableitung 212 = 4.096 Runden. Jeder Schritt nach oben verdoppelt die Rechenzeit – für dich einmal beim Anmelden kaum spürbar, für jemanden, der Milliarden Passwörter durchprobieren will, der entscheidende Kostenblock.

Das Salt sind 16 Byte Zufall, kodiert in bcrypts eigenem Base64-Alphabet (./A–Za–z0–9) – nicht dem aus RFC 4648. Es steht offen im Hash und ist auch kein Geheimnis: Seine Aufgabe ist, dass zwei Nutzer mit demselben Passwort trotzdem völlig verschiedene Hashes bekommen und vorberechnete Rainbow-Tables wertlos sind.

Der Digest schließlich ist das eigentliche Ergebnis: 23 der 24 berechneten Byte. Dass das letzte Byte wegfällt, ist eine Eigenheit der ursprünglichen OpenBSD-Implementierung, die bis heute Teil des Formats geblieben ist.

Welchen Kostenfaktor sollte ich wählen?

Die verbreitete Empfehlung liegt heute bei mindestens 10, üblicherweise 12. Der richtige Wert hängt aber an deiner Hardware, nicht an einer festen Zahl: Als Faustregel wählt man den höchsten Kostenfaktor, bei dem ein Anmeldevorgang auf dem Produktivserver noch etwa 250 bis 500 Millisekunden dauert. Weil Hardware schneller wird, sollte dieser Wert alle paar Jahre nachgezogen werden – gute Systeme rehashen ein Passwort automatisch beim nächsten erfolgreichen Login.

Häufige Fragen

Kann man einen bcrypt-Hash zurückrechnen?
Nein. bcrypt ist keine Verschlüsselung, sondern eine Einwegfunktion – es gibt keinen Schlüssel, mit dem sich das Passwort zurückholen ließe. Prüfen heißt immer: das eingegebene Passwort mit demselben Salt und demselben Kostenfaktor erneut durchrechnen und die Ergebnisse vergleichen. Genau das macht der Prüf-Modus oben.

Warum bekomme ich für dasselbe Passwort jedes Mal einen anderen Hash?
Weil bei jeder Berechnung ein neues zufälliges Salt verwendet wird. Das ist gewollt und kein Fehler – der Prüf-Modus erkennt das Passwort trotzdem, weil das Salt ja im Hash mitgeliefert wird.

Warum wird mein langes Passwort abgeschnitten?
bcrypt verarbeitet nur die ersten 72 Byte. Alles darüber hinaus fließt nicht mehr ins Ergebnis ein – zwei Passwörter, die sich erst ab Byte 73 unterscheiden, ergeben denselben Hash. Bei Umlauten und Emojis ist das schneller erreicht, als es aussieht, weil ein Zeichen mehrere Byte belegt. Wer sehr lange Passphrasen zulassen will, ist mit Argon2 besser bedient.

bcrypt oder Argon2?
Argon2id gilt heute als erste Wahl für neue Systeme, weil es zusätzlich zur Rechenzeit auch den Speicherbedarf hochschraubt und damit Angriffe mit Grafikkarten und Spezialhardware ausbremst. bcrypt ist deshalb aber nicht unsicher: Es ist seit 1999 im Einsatz, gründlich untersucht und für bestehende Systeme völlig in Ordnung. Für Argon2 gibt es ein eigenes Tool auf argon2.rellit.de.

Werden meine Eingaben hochgeladen?
Nein. Das Rechnen erledigt ein WebAssembly-Modul direkt in deinem Browser. Es gibt keinen Server, der dein Passwort oder deinen Hash zu sehen bekäme. Trotzdem gilt: Echte Produktiv-Passwörter gehören grundsätzlich in kein Web-Tool, auch nicht in dieses.