Warum müssen Passwörter lang und komplex sein?
Dazu muss man einen Schritt zurück treten und nicht die Passwörter, sondern die Hashwerte betrachten. Der „Hash(-Wert)“ einer Datei oder einer Zeichenkette ist eine spezielle Art der Prüfsumme, die man sich als besonders komplizierte Quersumme einer Zahl vorstellen kann. Während aber eine Menge von Zahlen die Quersumme „7“ haben können, kommen „kryptographische Hashfunktionen“ mit der Besonderheit, für jede Zeichenkette eine andere Prüfsumme aufzuweisen. So kann man nicht nur prüfen, ob Daten korrekt übertragen wurden, sondern auch, ob eine Datei geändert / manipuliert wurde. Auch steht der Hashwert einer Datei für ihre Identität, daher gilt er auch als „digitaler Fingerabdruck“, was ihn eben für Passwort-Hashes interessant macht.
Das alles ist mit reichlich Mathematik überzuckert, denn es müssen verschiedene Dinge berücksichtigt und unter einen Hut gebracht werden: der Hash muss kurz sein; das Verfahren darf nicht zu lange dauern; zwei verschiedene Datensätze dürfen nicht einen gemeinsamen Hashwert haben („Kollisionen“); aus dem Hashwert darf nicht die Datei oder der ursprüngliche Datensatz erzeugt werden können („Einwegfunktion“)…
Verbreitete Algorithmen heißen zum Beispiel CRC (Cyclic Redundancy Check), MD (Message Digest Algorithm) oder SHA (Secure Hash Algorithm). Infos zu den zahlreichen Methoden finden Sie z.B. hier. Die Prüfsummen, die bei Hashes errechnet werden, haben aus praktischen Gründen meist feste Längen wie 32, 64, 128 oder mehr Bits. Diese Länge entscheidet nur zum Teil über die „Unhackbarkeit“, sondern vielmehr bestimmt sie die Zahl der eindeutig identifizierbaren, hashbaren Daten. Allgemein gilt durchaus, dass längere Hashes eines Verfahrens „sicherer“ sind. Zugleich der MD5-Hash eines Passworts wie 1 genauso „lang“ wie der des Passworts Rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz.
Bei einigen Hashes kann man die Länge (des Hashwerts) am Verfahrensnamen ablesen (CRC32, CRC64), bei anderen verbreiteten Verfahren (MD5, SHA1) nicht mehr. So ist das früher sehr verbreitete MD5 einfach ein verbessertes (geknacktes) MD4, SHA-2 unterscheidet sich erheblich von SHA1, und um die Verwirrung komplett zu machen findet man Begriffe wie SHA-256, SHA-384 und SHA-512, mit denen aber meist SHA-2 gemeint ist. SHA-3 ist derzeit der heilige Gral der Hashwerte, an ihm wird noch gearbeitet.
Hash-Passwörter
Typisch sind Hashes etwa, um Passwörter zu speichern: Speichert man nicht die Passwörter, sondern die Hashes von Passwörtern, dann kann die Datenbank mit den Hashwerten geknackt worden sein – dennoch kann ein Angreifer damit nichts anfangen, weil die Passwörter weiterhin geheim bleiben. Nur die Hashes sind bekannt, nicht aber, was sie „bedeuten“. Leider gilt das nur in Grenzen, wie wir noch sehen werden.
Auf der Seite hashgenerator.de können Sie sehr schön sehen (live!), wie sich der Hashwert ändert, sobald Sie den Text ändern. Sie sehen sofort, dass Hashwerte mehr sind als Prüfsummen – selbst eine „1“ erzeugt sofort einen komplexen Hashwert, im Beispiel mit MD5 den Wert „c4ca4238a0b923820dcc509a6f75849b“.
Der Text im Feld „message“ könnte also zum Beispiel ein Passwort sein, das ein Dienst nicht im Klartext, sondern als Hashwert speichert. Meldet sich ein User an, vergleicht das System nicht sein Passwort mit dem gespeicherten Passwort, sondern es erzeugt einen Hash des Passworts (und vergisst es) und vergleicht diesen Hash mit dem gespeicherten Hash des Passworts. Gut so, denn so kann das Passwort nicht bekannt werden – nur der Hash.
Das (schlechte) Passwort sesame wird also in MD5 zu einem scheinbar kryptischen c8dae1c50e092f3d877192fc555b1dcf (wobei die Buchstaben keine Buchstaben sind, sondern Teil der hexadezimalen Ziffern).
Hackt nun jemand die Datenbank der Benutzerinformationen von Dienst XY, kriegt er (im Idealfall, aber nicht immer) keine Passwörter, sondern nur Hashes wie diesen. Wobei c4ca4238a0b923820dcc509a6f75849b (Passwort „1„) genauso „kompliziert“ wirkt wie c8dae1c50e092f3d877192fc555b1dcf (Passwort sesame). Doch das täuscht.
Wie Sie den Hash-Wert hacken
Nun können Sie selbst mal (gedanklich) Hacker spielen: Sie haben also beispielsweise den Passwort-Hash c8dae1c50e092f3d877192fc555b1dcf (Passwort … wissen Sie (noch) nicht!) erbeutet und wollen wissen, wie das Passwort lautet? Das geht eigentlich nicht, denn es ist die Idee von (guten) Hashwerten, dass man eben nicht einfach vom Hashwert das Original errechnen kann.
Was aber geht, ist das folgende:
(Fast) Alle Algorithmen liegen offen. Daher ist der MD5-Hash von „sesame“ immer gleich, egal, ob Sie den Wert mit hashgenerator.de oder mit onlinemd5.com erzeugen – oder es selbst ausrechnen. Sie können sich also auf Basis von zum Beispiel dem MD5-Pseudocode in Wikipedia ein Tool programmieren, welches für Sie aus beliebigen Zeichenketten (vulgo: mögliche Passwörter) die zugehörigen MD5-Hashes errechnet. Einige Systeme haben MD5 schon eingebaut, etwa PHP oder Python, für andere Sprachen wie Java lassen sich leicht Snippets finden.
Als „mögliche Passwörter“ nehmen Sie zum Beispiel eine Liste aller Wörter und Begriffe (gibts im Web etwa hier, eigentlich reicht schon eine Liste wie die der häufigsten Wörter) und erzeugen dann mit Ihrem Tool von allen diesen Wörtern einen MD5-Hash. Das Ergebnis ist eine Tabelle wie diese:
admin 21232F297A57A5A743894A0E4A801FC3
keines 22BE23B8AB62881C410DC007D9CD7923
sesam CFA65021463859C0D85D6F2E02040EEB
sesamöffnedich 63FCFD2DAB915F507722F808CA09ECC1
SesamÖffneDich 7B5F3074A0E208B7E538298926373214
…
(nur halt viel länger ;-)
Wenn Sie eine solche Tabelle mit allen Wörtern, die es gibt, plus allen Namen und Begriffen von Superman bis Batman und so weiter durchrechnen lassen, dann haben Sie eine gigantische Liste von Wörter und ihres Hashes. Eine solche Tabelle nennt man Regenbogentabelle.
Der Trick ist, dass Sie jetzt nur noch einen bekannten Hash in dieser Tabelle suchen müssen – und damit das Passwort finden. So „knacken“ Sie alle Passwörter (aber nur die, die in Ihren Wörterbüchern vorkommen).
Es wird Sie nicht überraschen, dass andere das bereits getan haben. Im Fall von MD5 reicht zum Beispiel eine Website wie md5online.org. Dort werfen Sie den erbeuteten, an sich wertlosen Hash in den Suchschlitz und erhalten das wertvolle Passwort:
Ergebnis: „sesame„. Hah, wir sind Superhacker!
Das bedeutet nebenbei: Knack-Webseiten wie diese (oder Meta-Knacker wie md5cracker.org) „knacken“ nichts, sie schlagen nur in einer Tabelle nach.
Hashwert-(Regenbogen)-Tabellen
Grundlage dafür sind gigantische Regenbogentabellen, die es fix und fertig im Web zum Downloaden gibt, zum Beispiel auf freerainbowtables.com. Dort können Sie zum Beispiel sehen, dass eine Regenbogentabelle für alle kleingeschriebenen, nur aus Buchstaben bestehenden (Pass)Wörter mit bis zu 8 Buchstaben existiert, die bereits 16 GByte dick ist (mit 9 Buchstaben schon 109 GB).
Je länger das Passwort, desto länger die Tabelle der Möglichkeiten, wie dieses aussehen kann.
Warum Passwörter lang sein müssen
Womit ich zur Antwort komme, warum Passwörter lang (und komplex) sein müssen:
1. Aus der Existenz der Regenbogentabellen im Bild oben ergibt sich: Alle mit MD5 gehashten Passwörter, die nur aus Kleinbuchstaben bestehen und die kürzer sind als 9 Buchstaben, können (bei MD5) als bereits gehackt gelten. Dito alle aus Ziffern bestehenden Passworthashes bis 14 Zeichen Länge.
(Wobei „gehackt“ nicht bedeutet: „Das Konto wurde bereits mit dem Passwort missbraucht.“ Sondern es bedeutet: „Wenn morgen ein Dienst gehackt wird, sagen wir: Hotmail, und die Datenbank mit Usernamen/E-Mail und Passworthashes in Umlauf gerät, gelangt damit auch der Hash des Passworts in eine interessierte Teilöffentlichkeit, ergo kann dann jemand zu EINEM Konto das Passort ermitteln und den normalen User aussperren oder es abschöpfen.)
2. Bedeutet auch: Mit langen Passwörtern von 16 Zeichen Länge sind Sie derzeit noch auf der einigermaßen sicheren Seite. Weil Regenbogentabellen, die alle Kombinationen mit 16 Zeichen Länge enthalten, schon so unhandlich wären, dass sie eher selten sein dürften. Die NSA hingegen… (also warum nicht gleich 20 Zeichen nehmen?)
An vielen Orten im Web tauschen Hash-Bastler solche Tabellen, so dass am Ende mehr Hashwerte existieren, als eine Einzelperson mit begrenzter Rechenkapazität erzeugen könnte. Es ist Bastler, meist keine bösen Hacker, denn diese Leute lieben meines Erachtens einfach nur diese gigantischen Tabellen, nicht das Eindringen in fremde Konten. (Wer „mitrechnen“ will: geht per Boinc.)
Warum Passwörter komplex sein müssen
Und damit zurück zum Passwort selbst. sesame ist also kein gutes Passwort, genauso wenig wie ldsjsads oder 98713736174651 – weil diese Passwörter schon in Tabellen vorkommen und nur noch die Datenbank gehackt / „befreit“ werden muss, um Angreifern einen Anlass zu geben, diese Tabellen auch zu nutzen.
Doch was würde der Tabellenmensch tun, der schon die Tabellen für „alles mit Kleinbuchstaben“, „alles mit Grossbuchstaben“, „alle Zahlen“ hat? Er würde
- eine Hash-Tabelle mit gemischtgeschriebenen Wörter mit 1, 2 oder 3 Zahlen am Anfang,
- eine Hash-Tabelle mit gemischtgeschriebenen Wörter mit 1, 2 oder 3 Zahlen am Ende,
- eine Tabelle mit zwei Wörtern, zwischen den ein Doppelpunkt steht (so sahen früher CompuServe-Passwörter aus)
- und so weiter erzeugen.
Ergo dürften auch simpel zusammengesetzte Begriffe („schock:sauger“) oder einfache Wörter mit zwei, drei Zahlen (katze007) schon als Tabellen existieren.
Das 16-stellige, ziemlich sichere Passwort Ses^m45Stra$$e12 hingegen wird in MD5 zu 9f27021a0d6f049c122230486f30a779 – und auf md5online.org kennt man es (noch) nicht:
Ist dieses lange, komplexe Passwort also „sicher“?
Ja: Es ist auf jeden Fall sicherer als die kurzen, einfachen.
Nein: Denn natürlich liegt es nahe, wie bei Ses^m45Stra$$e12 geschehen einige Buchstaben wie A durch ^ oder S durch $ zu ersetzen und ein Schema wie „Wort, zwei Ziffern, Wort, zwei Ziffern“ zu verwenden. Der Hashtabellenforscher jagt einfach seine Wörterbücher auch durch entsprechende automatische Ersetzer und Kombinierer und kriegt auch diese heraus. Woraus folgt: Man muss sich *eigentlich* von allem fernhalten, was bekannt und zudem algorithmisierbar ist, etwa Leet-Speak etc.
*Eigentlich*.
Denn trotzdem ist $3sam:2014$trasse besser als $3sam:2014, $3sam:2014! besser als Sesam:2014!, Sesam:2014! ist besser als sesam2014, sesam2014 ist besser als sesam.
Zu oben genanntem Beispiel: MD5 gilt als „nicht mehr sicher“, aber es ist eben gut dokumentiert und die reichlich verfügbaren Online-Tools laden meines Erachtens zum Spielen und verstehen ein.
Sie sind Passwortforscher und wissen es besser? Melden Sie sich – ich würde Sie gerne interviewen!