Kennt Google mein Passwort? - Hashing und Verschlüsselung (Teil 2)

Einleitung

Dieser Artikel beschäftigt sich mit dem Thema Passwörter. Wie macht man sich ein Gutes, wie werden sie sicher gespeichert und natürlich die Beantwortung der Titelfrage...einfach weiterlesen.

Grundlage für diesen Post ist der Teil 1 zum Thema Verschlüsselung, da die beiden Themen sehr eng miteinander verwoben sind. Lest also diesen zuerst, wenn ihr das noch nicht habt.


Passwörter

Wie schon zuvor erwähnt, dienen Passwörter entweder zur Verschlüsselung oder, so wie der allgemeine Sprachgebrauch ist, zur Zugangskontrolle. Wir sichern damit unseren Computer, unseren Facebook-Login, unsere EC-Karte, etc. Selbst der Haustür-Schlüssel ist eine Art Passwort.

Wenn wir uns mit Benutzername und Passwort bei Google, Facebook oder einem Online-Shop einloggen, dann passieren zwei Dinge. Zum einen muss das Passwort sicher übertragen werden, so dass es keiner mitlesen kann. Das macht, wie oben erwähnt, die HTTPS-Verschlüsselung.

Aber woher weiß der Dienst, dass ich das richtige Passwort eingetippt habe? Zunächst logisch: bei der Registrierung habe ich mein Passwort festgelegt und dieses wird abgespeichert. Wenn ich mich wieder anmelden will, dann muss man nur das Eingegebene und das Gespeicherte vergleichen. Wenn sie gleich sind, war es richtig.

Das heißt aber, dass Google, Facebook, etc. mein Passwort kennen. Ein Administrator kann auf der Datenbank mein Passwort nachschauen. Wird das gleiche Passwort für mehrere Dinge verwendet - z.B. Facebook und E-Mail - ist das Missbrauchspotential hoch.

Hashing

Hier kommt nun eine Technik zum Einsatz, die "Hashing" genannt wird. Anders als Verschlüsselung zerstört Hashing die originale Information, es gibt also keine Möglichkeit, das Original herauszufinden.

Bei Zahlen könnte das zum Beispiel die Quersumme sein. Die Quersumme von 123456 ist 21. Aus der 21 weiß ich aber nicht, was die Originalzahl war und kann das nicht herausfinden. Bei Buchstaben könnte man zunächst alle Buchstaben in Zahlen umwandeln und dann das Gleiche machen. "GEHEIM" wird so zu "7 3 8 3 9 13", die Quersumme beträgt 43. Man könnte also nun die 43 in die Datenbank legen. Wenn ich mein Passwort eingebe, wird wiederum die Umwandlung in Zahlen und die Quersummenberechnung durchgeführt und verglichen. Sind beide 43, dann muss mein Passwort richtig sein und ich kann mich anmelden.

Blöderweise ergibt "MIMG" auch die Quersumme 43. Wenn zwei unterschiedliche Eingaben den gleichen Hash ergeben, spricht man von "Kollision" und diese sind bei Quersummen sehr wahrscheinlich. Als Hashing-Methode ist sie also ungeeignet.

Praktischerweise gibt es aber Hashing-Algorithmen, die eine extremst geringe Chance auf Kollisionen haben. Ein Beispiel ist SHA-256, das u.a. von Geheimdiensten verwendet wird. SHA-256 erzeugt sehr lange Hashes und verwendet viele Tricks, damit diese sich nie wiederholen. 

Das bedeutet: der Aufwand eine Kollision zu erzeugen, ist so groß, dass es sich weder zeitlich noch finanziell lohnt. Um einen Eindruck zu geben: zwei gleich lange Texte haben eine Chance von 1:57.896.044.618.658.097.711.785.492.504.343.953.926.634.992.332.820.282.019.728.792.003.956.564.819.968 den gleichen SHA-256 Hash zu erzeugen. Das sind mehr als 5 Billionen Billiarden Billiarden Billiarden, eine Zahl mit 77 Stellen.

