[ erweiterte Suche ]

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

Ziel der Hacker: Emailadressen aus der DatenbankNeues Thema eröffnenNeue Antwort erstellenDas Thema einem Freund empfehlenDas Thema druckenBei Post/Get kurze Pause -> Verifikation -> weiter..
Seite 1 von 1 [2 Beiträge]
AutorNachricht
Administrator 


Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 40763
Chats: 11134
Wohnort: Hennef


Meine eBay-Auktionen:
06.02.2008, 06:55


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():
   Code:
$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:

   Code:
$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.
   Code:
$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:
   Code:
$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

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.
Nach obenprofil pn email
Gast 

06.02.2008, 17:39


Mach mit!

Wenn Dir die Beiträge gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:

    » 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...
Nach oben
Seite 1 von 1 [2 Beiträge]
Neues Thema eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:HitsLetzter Beitrag
Garten: Bodendurchlässigkeit erhöhen / verbessern mit Sand?
Hi, ich habe gelesen, dass man bei festem Boden (wir haben relativ lehmigen) die Bodenlässigkeit erhöhen kann, in dem man Bausand hinzufügt. Ist das sinnvoll bzw. gibts noch andere...
von mgutt
420220.09.2010, 12:20
mgutt
MD5, SHA1, Crypt, DES, .htpasswd Generatoren
Hallo, ich habe mal eine kleine Sammlung mit Generatoren zusammengestellt: www.md5generator.de www.sha1generator.de www.crc32generator.de www.htpasswdgenerator.de www.cryptgenerator.de Ich hoffe sie...
[Allgemein]von mgutt
0327024.05.2008, 18:12
mgutt
 MD5 Hashes knacken / cracken - So einfach kann es sein...
Hier eine kleine Videopräsentation, in der gezeigt wird, wie einfach manche MD5 Hashes zurückberechnet werden können. Die Software kann natürlich kein umfangreichen Zeichenkombinationen zurückrechnen, aber darum soll es auch nicht gehen. Erschreckend...
[PHP]von mgutt
0942003.06.2008, 20:07
mgutt
Warum MD5 sicher ist und viel Unsinn im Netz verbreitet wird
Hallo, im Netz wird immer wieder verbreitet, dass md5() unsicher sei, weil es ja einfach sei mögliche Kollisionen innerhalb von wenigen Tagen zu berechnen. Das stimmt und da kann man auch nicht widersprechen. Bevor das "aber" kommt...
[PHP]von mgutt
3173102.09.2009, 13:59
Patrick-Oliver
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
310213.04.2010, 07:56
Cleenz
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
815230.05.2009, 09:28
Tobi002
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
48606.09.2011, 07:33
Maiki 007
Erste Anlage verbessern
Erstmal ein Hallo ans ganze Forum. Bin ganz neu hier und auch generell neu im Hifi Bereich. Habe mir von Kicker ein Anlagen Set gekauft um ca 400Euro + Radio um 120€. Bin mit dem Bass sehr zufrieden auch mit dem Klang ( Rock/Techno alles...
Seite 2von inspirenz
1522908.10.2010, 16:29
Ralf
Motoraum optisch verbessern :)
So leute.....nachdem ich dann mal meinem rex ee8 auf vorderman gebracht hab.....(wasserpumpe gewechselt)......hats mich erwischt. ich möchte meinen motorraum "sauberer" haben :) dazu hatte ich mir überlegt.....bunte schläuchte und son...
Seite 2von Gold-Viper
1038406.11.2008, 10:51
hb_markus
Auspuff Sound verbessern!?
Hey und zwar habe ich von einem Bekannten erfahren das man den Sound eines Normalen Auspuffes (ich sag mal verschönern) (röhren) lassen kann ohne das es geld kostet nur veraten wollter er es mir nicht :cry: könnt ihr mir veraten wie ich das anstelle also...
Seite 2, 3von Fighter
27162106.03.2011, 00:11
Cyclone
© 2004 - 2012 www.programmierer-forum.de (srv02) | Communities | Impressum