Passworthashing mit bcrypt: Unterschied zwischen den Versionen

Aus TBZ_-_Wiki
Wechseln zu:Navigation, Suche
 
(kein Unterschied)

Aktuelle Version vom 29. Oktober 2012, 16:13 Uhr

bcrypt ist eine kryptologische Hashfunktion, die speziell für das Hashing von Passwörtern entwickelt wurde. Im Gegesatz zu anderen Hashingfunktionen wie MD5 oder SHA1 skaliert die bcrypt-Funktion mit der zur verfügungstehenden Rechenleistung.Im Klartext heisst das, dass sich die Verschlüssungskomplexität und Zeit, die gebraucht wird um Daten zu verschlüsseln, anpassen lässt. Folglich sind mit bcrypt verschlüsselte Daten auch bei steigender Rechenleistung immer noch sicher verschlüsselt.

Häufige Fehler beim Verschlüsseln von Passwörtern mit MD5 und SHA1

Benutzung geknackter Algorithmen

Bis vor ein paar Jahren war es üblich, Daten und Passwörter mit dem MD5 Algorithmus zu verschlüsseln. Einer Gruppe von Hackern ist es jedoch gelungen, mittels Kollisionsangriffen (http://de.wikipedia.org/wiki/Kollisionsangriff) innerhalb weniger Stunden mit MD5 verschlüsselte Daten zu knacken. Im Laufe der Zeit wurde klar, dass MD5 noch weitere Sicherheitslücken aufweist. So ist es z.b. mittels Regenbogentabellen (http://de.wikipedia.org/wiki/Rainbow_Table) auch relativ einfach, MD5 zu knacken.

Bei SHA1 Verschlüsselung ergeben sich die gleichen Probleme, auch wenn die benötigte Rechenleistung und Zeit um einiges höher ist als beim Knacken vom MD5. Wenn Hacker über Serverfarmen oder sogar Botnetze verfügen, steht Ihnen in den meisten Fällen auch sehr viel Rechenleistung zur Verfügung.

Mehrmaliges Hashen

Das mehrmalige Hashen eines Passworts macht es für Angreifer nicht schwerer Passwörtern zu knacken. Im Gegenteil, da die Verschlüsselung nur aus Buchstaben und Zahlen besteht, ist es einfacher via Kollisionsangriff auf das originale Passwort zu kommen. Jeder Aufruf der Hashfunktion erhöht die Wahrscheinlichkeit, eine Kollision zu entdecken.

Verwendung von sehr langen Passwörtern

Längere Passwörter sind nur insofern sicherer, da mehr Rechenleistung benötigt wird, um das Passwort zu knacken.

Probleme mit herkömmlichen Verschlüsselungen und Moore's Law

Wie in den obigen Paragraphen bereits angedeutet, ist das Hauptproblem von MD5 und SHA1, dass beide Verfahren knackbar sind, solange man die Rechenleistung erhöht.

In diesem Zusammenhang ist das Moore'sche Gesetz interessant:

Das mooresche Gesetz sagt aus, dass sich die Komplexität integrierter Schaltkreise mit minimalen Komponentenkosten regelmäßig verdoppelt; je nach Quelle werden 12 bis 24 Monate als Zeitraum genannt.

Das mooresche Gesetzt konnte bis jetzt nicht wiederlegt werden. Daher wurde bcrypt entwickelt. bcrypt verwendet nicht nur Zahlen und Buchstaben, sondern auch Spezialzeichen. Zudem lässt sicher der Aufwand, mit dem Verschlüsst wird (und somit der Aufwand, der zum Knacken benötigt wird) einstellen.

Beispiele

Java API

// Hash a password for the first time

String hashed = BCrypt.hashpw(password, BCrypt.gensalt());

// gensalt's log_rounds parameter determines the complexity

// the work factor is 2**log_rounds, and the default is 10

String hashed = BCrypt.hashpw(password, BCrypt.gensalt(12));

// Check that an unencrypted password matches one that has // previously been hashed

if (BCrypt.checkpw(candidate, hashed)) System.out.println("It matches"); else System.out.println("It does not match");

Weblinks

Moore's Law

Erste, offiziele Beschreibung und Erklärung von bcrypt

Wikipedia Eintrag zu bcrypt

Java implementation

Python implementation

PHP implementation

Ruby implementation

Perl implementation

C implementation

Haskell implementation