Mit dieser Chance vor Augen ist es klar, warum es - zunächst - kein Problem sein sollte, wenn Hacker eine Datenbank voller Passwörter stehlen. Sind diese Passwörter allesamt nur als Hash gespeichert, so stünden die Chancen, auch nur eines davon zu knacken - indem man eine Kollision herbeizuführen versucht, die als richtiges Passwort akzeptiert wird - ist praktisch Null.

Schlechte Passwörter

Man muss aber gar keine Kollisionen zu erzeugen. Es reicht nämlich, schlicht das Passwort zu erraten. Dann kann ich es ebenso in einen Hash umwandeln und vergleichen, ob es stimmt. Das beliebteste Passwort im Internet ist heutzutage "123456". Ein Hacker muss also nur dieses Passwort als Hash umwandeln und mit der gestohlenen Liste von Passwort-Hashes vergleichen. Allein damit findet man schon viele Treffer, bei praktisch keinem Aufwand.

Da sich die am häufigsten verwendeten Passwörter von Jahr zu Jahr kaum unterscheiden, kann der Hacker hier Zeit sparen. Er berechnet bereits vorher alle Hashes und muss dann nur noch eine - sehr schnelle - Suche in den gestohlenen Daten durchführen, um zu wissen, welche Hashes identisch sind. Diese vorberechneten Listen nennt man "Rainbox Tables", Diese gibt es zum Teil sogar von professionellen Anbietern mit Milliarden von Einträgen.

Salting
Eine Abwehrmaßnahme gegen Rainbow Tables ist das sog. "Salting". Es soll dafür sorgen, dass selbst schlechte Passwörter nicht einfach geknackt werden können. Technisch wird dabei nicht nur das Passwort selbst gehasht, sondern das Passwort quasi verlängert und dann erst gehasht.

Beispiel: das Passwort "123456". Der Salt lautet "!dfG1dfg" und es wurde entschieden ihn anzuhängen (alternativ kann man auch davorhängen oder sogar beides kombinieren). Das Passwort verändert sich also zu "123456!dfG1dfg". Daraus wird der Hash gebildet und gespeichert. Gibt man nun beim Login wieder "123456" ein, so wird das Gleiche wieder gemacht, die Funktionsweise ist also nicht beeinträchtigt.

Ein Angreifer kann aber nun nicht mehr mit seiner Rainbow Table arbeiten, denn der von ihm vorab gebildete Hash für "123456" ist durch den Salt unbrauchbar. Das Schema des Salts muss natürlich geheim bleiben damit das klappt, sonst könnte man recht einfach neue Rainbow Tables berechnen.

Salting ist leider nicht durchgehend im Einsatz, v.a. weil der zusätzliche Schutz Rechenzeit und damit Geld kostet.

Der beste Hashing-Algorithmus hilft also nichts wenn kein (oder ein schlechter) Salt eingesetzt und das Passwort schlecht ist. Aber was macht ein Passwort schlecht bzw gut? Es gibt ein paar allgemeine Regeln:

Gute Passwörter

- enthalten kein Wort aus dem Wörterbuch, keine Namen, kein Datum: diese sind alle bekannt und in der Rainbow Table bereits enthalten, selbst wenn sie von hinten nach vorne geschrieben werden.

- kein Schema: alle Muster auf der Tastatur wie "asdfghjkl" oder "123qweasd" sind ebenfalls trivial und in den Rainbow Tables bereits enthalten.

- mischen Klein- und Großbuchstaben, Zahlen und Sonderzeichen. Dadurch ergeben sich viele Möglichkeiten pro Zeichen: 2 x 26 Buchstaben (für Groß und Klein) + 10 Ziffern + mind. 30 sehr einfach einzugebende Sonderzeichen wie ! $ # :, theoretisch wären viele Tausend machbar. Diese Vielfalt erschwert den Aufwand, eine Rainbow Table zu berechnen.

