Glossar

Was ist bcrypt?

bcrypt ist eine Passwort-Hashing-Funktion auf Basis der Blowfish-Blockchiffre, die ein eingebautes Salt und einen konfigurierbaren Kostenfaktor beinhaltet. Sie ist darauf ausgelegt, rechenintensiv zu sein – auf eine Art, die speziell der Beschleunigung durch GPUs und spezialisierte Hardware widersteht.

Auch bekannt als: bcrypt hash, Blowfish crypt

bcrypt wurde 1999 von Niels Provos und David Mazieres speziell für das Passwort-Hashing entwickelt, zu einer Zeit, als die meisten Systeme schnelle Hash-Funktionen wie MD5 oder SHA-1 verwendeten. Die zentrale Innovation war der Kostenfaktor – ein Parameter, der steuert, wie viele Iterationen des zugrundeliegenden Blowfish-Key-Setups durchgeführt werden. Jede Erhöhung des Kostenfaktors verdoppelt die Berechnungszeit und ermöglicht es Verteidigern, die Schwierigkeit mit schneller werdender Hardware zu skalieren.

Was bcrypt von PBKDF2 unterscheidet, ist die Resistenz gegen GPU-Beschleunigung. PBKDF2 verwendet HMAC-Operationen, die sich gut auf GPU-Architekturen abbilden lassen und Angreifern mit Consumer-GPUs massive Parallelität ermöglichen. bcrypts Blowfish-basierter Key-Schedule erfordert häufigen Zugriff auf eine 4-KB-Zustandstabelle, die während der Berechnung modifiziert werden muss. Dieses Speicherzugriffsmuster lässt sich auf GPUs nicht effizient parallelisieren und zwingt Angreifer zurück auf CPU-Geschwindigkeit.

bcrypt erzeugt einen 60-Zeichen-String, der Algorithmusversion, Kostenfaktor, Salt und Hash zusammen kodiert – was ihn selbstständig und portabel macht. Ein typischer bcrypt-Hash sieht so aus: $2b$12$..., wobei 12 der Kostenfaktor ist. Der aktuell empfohlene Mindestkostenfaktor ist 10 (etwa 100 ms pro Hash auf moderner Hardware), obwohl 12–14 für Anwendungen üblich ist, die etwas langsamere Login-Zeiten tolerieren können. bcrypt ist in nahezu jeder Programmiersprache verfügbar und bleibt einer der am weitesten verbreiteten Passwort-Hashing-Algorithmen.

Wie Vaulted bcrypt verwendet

Vaulted verwendet PBKDF2 statt bcrypt für die passphrasenbasierte Schlüsselableitung, weil PBKDF2 nativ über die Web Crypto API in Browsern verfügbar ist, bcrypt jedoch nicht. Die Web Crypto API stellt bcrypt nicht bereit, sodass seine Verwendung eine JavaScript-Implementierung erfordern würde, die die Sicherheitsvorteile nativer, zeitkonstanter Ausführung aufgibt. Für serverseitige Anwendungen, die Passwörter für die Authentifizierung hashen, bleibt bcrypt eine ausgezeichnete Wahl – für die clientseitige Schlüsselableitung im Browser ist PBKDF2 über Web Crypto jedoch der Standardansatz.