Passwörter rich­tig spei­chern – Teil 2

Teil 2 des Artikels zum Thema Passwörter richtig speichern.
Im vorherigen Artikel haben wir uns damit beschäftigt, Daten in einer eigenen individuellen Anwendung vorzuhalten.

Hashes mit MD5 oder SHA

Nachdem nun klar sein sollte, dass eine Speicherung der Daten im Klartext keine Option ist, müssen wir uns überlegen, wie wir unsere wertvollen Informationen in der Datenbank besser schützen können. Im Falle eines Datenraubs (Backup etc.) sollen die Daten immer noch sicher sein.

In irgendeiner Form müssen wir also die Daten verschlüsselt in der Datenbank ablegen, so dass der Datendieb zunächst einmal vordergründig nichts mit den Daten anfangen kann.

Die naheliegende Form die Passwörter zu schützen ist es nicht das Passwort selber, sondern nur dessen Hash-Wert abzulegen. Der Hash-Wert ist eine Prüfsumme über das Passwort. Aus einem Hash-Wert lässt sich das Passwort selber nicht mehr rekonstruieren.

Eine Hashfunktion errechnet aus einem Text beliebiger Länger eine Prüfsumme mit fester länger (128Bit, 256Bit,…)

Bekannte und beliebte Algorithmen sind MD5 und SHA.

Message-Digest Algorithm 5 (MD5)

MD5 Hashes sind vor allem unter dem Begriff „Fingerabdruck“ für Daten, die man aus dem Internet herunterlädt, bekannt. Oft werden von Autoren MD5-Hashes veröffentlich, die es uns erlauben die Unverändertheit der Datei zu überprüfen, indem wir den MD5-Fingerabdruck der heruntergeladenen Datei mit dem veröffentlichten Schlüssel des Autors vergleichen.

Sind diese identisch, können wir davon ausgehen, dass die Datei nicht von einer dritten Partei verändert wurde.

MD5 erzeugt immer einen Schlüssel von 128Bit länge.

Secure Hash Algrithm (SHA)

Aktuell existieren 4 Iterationen des SHA Algorithmus mit unterschlichen Schlüssellängen:

  • SHA-0 und SHA-1 haben ein Länge von 160Bit.
  • SHA-2 hat eine variable länge zwischen 224Bit und 512Bit.
  • SHA-3 ist ein 2015 verabschiedeter, neuer Standard mit ebenfalls variabler Länge von 224Bit bis 512Bit

SHA1 und 2 werden im Folgenden unter SHA zusammengefasst.

SHA und MD5 sind aktuell sehr verbreitete und beliebte Algorithmen für das Hashing von Informationen – damit auch Passwörter.

Viele Frameworks bieten solide Implementierungen, die sofort benutzt werden können.

SHA und MD5 zeichnen sich dadurch aus, dass mit ihnen sehr schnell und effizient Prüfsummen erzeugt werden können.

Im Laufe der Zeit haben sich aber grade bei MD5 und SHA drei gravierende Probleme herauskristallisiert:

Brute-Force-Attacke
Was zunächst als großer Vorteil erscheint, ist in Sachen Schutz von Kennwörtern ein gravierender Nachteil: Können Hash-Werte schnell errechnet werden, so ermöglicht es einem Angreifer über eine Brute-Force-Attacke durch ausprobieren sehr schnell, sehr viele Passwörter durchzuprobieren.

Benötigte man vor einigen Jahren für Brute-Force-Attacken noch sehr viel Rechenkraft nötig und damit für „Privat-PC“ kaum praktikabel, sind diese Angriffsvektoren in den letzten Jahren durch Cloud-Computing und die Verwendung von programmierbaren Grafikkarten (z.B. NVIDIA CUDA) auch für kleinere Systeme realistischer geworden.

