Passworthashing mit bcrypt: Unterschied zwischen den Versionen
Eve-E (Diskussion | Beiträge) |
(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.
Inhaltsverzeichnis
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