Sicheres Speichern von Passwörtern • www.martinstoeckli.ch • 9/13

Bcrypt (Blowfish-Hash-Funktion)

Das Salzen macht es definitiv schwieriger, an die Passwörter ranzukommen, aber das Problem mit den schnellen Grafikkarten haben wir immer noch. Pro Passwort drei Sekunden Rechenzeit aufzuwenden, ist wohl kein echtes Hindernis.

Blowfish

Aus genau diesem Grund wurde der Bcrypt Hash erfunden. Dieser stammt vom Verschlüsselungs-Algorithmus Blowfish ab, ist aber eine echte Hash-Funktion.

💡 Heutzutage sollte man auch Argon2 in Betracht ziehen.

Zum Vergleich: Schon bei 1 ms Rechenzeit pro Hash-Wert, benötigt die Erstellung unserer Beispiel Rainbow-table 8 Monate statt 0.4 Sekunden.

Der Kostenfaktor

coin

Der Kostenfaktor bestimmt, wie oft hintereinander die Bcrypt Funktion aufgerufen wird. Der Kostenfaktor wird mit Basis 2 potenziert, das heisst, wenn wir den Kostenfaktor um 1 erhöhen, so verdoppelt sich die Berechnungszeit.

$anzahlRunden = 2 ^ $kostenfaktor

Speichern in der Datenbank

Natürlich muss nun der Kostenfaktor ebenfalls, wie das Salz, in der Datenbank gespeichert werden. Dafür können wir aber bei jedem Login den Kostenfaktor anpassen, und einen neuen Hash Wert speichern.

Oft werden Hash-Werte mit einem Utility wie crypt (Unix) berechnet, diverse Sprachen wie PHP haben das Format übernommen. Dieses schreibt den verwendeten Algorithmus, den Kostenfaktor, das Salt und den Hashwert in einen 60 Zeichen langen String. Dieser String hat dann bequem in einem Datenbankfeld Platz.

$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa

Andere gute Algorithmen

Es gibt noch andere Algorithmen die sich zm Speichern von Passwörtern eignen, alle bieten einen Kostenfaktor. Empfohlen sind Argon2, SCrypt, BCrypt, und der schon etwas ältere PBKDF2.