» Passwortsicherheit mit md5() + salt & Co. verbessern

Ziel der Hacker: Emailadressen aus der DatenbankNeuen Thread eröffnenNeue Antwort erstellenBei Post/Get kurze Pause -> Verifikation -> weiter..
AutorNachricht
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52436
Wohnort: Lohmar


Meine eBay-Auktionen:
06.02.2008, 06:55
zitieren

Auf Grund der Diskussion zur Passwortunsicherheit in vielen PHP-Scripten habe ich mir mal ein paar Gedanken gemacht und bin zu dem folgenden Resultat gekommen.

Einfache md5()-Verschlüsselung
Viele Login-System verwenden eine einfache Verschlüsselung des Passwortes durch md5():
$pw = '12345';
$hash = md5($pw);

Der Hash wird so dann in der Datenbank abgelegt. Immer wenn sich nun der Nutzer einloggt, verschlüsseln wir das Passwort und vergleichen den Hash mit denen in der Datenbank. Im Falle eines Fundes ist der User eingeloggt.

Risiken:
  • wenn die Datenbank ausgelesen wird, dann könnte unter zuhilfenahme von Rainbow-Tables eine Rückwärtsberechnung innerhalb weniger Stunden (je nach Passwortlänge und Zeichenauswahl) erfolgen
  • wenn Wortsammlungen z.B. aus Wörterbüchern bereits in eine Hash-Datenbank hinterlegt wurde, können diese leicht verglichen werden (es ist davon auszugehen, dass viele Passwörter gängige Begriffe darstellen, die in solchen Wortsammlungen zu finden sind)
  • doppelt verwendete Passworter unterschiedlicher User machen die Suche noch einfacher, da beide den gleichen Hash hinterlegt haben
Einsatz eines salt
Gerne wird daher neben der Verschlüsselung ein salt hinzugefügt. Dieser zufällige String wird dem Passwort hinzugefügt:

$pw = '12345';
$salt = md5(mt_rand());
$hash = md5($salt . $pw);

Wir speichern diesmal salt und hash in der Datenbank. Beim Login lesen wir zuerst den salt aus und berechnen so das Passwort.

Damit haben wir die Risiken von doppelt verwendeten Hashs ausgemerzt. Auch können standartisierte Rainbow-Tables nicht mehr verwendet werden. Hash-Datenbanken aus Wörterbüchern müssen erst neu angelegt werden und zwar für jeden User eigene.

Risiken:
Der Drang neue Hash-Datenbanken zu generieren ist hoch. Demnach müsste man diese also nur noch mal aktualisieren und schon wären wir bei den gleichen Risiken wie oben. Da wir keine sonderlich komplizierte Berechnung angestrengt haben, werden diese Datenbanken auch schnell generiert sein.

Passwortlänge als Unbekannte
Daher greifen wir auf weitere Eigenschaften eines Passworts zurück. Im ersten Schritt die Passwortlänge.
$pw = '12345';
$salt = md5(mt_rand());
$hash = md5($pw);
$len = strlen($pw);
for ( $i=0; $i < $len; $i++ )
{
$hash = md5($salt . $hash);
}

Um den Hash diesmal rückwärtig zu berechnen müsste man für jede mögliche Stelle eine Datenbank zum Vergleich haben. D.h. bei einem 6-stelligen Passwort wären es bereits 6 Vergleichsdatenbanken.

Risiken:
  • umso kürzer das Passwort, umso weniger Vergleiche müssen angestrengt werden
  • Mindestlängen bei der Passwortangabe reduzieren die Gesamtanzahl der benötigten Vergleiche. Ist z.B. die Mindestlänge auf 4 Stellen eingestellt, so brauchen die Vergleiche auch erst ab 4 Stellen generiert werden
Weitere Passwort-Eigenschaften als Unbekannte
Daher machen wir es noch mal geringfügig komplizierter:
$pw = '12345';
$salt = md5(mt_rand());
$hash = md5($pw);
if ( preg_match('#[0-4]#i', $pw) )
{
crypt($hash, substr($salt, 0, 2)); // 2=CRYPT_STD_DES
}
if ( preg_match('#[5-9]#i', $pw) )
{
crypt($hash, substr($salt, 0, 9)); // 9=CRYPT_EXT_DES
}
if ( preg_match('#[bcfgk]#i', $pw) ) // kommen durchschnittlich oft vor lt. wikipedia in 1-4% aller wörter
{
crypt($hash, substr($salt, 0, 12)); // 12=CRYPT_MD5
}
if ( preg_match('#[lmowz]#i', $pw) ) // kommen durchschnittlich oft vor lt. wikipedia in 1-4% aller wörter
{
crypt($hash, substr($salt, 0, 16)); // 16=CRYPT_BLOWFISH
}
$len = strlen($pw);
for ( $i=0; $i < $len; $i++ )
{
$hash = md5($salt . $hash);
}

Wir prüfen hier also das Passwort auf bestimmte Zeichen. Sind sie vorhanden wenden wir zusätzliche Verschlüsselungstechniken an.

Risiken:
An Hand dieser Abfolge kann man nach wie vor komplette Wörterbücher einlesen und entsprechende Hash-Datenbanken generieren. Durch den zufälligen salt haben wir zwar eine gute Hürde geschaffen viele Passwörter auf einmal zu knacken, aber in der Regel ist das Ziel das Passwort des Administrators. Konzentriert man sich als nur auf dieses eine Passwort unter Zuhilfenahme von neu generierten Hashdatenbank aus Salt und Wörterbüchern, so ist es möglich dieses eine Passwort herauszufinden. Gleiches gilt für Bruteforce-Attacken, wo jede mögliche Zeichenkette durchprobiert wird.