- sind mindestens 6 Zeichen lang. Mit jedem zusätzlichen Zeichen wird es sicherer. Empfohlen werden 8 oder mehr Zeichen. Das liegt schlicht daran, dass es sehr aufwändig ist, sämtliche Kombinationen aus 8 oder mehr Zeichen zu berechnen. Wenn man sein Passwort aus vielen möglichen Zeichen zusammensetzt, so ergeben sich extrem viele Kobinationsmöglichkeiten. Ein 6-stelligen Passwort nur aus Kleinbuchstaben hat "nur" 170 Billionen Billionen Möglichkeiten. Ein gleich langes Passwort aus Klein- und Großbuchstaben sowie Ziffern ist dagegen eine Zahl mit 49 Stellen, nimmt man noch die 30 einfachen Sonderzeichen mit dazu steigt die Zahl auf 72 Stellen an. Bei 8 Zeichen als Passwort sind es schon 84 Stellen, etc

Für Passwörter, die man selten eingibt - z.B. WLAN-Passwörter - und die entsprechend lange nicht geändert werden, sollte die Länge noch größer sein.

Da das Berechnen aufwändig ist und die Rainbow Tables sehr viel Platz auf Festplatten braucht, werden Hacker niemals alle Passwörter vorab berechnen können, sondern sich v.a. auf die Einfachen konzentrieren. Da viele Leute schlechte Passwörter verwenden (zu kurz, zu einfach), kann man damit bereits sehr viel Erfolg haben. Ein gutes Passwort sorgt also automatisch dafür, dass man selbst bei Diebstahlmeldungen im Radio ruhig schlafen kann.

Passwort vergessen?

Nachdem man sich nun ein super kompliziertes Passwort ausgedacht hat folgt bald die nächste Frage: wie kann man es sich merken?

Was man nicht machen sollte ist, es sich in einer Datei am Computer zu speichern. Interessanterweise ist es nämlich deutlich sicherer, das Passwort auf ein Stück Papier zu schreiben und unter der Tastatur zu verstecken. Physisch kommt man nicht so einfach an diesen Ort (man müsste ja einbrechen), ein Hacker kommt dagegen viel leichter (und unbemerkter) an den virtuellen Ort des Computers, der schließlich am Internet hängt.

Wie man sich ein gutes Passwort erstellt
Man denkt sich einen Satz aus wie "Nur ich kenne mein geheimes Passwort". Davon nimmt man nun die Anfangsbuchstaben, also "NikmgP". Das sind bereits 6 Zeichen, gemischt aus Groß- und Kleinbuchstaben.

Nun ersetzt man noch einen Buchstaben durch eine Zahl, die so ähnlich aussieht. Zum Beispiel ersetzt man das "i" durch 1. Ergibt "N1kmgP".

Sonderzeichen müssen auch noch her, also machen wir noch ein Ausrufezeichen dahinter "N1kmgP!".

Und schon hat man ein sicheres Passwort, ohne Wörterbucheintrag, kaum zu erraten, aber sehr einfach zu merken. Denn man muss sich nicht diese kryptische Zeichenfolge merken sondern nur den Satz.

Die Wahl eines guten Passworts ist ein wichtiger Bestandteil der Kette und jeder ist dafür selbst verantwortlich, wie schwer er es den Hackern macht.

Zusammengefasst

Nach diesem zwei Teilen nun nochmal alle wichtigen Dinge in komprimierter Form:

Die Verschlüsselung im Internet sorgt für eine sichere Übertragung von Daten wie z.B. Passwörtern.

Hashing sorgt dafür, dass Passwörter "geheim" gespeichert werden können und nicht offen lesbar in Datenbanken liegen

Eine gutes Passwort ist immer extrem wichtig. Zum Einbrechen in Datenbanken und zum Knacken von Verschlüsselung braucht es viel Erfahrung und teures Equipment. Ein schwaches Passwort erraten kann dagegen jeder...


Wer noch mehr wissen will:
Simon Singh: Geheime Botschaften (Amazon Link): Ein geniales Buch zum Thema Verschlüsselung ink. einem spannenden Streifzug durch die Verschlüsselungstechniken von der Antike bis Heute.

Keine Kommentare:

Kommentar veröffentlichen