Skip to main content
CheckTown
Dev-Tools

bcrypt: Wie Passwort-Hashing funktioniert und warum es wichtig ist

Veröffentlicht 7 Min. Lesezeit
In diesem Artikel

Was ist bcrypt?

bcrypt ist eine adaptive Passwort-Hashfunktion, die 1999 von Niels Provos und David Mazieres entwickelt wurde. Auf Basis der Blowfish-Chiffre bindet bcrypt einen Salt ein, um vor Rainbow-Table-Angriffen zu schützen, sowie einen konfigurierbaren Kostenfaktor (Work Factor), der steuert, wie rechenintensiv die Berechnung des Hashes ist. Dadurch ist bcrypt bewusst langsam — und genau diese Langsamkeit ist sein wichtigstes Sicherheitsmerkmal.

Anders als schnelle Hashfunktionen wie MD5 oder SHA-256 (für Datenintegrität ausgelegt) ist bcrypt speziell für die Passwortspeicherung konzipiert. Sein adaptiver Charakter bedeutet, dass sich der Kostenfaktor mit der Zeit erhöhen lässt, während die Hardware schneller wird, sodass Brute-Force-Angriffe selbst mit moderner Rechenleistung unpraktikabel bleiben.

So funktioniert bcrypt

Ein bcrypt-Hash enthält alle Informationen, die zur Überprüfung eines Passworts nötig sind, in einer einzigen Zeichenkette. Das Format lautet $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy, wobei jeder Teil eine bestimmte Bedeutung hat.

  • $2b$ — die Algorithmuskennung, die auf bcrypt Version 2b hinweist (die aktuell empfohlene Version)
  • 10$ — der Kostenfaktor (2^10 = 1024 Runden der Schlüsselableitungsfunktion)
  • N9qo8uLOickgx2ZMRZoMye — der 22 Zeichen lange, Base64-codierte Salt (128 Bit Zufälligkeit)
  • IjZAgcfl7p92ldGxad68LJZdL17lhWy — die 31 Zeichen lange, Base64-codierte Hash-Ausgabe

Kostenlos testen – keine Registrierung erforderlich

bcrypt-Hash generieren →

Den richtigen Kostenfaktor wählen

Der Kostenfaktor (auch Runden oder Work Factor genannt) bestimmt, wie viele Iterationen bcrypt intern durchführt. Jede Erhöhung verdoppelt die Rechenzeit. Ein Kostenfaktor von 10 bedeutet 2^10 = 1024 Iterationen; ein Kostenfaktor von 12 bedeutet 2^12 = 4096 Iterationen — viermal langsamer als 10.

Ziel ist es, das Hashing langsam genug zu machen, um Brute-Force-Angriffe abzuschrecken, und zugleich schnell genug, um das Nutzererlebnis beim Login nicht zu beeinträchtigen. Die meisten Sicherheitsexperten empfehlen für produktive Anwendungen einen Kostenfaktor zwischen 10 und 12.

  • Kostenfaktor 10 — hasht in etwa 100 ms; eine gute Ausgangsbasis für die meisten Webanwendungen
  • Kostenfaktor 12 — hasht in etwa 300-400 ms; empfohlen für Hochsicherheitsanwendungen wie im Banken- oder Gesundheitswesen
  • Kostenfaktor 14+ — hasht in 1 Sekunde oder mehr; für interaktive Logins in der Regel zu langsam, kann aber für Administratorkonten oder Schlüsselableitung angemessen sein

bcrypt im Vergleich zu anderen Hash-Algorithmen

Nicht alle Hash-Algorithmen eignen sich für die Passwortspeicherung. Schnelle Hashfunktionen wie MD5 und SHA-256 können auf modernen GPUs Milliarden von Hashes pro Sekunde berechnen und sind dadurch anfällig für Brute-Force-Angriffe. Passwortspezifische Funktionen wie bcrypt, scrypt und Argon2 sind bewusst langsam.

  • MD5/SHA-256 — auf Geschwindigkeit ausgelegt, nicht auf Passwortsicherheit; lassen sich auf einer GPU mit Milliarden von Hashes pro Sekunde per Brute Force knacken; niemals für Passwörter verwenden
  • bcrypt — CPU-lastig, seit 1999 bewährt, in jeder wichtigen Programmiersprache breit unterstützt; die Standardempfehlung für das Passwort-Hashing
  • Argon2 — gewann 2015 die Password Hashing Competition; speicherlastig (widersteht GPU-Angriffen besser als bcrypt); empfohlen für neue Projekte, sofern Bibliotheksunterstützung verfügbar ist

Typische Anwendungsfälle

bcrypt wird überall dort eingesetzt, wo Passwörter sicher gespeichert werden müssen. Der Ablauf aus Hashen und anschließendem Überprüfen ist das Standardmuster.

  • Benutzerregistrierung — hashe das Passwort mit bcrypt, bevor du es in der Datenbank speicherst; speichere niemals Passwörter im Klartext
  • Login-Überprüfung — hashe das eingereichte Passwort mit demselben Salt und Kostenfaktor und vergleiche es anschließend mit dem gespeicherten Hash über eine Vergleichsfunktion mit konstanter Laufzeit
  • Passwort-Migration — beim Umstieg von MD5/SHA auf bcrypt hashe die Passwörter beim nächsten erfolgreichen Login neu; markiere Konten, die noch das alte Hash-Format verwenden

Häufig gestellte Fragen

Kann ich den Kostenfaktor ändern, ohne Passwörter zurückzusetzen?

Ja. Prüfe bei jedem erfolgreichen Login, ob der gespeicherte Hash einen alten Kostenfaktor verwendet. Falls ja, hashe das Passwort (das dir beim Login im Klartext vorliegt) mit dem neuen Kostenfaktor neu und aktualisiere die Datenbank. Dies wird als opportunistisches Rehashing bezeichnet und ermöglicht eine schrittweise Migration, ohne Passwort-Rücksetzungen zu erzwingen.

Wie überprüfe ich ein Passwort gegen einen bcrypt-Hash?

Die bcrypt-Hash-Zeichenkette enthält die Algorithmusversion, den Kostenfaktor und den Salt. Die Überprüfungsfunktion extrahiert diese, hasht das zu prüfende Passwort mit denselben Parametern und vergleicht die Ergebnisse über einen Vergleich mit konstanter Laufzeit, um Timing-Angriffe zu verhindern. Verwende in Node.js bcrypt.compare() und in Python bcrypt.checkpw().

Sollte ich bcrypt oder Argon2 verwenden?

Beide sind ausgezeichnete Optionen. bcrypt ist seit über 25 Jahren bewährt und wird von Bibliotheken universell unterstützt. Argon2 ist neuer, speicherlastig (besser gegen GPU-Angriffe) und gewann die Password Hashing Competition. Für neue Projekte ist Argon2id die empfohlene Wahl, sofern deine Plattform es gut unterstützt. Für bestehende Projekte bleibt bcrypt vollkommen sicher, wenn es mit einem Kostenfaktor von 10 oder höher konfiguriert ist.

Verwandte Tools