Das Passwort Recovery Tool hashcat (http://hashcat.net/oclhashcat/) berechnet mit einem leicht überdurchschnittlichen PC und einer AMD HD7970 GPU (Grafikkarte) rund*

MD5 8,5 Mrd. Hashes pro Sekunde
SHA-1 3,04 Mrd. pro Sekunde
SHA-256 1,1 Mrd. pro Sekunde
SHA-512 0,4 Mrd. pro Sekunde
SHA-3 0,18 Mrd. pro Sekunde

*Stand Juli 2015

 

Rainbow Tables
Rainbow Tables sind lange Listen aus Klartext und zugehörigem Hash-Wert Pärchen.

Ein Rainbow Table enthält – stark vereinfacht dargestellt – alle Zeichen-Kombinationen und deren Repräsentierung als Hash. Dies ist auch heute noch eine Datenmenge, die nicht sinnvoll zu verarbeiten ist.

Beispiel: ein 6 Zeichen Passwort, welches nur aus den Zeichen „A-Z“, „a-z“, „0-9“, „.“, „/“ besteht ergibt 64^6 Variationen was ein Datenvolumen von ca. 1,4 Terabyte entspricht.

Aber es gibt mathematische Reduzierungs-Funktionen, die es ermöglichen, mit einem guten Kosten-Nutzen-Faktor einen Teil des Hashes zur Laufzeit zu berechnen und nur einen Teil in den Rainbow Tables vorzuhalten.

Für die gängigen Hash-Algorithmen gibt es bereits vorgefertigte Rainbow Tables, welche man aus dem Internet herunterladen kann. Noch bequemer kann man über google innerhalb der Rainbow Tables „recherchieren“, da google diese indexiert hat (http://lmgtfy.com/?q=9346449aa87e571ea4d8a781acf683b0).

MD-5 9346449aa87e571ea4d8a781acf683b0
SHA-1 d4d0409277fd44edab8e3d21a5ed3f3165f76aa0
SHA256 5df2b90ceddd37963dbf0498627bd060928b9de6e469caeac1debc9323f5be14

 

Kollisionen
Von Kollisionen spricht man, wenn zwei unterschiedliche Texte denselben Hashwert erzeugen. Im Bereich von Passwort Hashes wäre das fatal.

Sowohl für SHA-1, als auch MD5 sind Kollisionen nachgewiesen und bekannt, wodurch sich die maximale Sicherheit von 2^80 Kombinationen auf 2^69 reduziert.

Erscheint die Reduzierung um 2^11 zunächst signifikant, ist sie allerdings eher theoretischer Natur. Dennoch gilt ein Algorithmus als gebrochen, wenn Kollisionen nachgewiesen werden konnten.

 

Vorteil
+ Kein Klartext in der Datenbank
+ Keine Rückrechnung möglich
+ Gute Unterstützung in Entwicklungsbibliotheken

Nachteil
– Gute Hardwareunterstützung für Brute-Force-Attacken
– Rainbow Tables im Internet
– Ältere Algorithmen zunehmend unsicher

Fazit
SHA und MD5 Algorithmen zu verwenden ist in jedem Fall besser als gar Sicherheit zu verwenden. Doch die Sicherheit ist trügerisch. Beide Hash Algorithmen bringen signifikante Probleme mit sich, die einen Einsatz für Passwort Hashes fraglich machen. Die Möglichkeit ein Passwort Hash durch eine einfache Google-Anfrage ermitteln zu können, macht die Nutzung der beiden Algorithmen unter Umständen problematisch.

Die Sicherheit des Hashes steht und fällt mit der Komplexität des Passworts. Rainbow Tables zu erstellen ist aufwändig. Je komplexer Passwörter sind (Länge und Anzahl der Sonderzeichen), umso aufwändiger ist die Erstellung der Rainbow Tables.

Ab einem gewissen Zeitpunkt ist es für einen Angreifer nicht mehr wirtschaftlich eine Rainbow Table-Attacke zu fahren.

 

Beispiel

 

Exkurs Passwort­re­geln

Leider sind die beliebtesten Passwörter bei Usern immer noch:

  • 123456
  • password
  • 12345
  • qwerty
  • 1234

Top 10 2014: http://www.mobiflip.de/die-beliebtesten-passwoerter-2014/

Kombiniert werden Rainbow Tables in der Regel mit Dictionary Attacken, wobei zunächst alle „realen“ Worten durchprobiert werden, gefolgt von Listen beliebter „Leet-Speak“ Kennwörter (z.B. „pa$$w0rd“) und Erkenntnissen aus dem Social Engineering zu einem Ziel (z.B. Name der Frau, Kinder, Haustiere), bevor beliebige Kombinationen durchprobiert werden.

Gegenmaßnahmen sind verschärfte Kennwortregeln was die Länge und Komplexität betrifft, sowie die Verwendung einer stärkeren Verschlüsselung mit SHA-256, – 512 oder SHA-3.

Download

Ein lauffähiges Beispiel kann in meinem Git-Repository abgerufen werden:
https://github.com/christianaschoff/Passworte-Teil2-md5sha

tl;dr

Reine MD5/SHA-Hashes sind gefährlich und leicht angreifbar.
Besonders in Bezug auf schwache Passwörter bietet dieses Verfahren nur sehr geringen Schutz.

Schnelleinstieg
Der Übersichtlichkeit halber ist der Artikel in mehrere Teile gegliedert:
Intro: Vorwort
Teil 1: Klartext
Teil 2: MD5 und SHA
Teil 3: Salt & Pepper
Teil 4: BCrypt
Teil 5: BCrypt & Pepper und Gesamt-Fazit

Christian Aschoff

Christian Aschoff

Senior IT-Berater bei BROCKHAUS AG
Christian Aschoff ist bei der BROCKHAUS AG in der Individualentwicklung mit Microsoft-Technologien tätig. Darüber hinaus beschäftigt er sich mit übergreifenden Themen wie IT-Security, iOS-Entwicklung mit Mono und Unity 3D. Als jemand, dem Sicherheit am Herzen liegt, schreibt er für das blogHAUS hauptsächlich über Themen aus dem Bereich Security.
Christian Aschoff
<< Vorheriger Beitrag
Nächster Beitrag >>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.