Verschlüsselung in Webapplikationen (MD5)
Passwörter gehören nicht in die Hände von Dritten, auch nicht in die von Administratoren. Daher wurden für die Speicherung von Passwörtern sogenannte Falltürmechanismen (trapdoor mechanisms) entwickelt:
Es ist zwar möglich, ein Passwort zu verschlüsseln, nicht jedoch es wieder zu entschlüsseln.
Der Verschlüsselungsalgorithmus funktioniert also genau wie eine Falltür nur in eine Richtung. Das mag auf den ersten Blick sinnlos erscheinen, ist aber eigentlich sehr pfiffig. Nehmen wir als Beispiel den weit verbreiteten MD5-Algorithmus. Mit diesem sichert fast jede Webanwendung in PHP ihre Passwörter ab. Dabei wird aus
123456=> MD5-Verschlüsseler => e10adc3949ba59abbe56e057f20f883e
Diese lange Zeichenkette sieht der Admin. Er weiß aber deswegen das Passwort im Klartext noch nicht, da der Weg
e10adc3949ba59abbe56e057f20f883e => MD5-Entschlüsseler (Gibt es nicht) => Passwort
prinzipbedingt versperrt ist. Die dabei entstehende, lange Zeichenkette wird „Hash“ genannt.
Wenn man sich nun an einer Webanwendung (Moodle, Joomla, egroupware …) anmeldet, macht die Webanwendung folgendes:
Benutzer gibt Passwort im Klartext ein => MD5-Verschlüssler => Hash1
Dieser Hash1 wird nun mit dem Hash – nennen wir ihn Hash2 – verglichen, der in der Datenbank für den User gespeichert ist (er könnte etwa bei der Registrierung erzeugt worden sein).
Stimmen beiden Hashes überein, hat der User das korrekte Passwort eingegeben, weil der Verschlüsselungsmechanismus ja immer gleich ist. Stimmen die Hashes nicht überein, muss der Benutzer ein falsches Passwort eingegeben haben.
Soweit so gut. Das ist auch die Erklärung dafür, dass einen – so man sein Passwort vergessen hat – stets ein neues Passwort zugewiesen wird, denn der Admin kann das alte Passwort ja nicht wissen, sondern lediglich ein neues setzen.
Eigentlich hört sich das Ganze recht sicher an – ist es bloß nicht, denn es gibt Angriffe gegen dieses Verfahren, die aber allesamt voraussetzen, dass der Angreifer an den Hash kommt.
Es gibt im Internet sogenannte Regenbogentabellen. Eine Regenbogen zeigt eine großes Spektrum des sichtbaren Lichts – eine Regenbogentabelle enthält eine Vielzahl an Passworten mit den zugehörigen Hashes. Man füttert die Tabelle nun mit einem Hash und schaut nach, ob es einen passenden Passworteintrag dazu gibt. Die Wahrscheinlichkeit dafür ist umso größer, je kürzer und einfacher mein Passwort ist, da z.B. Betreiber solcher Tabellen einfach komplette Wörterbücher MD5-verschlüsseln oder aber auch Zahlen- und Ziffernfolgen. Die existierenden Regenbogentabellen sind beeindruckend groß. Unser Hash für „123456“ wird z.B. immer gefunden.
Es gibt eine weitere Gefahr: Die Kollisionen. Es ist nämlich möglich, dass zwei oder mehr verschiedene Passwörter zum gleichen Hash führen, dadurch kann durch Zufall auch ein eigentlich sicheres Passwort mit Hilfe einer Regenbogentabelle aufgedeckt werden. Diese Gefahr ist relativ gerimg, da jeder Verschlüsselungsalgorithmus daraufhin optimiert ist, möglichst wenig Kollisionen zu erzeugen, aber denkbar bleibt diese Möglichkeit dennoch. Viele erfolgreiche Knackverfahren beruhen auf der Ausnutzung solcher Kollisionen.
Aber es gibt auch eine Abhilfe: Den Salt („das Salz“). Ein Salt ist eine zufällige Zeichenkette, die neben dem eigentlichen Verschlüsselungsverfahren benutzt wird, um einen möglichst zufälligen Hash zu erzeugen. Der Salt ist an den Hash geheftet, damit das vom Nutzer eingegebene Passwort auch auf gleiche Weise verschlüsselt und mit dem Datenbankhash verglichen werden kann – das ist sicherheitstechnisch kein Problem. Mit einem zufälligen Salt kann der Hash für ein beliebiges Passwort ganz unterschedlich aussehen, sodass die heutigen Regenbogentabellen dagegen relativ machtlos sind.
Salted MD5 (SMD5) wird noch nicht so häufig eingesetzt. Das hat sowohl mit ihrer Verbreitung als auch mit der oft unbefriedigenden Plattformunabhängigkeit zu tun.
„Sicher“ sind MD5-verschlüsselte Passwörter ohne Salt nur so lange, wie kein Dritter an die Datenbank gelangt…