Es gibt viele Hashverfahren, doch welches ist das richtige?
- MD5
- SHA1
- SHA2
- Whirlpool
- RIPEMD-160
Dies sind einige der bekanntesten Hashalgorithmen. Der meistgenannte MD5 gilt mittlerweile als unsicher (für eindeutige Hashwerte, wie man sie z.B. beim Download benutzt). Er ist per Brute-Force-Attacke, Rainbow-Tables zu knacken.
Rainbow-Tables sind Tabellen, in denen Zeichenketten, mit den dazugehörigen MD5-Hashwerten gespeichert sind, somit sind leichte Passwörter wie “Paul” sofort geknackt.
Brute-Force-Attacken entsprechen dem Prinzip “Trail and Error”, es wird solange durchprobiert bis ein entsprechenderString (Zeichenkette) dem MD5-Hashwert zugeordnet werden kann. Bsp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <? // Gesucht ist der entsprechende String zu dem Hashwert: 07159c47ee1b19ae4fb9c40d480856c4 echo md5("a") . '<br>'; // Ausgabe: 0cc175b9c0f1b6a831c399e269772661 echo md5("b") . '<br>'; // 92eb5ffee6ae2fec3ad71c777531578f echo md5("c") . '<br>'; // 4a8a08f09d37b73795649038408b5f33 // ... hier geht es weiter mit d, e, f, g ... echo md5("aa") . '<br>'; // 4124bc0a9335c27f086f24ba207a4912 echo md5("ab") . '<br>'; // 187ef4436122d1cc2f40dc2b92f0eba0 echo md5("ac") . '<br>'; // e2075474294983e013ee4dd2201c7a73 // ... echo md5("az") . '<br>'; // cc8c0a97c2dfcd73caff160b65aa39e2 // ... echo md5("ba") . '<br>'; // 07159c47ee1b19ae4fb9c40d480856c4 // Der String war nach 53 Versuchen erfolgreich ermittelt ?>
Bei Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen wächst das ganze exponentiell. Bei einem String mit 2 Stellen, und nur Groß- und Kleinbuchstaben und Zahlen gibt es 3844 möglichkeiten. Selbe Bedingungen nur eine andere Anzahl an stellen:
- 3 Stellen: 238328 Möglichkeiten
- 4 Stellen: 14776336 Möglichkeiten
- 6 Stellen: 56800235584 Möglichkeiten
- 8 Stellen: 218340105584896 Möglichkeiten
- 10 Stellen: 839299365868340224 Möglichkeiten
Laut Wikipedia schafft ein aktueller Mitellklasse-Computer 15-25 Millionen Möglichkeiten pro Sekunde. Das entspricht (mit 25 Millionen Sekunden gerechnet):
- 3 Stellen: 1/100 Sekunde
- 4 Stellen: 0,6 Sekunden
- 6 Stellen: 38 Minuten
- 8 Stellen: 101 Tage
- 10 Stellen: 388565 Tage
Somit ist Brute-Force, bei langen, komplexen Passwörtern keine gute Möglichkeit.
Die einzelnen Algorithmen im Vergleich:
MD5 - Message-Digest Algorithm 5
- 128-Bit-Hashwerte
- Kollisionsfreiheit (=>unsicher)
SHA1 - Secure Hash Algorithm 1
- 160-Bit-Hashwerte
- Kollisionsfreiheit (=>unsicher)
SHA2 - Secure Hash Algorithm 2
- 224-, 256-,384- oder 512-Bit-Hashwerte
- Keine gelungenen Angriffe bekannt
Whirlpool
- 512-Bit-Hashwerte
- Jung und offen
- Keine gelungenen Angriffe bekannt
RIPEMD-160 - RACE Integrity Primitives Evaluation Message Digest
- 128-, 160-, 256-, oder 320-Bit-Hashwerte
- Unverbreitet
- Offen
- Keine gelungenen Angriffe bekannt.
Zusammenhang der Algorithmen mit der Sicherheit einer Datenbankanwendung.
Eine sichere Datenbankanwendung braucht zum speichern von Passwörtern einen starken Algorithmus wie Whirlpool. Das alleine reicht für mäßige Sicherheit, doch um eine fast bombensichere Anwendung zu programmieren, sollte man einen sog. Salt einbauen.
1 2 3 <? hash( 'whirlpool', $salt . $password ); ?>Dieser verhindert, das die, bei schwachen Passwörtern, effektiven Rainbow-Tables benutzt werden können.