© saicle/Shutterstock.com
Richtig hashen mit Node.js

Node.js-Module: bcrypt


Wenn es um das Speichern von Passwörtern geht, sind sich alle einig: Sie sollten niemals in Klartext abgelegt werden. Dann aber gehen die Meinungen auseinander: Welchen Hash-Algorithmus sollte man verwenden?

Hash-Algorithmen erzeugen für jede Eingabe eine nahezu eindeutige Ausgabe. Eine solche Hash-Funktion stellt eine nicht umkehrbare Operation dar. Das bedeutet, dass Sie in der Regel nicht von einem Passwort-Hash auf das eigentliche Passwort schließen können. Hashes kommen in Webapplikationen aus Sicherheitsgründen zum Einsatz. Gelingt es einem Angreifer beispielsweise, einzelne Passwort-Hashes auszuspähen, sind diese nur bedingt hilfreich, da er nicht an das Passwort gelangt.

Das Problem der meisten Hash-Funktionen ist aber, dass sie nicht für den Umgang mit Passwörtern entwickelt wurden. Die üblichen Verdächtigen wie MD5 und SHA1 sind so optimiert, dass sie für eine beliebige Eingabe möglichst schnell den Hash-Wert liefern. So können Sie mit diesen Funktionen beispielsweise Prüfsummen für Dateien oder Texte erzeugen. Eine schnelle Verarbeitung kommt jedoch auch einem Angreifer zugute, da er potenziell mehr Versuche in der gleichen Zeit unternehmen kann als mit einem langsameren Algorithmus. Eine solche Brute-Force-Attacke ist durchaus üblich, um Passwörter zu knacken.

Um diese Nachteile der verbreiteten Hash-Funktionen zu umgehen, haben Niels Provos und David Mazières den bcrypt-Algorithmus entwickelt und ihn im Jahr 1999 der Öffentlichkeit präsentiert. Der große Unterschied zwischen bcrypt und anderen Hash-Funktionen ist, dass die Berechnung eines bcrypt-Hashes vergleichsweise aufwendig ist. Beim Hashen eines einzelnen Passworts stellt dies noch kein Problem dar. Wird allerdings gezielt versucht, Passwörter zu erraten, verlangsamt die Summe der Operationen das Gesamtsystem.

bcrypt und Node.js

Für Node.js existiert, wie für zahlreiche andere Plattformen und Programmiersprachen, ebenfalls eine Implementierung in Form eines npm-Pakets. Dieses können Sie mit dem Kommando npm install bcrypt in Ihrer Applikation installieren und dann zum Hashen Ihrer Passwörter verwenden. Das bcrypt-Paket basiert auf der C-Implementierung der Blowfish- und bcrypt-Algorithmen, was bedeutet, dass der Algorithmus nicht komplett in JavaScript umgesetzt ist, sondern auf die etablierten C-Bibliotheken zurückgegriffen wird.

Hashen von Passwörtern

Das bcrypt-Paket stellt Ihnen die Hash-Funktion zur Verfügung, mit der Sie einen bcrypt Hash erzeugen können. Sie können die Hash-Oper...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang