Sicherheit von Algorithmen in Datenbankanwendungen

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.

5 Kommentare zu “Sicherheit von Algorithmen in Datenbankanwendungen”


  1. 1 Flo

    Was genau ist ein Salt?

  2. 2 Xaepho

    Ein Salt kannst du als einen String ansehen, der mit zum Hash erzeugen genutz werden kann, also um einen 2. Hash, mit dem selben Wert zu erzeugen brauchst du auch den selben Salt. Also ein Salt modifiziert den Hash.

  3. 3 Flo

    Ah nice; wenn der Salt aber bekannt ist, dann ist die Sicherheit auch wieder net gegeben, oder?
    btw: kann des sein, dass Wordpress sowas auch nutzt?

  4. 4 Xaepho

    Nein, der Salt sollte nicht nach dem Motto “Security through obscurity”, also Sicherheit durch Geheimhaltung, benutzt werden, sondern der salt dient hauptsächlich als Schutz gegen Rainbow-Tables, die ja nicht für jeden x-beliebigen Salt extra Datenbanken zur verfügung stellen können.
    Btw: Ja, Wordpress benutzt Salts seit Version 2.5.

  5. 5 Flo

    Aso, dann sollen die Salts nur vor den Rainbow-Tables schützen; des macht natürlich Sinn.

Kommentar schreiben

Sie müssen sich anmelden, um einen Kommentar schreiben zu können.