ABER: Hier kommt ein Parameter hinzu, auf den ich vor kurzem erst aufmerksam gemacht wurde. Nämlich der Zeitfaktor.

Ein Benchmark-Test zeigt nämlich schnell:
  • md5() = 100%
  • md5() + salt = 200%
  • md5() + salt + Passwortlänge = 400-700% (je nach Passwortlänge)
  • md5() + salt + Passwortlänge + crypt() = 2.500 - 4.500%
In der härtesten Stufe heißt das also, dass die Generation einer Hash-Datenbank 45x länger braucht als bei einer einfach md5() Verschlüsselung. D.h. wenn jemand vorher 1 Tag gebraucht hat eine Datenbank zu generieren, so braucht er jetzt bereits 45 Tage dafür. Und das Schöne ist, dass es noch genug Möglichkeiten gibt die Verschlüsselung komplizierter und damit die Berechnung noch langwieriger zu gestalten.

Weitere denkbare Verschlüsselungstechniken erweitern den Pool der Möglichkeiten:
  • sha1()
  • crc32()
    + 33 weitere in PHP5 und in der Funktion hash() / hash_algos()
Ich hoffe die Idee gefällt, wenn ich was übersehen haben sollte, dann immer raus damit :D

Gruß



Verfasst am: 06.02.2008, 17:39
zitieren

Ich wurde auf einen Fehler in dem salt hingewiesen, den ich bei crypt() eingesetzt habe. Danke! Ich werde das noch entsprechend aktualisieren und melde mich dann zurück.
pn email
Gast 
06.02.2008, 17:39
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "Passwortsicherheit mit md5() + salt & Co. verbessern" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
Anlage verbessern
Hallo, es ist so weit, ich hab die Schnauze voll mit der orginalen 2 1/2 Watt Anlage, ich will jetzt ordentlich Musik hoeren! Ich kenne mich aber bei Anlagen un co gar nicht aus deswegen brauch ich eure hilfe. Was ich haben moechte: - Guter...
von christopher_vtec
7
404
27.07.2012, 12:29
christopher_vtec
Ansaugweg verbessern
Hi Leute, ich fahre seit kurzem nen Del Sol EH6 und würde dort gerne den Ansaugweg bzw die Luftzufuhr verbessern. Störendes Plastik in der Airbox wurde offenbar vom Vorbesitzer schon entfernt Die Resobox habe ich selbst ausgebaut und die Öffnung vom...
von Parion1605
30
2.401
13.11.2012, 13:28
Parion1605
bremsanlage verbessern
wollte mal freiegen wie zufrieden ihr mit eurer bremsanlage seit oder ihr schon umgebaut habt? ich würde gerne die anlage wechseln weil ich find die zu schwach bzw. die kommt mit meinen anfoderungen nicht klar :no: und wenn, habt ihr nur vorne oder...
von dbmaster
4
348
06.09.2011, 07:33
Maiki 007
EG4 Performance verbessern
Hallo besitze einen EG4 mit standartmäßigen 90PS. Nun wollte ich mal fragen was man machen kann um so ungefähr 100-130PS zu bekommen und wie teuer und aufwendig der Einbau oder Umbau der einzelnen Teile wäre. ...
von Colin2912
26
840
03.02.2011, 16:56
EarL_VTEC
Bilderupload verbessern?
Mohoin. Ich mal wieder der Nörgler... xD Kann man vllt. eine Funktion o. Ä. machen, dass der Bild upload von mehreren Dateien verinfacht wird? Man muss bisher jedes Bild einzeln hoch laden. Kann man das evtll so machen, dass man erst die Bilder...
von mbboy
30
1.409
07.08.2012, 09:13
nfs_freak
Anlage verbessern
Möcht gerne infos Zwar ich habe jetzt in auf meiner Hutablage 2 Pioneer Boxen und vorne die Serienboxen angeschlossen möchte demnächst jetzt alle Boxen erneuern das heißt ich möchte vorne Stärkere 13" und Kleine Hochtöner ( wo bei ich mir die...
von Daniel_Ej9
3
279
13.04.2010, 07:56
Cleenz
Suche wie verbessern?
Was mich aktuell stört: 1 "username Jazz" findet nur Beiträge wo "username" im Beitrag steht und nicht die von "username" geschrieben wurden 2 "Jazz Felge" findet nicht "Jazz Felgen" (leicht anders...
von mgutt
12
424
14.04.2015, 01:37
mgutt
straßenlage verbessern
hi zusammen hab da mal ne frage an euch alte schrauber. wie ich sehe haben einige hier domstreben verbaut aller art. habt ihr zum teil damit eine verbesserung der straßenlage feststellen können. (die originalstrebe hinten oben kommt mir ein wenig...
von tofast
8
468
30.05.2009, 09:28
Tobi002
TSS Air Intake vorhanden - Wie verbessern?
Hallo! Bei meiner gekauften S2000 ist leider ein normale Hot Air Intake von TSS vorhanden. Der ist auch soweit eingetragen aber ich möchte mir irgendwann eine andere Abgasanlage zulegen und wegen TÜV darf da kein offener Luftfilter sein. Was gibt es den...
von wing177de
5
492
31.08.2015, 09:07
Tiedchen
Sound im Auto verbessern
hey zusammen. brauch etwas hilfe. wie im titel schon steht, will ich nen besseren klang im auto. hört sich im vergleich zu anderen serienanlagen eher mies an. hab mich schon belesen. würde mir ein 2 wege-system zulegen, welches weiß ich noch nicht....
von blub
11
748
05.08.2012, 19:32
Kane
© 2004 - 2026 www.programmierer-forum.de | Communities | Impressum |