- Registriert
- 20.05.08
- Beiträge
- 1.288
Hallo,
ich habe eine Frage die mich nach diversen Tagen der Recherche nicht beantwortet hat. Vielleicht schafft ihr das ja Und zwar: Online-Portale wie LinkedIn und wahrscheinlich auch Apfeltalk hashen die Passwörter ihrer User mit einem Algorithmus. Im Falle von LinkedIn war dies SHA1 bzw. ein SHA-X Algorithmus. Doch diese sind lt. meinen Recherchen zwar schnell, aber nicht zielführend. Denn ein schlauer Mann, dessen Namen ich gerade nicht weiß, sagte einmal "Der Sinn eines Hashings ist nicht die Geschwindigkeit".
Daher kam ich kurz oder lang auf den BCRYPT-Algorithmus bzw. Blowfish. Natürlich habe ich mir diesen sofort mal angeschaut und ein paar Ausgaben erzeugen lassen, aber eins verwunderte mich dann doch: Warum soll das Resultat dieses Algorithmus "besser" im Sinne von langsamer knackbar sein, als SHA?
Bspw: Ich salze natürlich meine Eingaben und lasse sie dann hashen. Es gelte folgendes Beispiel:
Diese Eingaben sind in meinen Programmcode versteckt, sprich: den Salt sollte keiner sehen können, da ich ja kompiliere (vereinfachte Annahme: Dekompilieren geht nicht).
Generiere ich nun mittels SHA1 einen Hash daraus, erhalte ich folgenden String
Alles super, da ich weder den Salt sehe und sonst noch andere Eingaben des obigen Codes.
Lasse ich nun mittels BCRYPT einen Hash erzeugen, erhalte ich folgendes:
Mein Menschenverstand sagt mir jetzt aber: Scheisse! Da ist das gesamte Salz drin UND die Anzahl der Durchläufe des verwendeten Algorithmus. Also muss ich als Hacker nur noch folgendes machen: Ich ziehe mir (wie bei LinkedIn) alle Passwort-Hashes aus der DB, lese für jeden den SALT- und COSTS-Wert aus und fange fröhlich mit meiner Brute-Force oder Rainbow-Attacke an.
Nun fällt mir nur eine Möglichkeit ein: Ich speichere die Hashes in einer Datenbank erst ab der 29. Stelle (bis dahin geht der SALT-Wert und andere Angaben) und setze dann später alles manuell wieder zusammen.
Oder ist die Sicherheit gegenüber dem SHA1-Hash jener, dass man ca. 10000 Hashes/Sekunde bei SHA1 checken lassen kann (als bspw. 10.000 Einträge aus einem Dictionary) und bei BCRYPT je nach COSTS-Wert nur um die 7.7 Hashes/Sekunde?
Ich würde mich über Aufklärung freuen
ich habe eine Frage die mich nach diversen Tagen der Recherche nicht beantwortet hat. Vielleicht schafft ihr das ja Und zwar: Online-Portale wie LinkedIn und wahrscheinlich auch Apfeltalk hashen die Passwörter ihrer User mit einem Algorithmus. Im Falle von LinkedIn war dies SHA1 bzw. ein SHA-X Algorithmus. Doch diese sind lt. meinen Recherchen zwar schnell, aber nicht zielführend. Denn ein schlauer Mann, dessen Namen ich gerade nicht weiß, sagte einmal "Der Sinn eines Hashings ist nicht die Geschwindigkeit".
Daher kam ich kurz oder lang auf den BCRYPT-Algorithmus bzw. Blowfish. Natürlich habe ich mir diesen sofort mal angeschaut und ein paar Ausgaben erzeugen lassen, aber eins verwunderte mich dann doch: Warum soll das Resultat dieses Algorithmus "besser" im Sinne von langsamer knackbar sein, als SHA?
Bspw: Ich salze natürlich meine Eingaben und lasse sie dann hashen. Es gelte folgendes Beispiel:
Code:
string salt = "fn7wFChGz3FW4cZtuNOYU";
string password = "password123" // Very Secure Password *ironic*
int costs = 10;
Diese Eingaben sind in meinen Programmcode versteckt, sprich: den Salt sollte keiner sehen können, da ich ja kompiliere (vereinfachte Annahme: Dekompilieren geht nicht).
Generiere ich nun mittels SHA1 einen Hash daraus, erhalte ich folgenden String
Code:
ac1a2b467c9e930e23edb6f48e1a3bbc32623733
Alles super, da ich weder den Salt sehe und sonst noch andere Eingaben des obigen Codes.
Lasse ich nun mittels BCRYPT einen Hash erzeugen, erhalte ich folgendes:
Code:
$2a$10$fn7wFChGz3FW4cZtuNOYU.q.kPzICxj4khbTSkoTeEtaPd1XexUhO
Mein Menschenverstand sagt mir jetzt aber: Scheisse! Da ist das gesamte Salz drin UND die Anzahl der Durchläufe des verwendeten Algorithmus. Also muss ich als Hacker nur noch folgendes machen: Ich ziehe mir (wie bei LinkedIn) alle Passwort-Hashes aus der DB, lese für jeden den SALT- und COSTS-Wert aus und fange fröhlich mit meiner Brute-Force oder Rainbow-Attacke an.
Nun fällt mir nur eine Möglichkeit ein: Ich speichere die Hashes in einer Datenbank erst ab der 29. Stelle (bis dahin geht der SALT-Wert und andere Angaben) und setze dann später alles manuell wieder zusammen.
Oder ist die Sicherheit gegenüber dem SHA1-Hash jener, dass man ca. 10000 Hashes/Sekunde bei SHA1 checken lassen kann (als bspw. 10.000 Einträge aus einem Dictionary) und bei BCRYPT je nach COSTS-Wert nur um die 7.7 Hashes/Sekunde?
Ich würde mich über Aufklärung freuen