Vor vier Jahren wurde das soziale Business-Netzwerk LinkedIn Opfer eines Angriffs, bei dem Passwort-Daten gestohlen wurden. Erst kürzlich wurde bekannt, wie gefährlich dieser Datendiebstahl war. Der Vorfall zwingt alle Benutzer des Netzwerks, die damals schon Mitglied waren, schleunigst ihr Passwort zu ändern. Er zeigt aber auch, dass sichere Passwörter zwar notwendig sind, dass aber auch sehr sichere Passwörter keinen ewigen Schutz bieten, wenn der Betreiber des Dienstes, für den die Passwörter verwendet werden, unverantwortlich schlampt. Deshalb erklärt dieser Beitrag, wie Passwörter funktionieren und wie ein Dienstanbieter damit umzugehen hat.

Passwörter in den Anfangstagen des Internets

In den Anfängen des Internets war die Verwaltung von Passwörtern primitiv: Wenn ein Benutzer das Passwort 123456 wählte, dann speicherte der Dienst dieses Passwort mit dem Benutzernamen als Klartext in einer Textdatei oder bestenfalls einer Datenbank. „Klartext“ heißt, dass das Passwort als Zeichenfolge 123456 gespeichert wurde. Damit steht es jedem zur Verfügung, der die Datei öffnen und lesen kann.

Zum einen ist dieses Passwort äußerst unsicher, weil es so leicht zu tippen ist. Wer denkfaul ist, merkt sich lieber so ein einfaches Muster auf der Tastatur oder ein anderes primitives Passwort. Die Webseite Whatsmypass.com hat eine Liste der 50 häufigsten Passwörter veröffentlicht, die bei dem LinkedIn-Angriff entwendet wurden. 123456 führt diese Liste an. Es kommt in über 750.000 der insgesamt knapp 178 Millionen entwendeten Datensätzen zum Einsatz, das sind 0,42% – keine beeindruckende Prozentzahl, aber doch eine beachtliche Menge.

Wird das Passwort aber auch noch im Klartext gespeichert, dann ist es nicht nur leicht zu raten, sondern auch sofort bekannt, wenn wie bei LinkedIn und den meisten anderen vergleichbaren Einbrüchen und Datendiebstählen die Datenbank oder die Textdatei gestohlen wird. Das musste man schon sehr früh einsehen. Dennoch gibt es sicher bis heute Dienstleister, die Passwörter im Klartext speichern.

Das gilt insbesondere für all die Dienstleister, die Ihnen Ihr vergessenes Passwort zusenden können, wenn Sie die „Passwort vergessen“-Funktion benutzen. Solche Dienstleister sind nicht vertrauenwürdig. Im Falle eines Datendiebstahls ist Ihr Konto dort sofort kompromittiert.

Hashes statt Passwörtern

Schon bald musste man also dazu übergehen, die Passwörter nicht mehr im Klartext, sondern verschlüsselt zu speichern. Hierbei kommen Algorithmen zum Einsatz, die aus dem Passwort einen sogenannten Hash-Wert errechnen. Nur dieser wird gespeichert, und er sollte bei aktuellen Verschlüsselungsverfahren auch nicht umkehrbar sein, das heißt, aus dem Hash darf man das Passwort nicht errechnen können.

Nehmen wir an, ein Dienst setzt auf das SHA-1-Verfahren zum Verschlüsseln der Passwörter. Genau dies hat LinkedIn damals getan. Das Passwort 123456 wird durch diese Verschlüsselung zu folgendem Wert:

7c4a8d09ca3762af61e59520943dc26494f8941b

Das sieht zunächst einmal nicht schlecht aus. Nur diese Zeichenfolge ist beim Anbieter des Dienstes gespeichert. Aus ihr lässt sich nicht errechnen, sofern der Algorithmus SHA-1 nicht geknackt wird, wie das ursprüngliche Passwort gelautet hat.

SHA-1 gilt mittlerweile als nicht mehr sicher, sollte also nicht mehr eingesetzt werden. Nichtsdestotrotz gehen wir aus Gründen der Illustration hier einmal davon aus, dass der Algorithmus als solcher sicher wäre, und verwenden ihn weiter als Beispiel.

Sie können selber prüfen, welchen Hashwert Ihr persönliches Passwort ergibt. Dafür gibt es unter Linux die Möglichkeit eines Befehlszeilenkommandos:

echo -n 123456 | sha1sum | awk '{print $1}'
7c4a8d09ca3762af61e59520943dc26494f8941b

Die obere Zeile ist der Befehl, den Sie mit der Enter-Taste bestätigen, darunter die Ausgabe des bereits oben angezeigten und aus dem Passwort ermittelten Hashwerts, die dann erfolgt. Anstelle von 123456 tragen Sie Ihr Passwort ein, um dessen Hash zu ermitteln.

Unter Windows gibt es keine entsprechenden Bordmittel, aber Sie können ein Programm wie HashCalc verwenden, um Hashwerte zu ermitteln, oder Sie können auf Webseiten wie hashgenerator.de zurückgreifen. Allerdings gilt in beiden Fällen, vor allem aber bei solchen Webseiten: Sind Sie sicher, dass Passwort und Hash nicht an jemanden weitergemeldet werden? Wird Ihr vermeintlich sicheres Passwort nicht vielleicht zusammen mit dem ermittelten Hash an den Anbieter des Programms oder der Seite gemeldet? Dass das durchaus eine Gefahr bedeutet, sehen Sie gleich.

Hashes im Voraus berechnen

Die bei LinkedIn gestohlenen Passwörter waren als reiner SHA-1-Wert gespeichert und wurden so entwendet. Das bedeutet, dass exakt der oben genannte Hash bei 0,42% der gestohlenen Datensätze gespeichert war. Jeder, der z.B. im Besitz einer Liste der beliebtesten Passwörter ist, kann ohne jeden nennenswerten zeitlichen Aufwand die Hashwerte dieser Liste nach jedem existierenden Algorithmus ermitteln, da die Algorithmen notwendigerweise öffentlich verfügbar sein müssen. Dann braucht er anschließend nur noch in den gestohlenen Datensätzen nach denen zu suchen, die in seiner im Voraus ermittelten Liste stehen. Beim ersten Treffer erfährt er neben dem Passwort so, wenn er es nicht schon weiß, welcher Algorithmus verwendet wurde. Auf diesen kann er sich dann für den Rest der Liste konzentrieren.

Ebenfalls ohne jeden größeren Aufwand kann man vollautomatisch die Hashes für jeden Begriff aus jedem Wörterbuch jeder Sprache der Welt ermitteln. Gehen Sie davon aus, dass das für jeden Algorithmus schon geschehen ist. Das bedeutet: wenn Ihr Passwort ein existierendes Wort einer beliebigen Sprache ist (ob absichtlich oder nicht), dann dürfen Sie davon ausgehen, dass es sofort geknackt ist, wenn sein Hash irgendwo gestohlen wird.

Nehmen wir zum Beispiel an, Ihr vermeintlich schwer zu erratendes Passwort lautet „eintrittskarte“. Der SHA-1-Wert ist:

c503b3dbd51a87da4a94b662be98880419b31e64

Das Passwort ist vermutlich für einen Menschen wirklich nicht leicht zu erraten. Aber wenn das vor vier Jahren Ihr LinkedIn-Passwort war, dann taucht genau dieser Wert jetzt in der Liste der gestohlenen Passwörter auf.

Wenn man einen Computer automatisch die Haupteinträge eines Wörterbuches der deutschen Sprache per SHA-1 in Hashes umrechnen lässt, dürfte dieser Vorgang kaum mehr als ein paar Stunden dauern. Anschließend kann der oben angegebene Hashwert in der Liste der gestohlenen Hashes gesucht werden. Gibt es eine Übereinstimmung der Hashes, ist das Passwort geknackt.

 Dass das für dieses Passwort der Fall ist, können Sie sehr leicht überprüfen: Es gibt längst Webseiten, die diese Aufgabe für Sie erledigen. Öffnen Sie die hier verlinkte Seite und kopieren Sie den vollständigen Hashwert für „eintrittskarte“ dorthin, drücken Sie auf „Reverse“ und schauen Sie, wie schnell das Passwort ermittelt ist. Diese Webseite tut nichts anderes, als den Hash mit einer riesigen Datenbank von mehreren Millionen vorausberechneten Hashes abzugleichen.

Schon die Verwendung eines Großbuchstabens sichert das Passwort. „Eintrittskarte“ mit großem E ergibt den Hash

c8a03a9ed15d149d7eb0a28989c2398e2144cff3

Dieser Hash kommt derzeit noch nicht in der Datenbank vor. Aber das ist nur eine Frage der Zeit. Im Falle von LinkedIn wird das Ausmaß des Problems erst jetzt deutlich, da nun, nach vier Jahren, die Entschlüsselung einer großen Anzahl von Hashes auch vermeintlich sicherer Passwörter gelungen ist und die Daten veröffentlicht wurden.

Aufgrund der leichten Vorausberechnung möglicher Passwörter aus einfachen Zeichen werden üblicherweise Passwörter verlangt, die lang sind, aus Klein- und Großbuchstaben bestehen, Ziffern enthalten und außerdem noch Sonderzeichen. Die Länge ist wichtig, denn Sie dürfen davon ausgehen, dass auch ein Großteil der kurzen zufälligen Zeichenfolgen bereits vorausberechnet wurde. So werden zum Beispiel die Hashes für ahbg und aHbG auf der angegebenen Webseite bereits anstandslos gefunden, obwohl das meines Wissens keine real existierenden Wörter sind (womöglich aber Abkürzungen).

Individualisierung der Hashes: Salt

Verantwortungsvolle Anbieter von passwortgeschützten Diensten fügen eine zusätzliche Ebene zu der Verschlüsselung hinzu: sie „salzen“ das Passwort mit einem eigenen, geheim gehaltenen Bestandteil. Das hat LinkedIn damals jedoch nicht getan.

Wo solch ein „Salt“ (englisch für „Salz“) verwendet wird, werden durch den Anbieter weitere Zeichen an das Passwort angehängt, ohne dass der Benutzer das wissen muss. Zum Beispiel könnte automatisch die Zeichenfolge „BeL12“ als Salt angehängt werden, so dass aus unserem beliebten 123456 das Passwort 123456BeL12 wird. Das so gesalzene Passwort ergibt folgenden Hash:

5f78283d014367c2790b783e11541fef8ae908ed

Dieser ähnelt in keiner Weise dem Hashwert für 123456 oben. Die genannte Entschlüsselungsseite findet für diesen Hash nichts. Für den Moment sind wir also sicher.

Allerdings gibt es trotzdem einige Schwachpunkte für dieses System: Zum einen muss das Salt wirklich geheim bleiben, denn sonst kann eine beliebig lange Liste von Passwörtern für eben dieses Salt erstellt und deren Hashes ermittelt werden. Zum zweiten kann man davon ausgehen, dass die häufigsten Passwörter + Salt aus dieser Liste schon rein statistisch ermittelt werden können. Das heißt, hätte LinkedIn damals beim Diebstahl die Passwörter bereits mit BeL12 gesalzen, dann wäre der zugehörige Hashwert trotzdem bei 0,42% der Einträge identisch aufgetaucht. Dementsprechend kann man also zumindest die einfachsten Passwörter allein an der statistischen Häufigkeit des Vorkommens des Hashwerts erkennen. Das gefährdet zwar zunächst nicht die besseren Passwörter, wohl aber die simplen.

Ebenso können kurze Saltwerte statistisch ermittelt werden. Wenn ein Dienst eine ausreichend große Benutzerzahl hat, darf man davon ausgehen, dass der am häufigsten vorkommende Wert in einer gestohlenen Hash-Liste einem der allgemein bekannten häufigsten Passwörter plus dem individuellen Salt entspricht. Im Fall der LinkedIn-Daten war das 123456 + Salt. Auf den Tastaturen der Welt finden sich als gemeinsamer Nenner hauptsächlich die Zeichen des englischen Zeichensatzes. Das sind 26 Buchstaben in groß und klein, 10 Ziffern und rund 20 Sonderzeichen (nicht jede Passwort-Routine erlaubt jedes Zeichen).  Zusammen sind das also etwa 82 Zeichen.

Es gibt demnach 82 mögliche Salts mit nur einem Zeichen, 82² = 6724 mit zwei Zeichen, 551.368 mit drei Zeichen und 45.212.176 mit vier Zeichen. In Summe sind das 45.770.350 mögliche Salt-Werte mit bis zu vier Zeichen. Es ist für heutige Computer ein Klacks, all die resultierenden Hashwerte für, sagen wir, die zehn häufigsten Passwörter plus diese 45 Millionen Hashwerte in vertretbarer Zeit zu berechnen. Und sollte das auch nur einen einzigen Hashwert produzieren, der tatsächlich in der gestohlenen Liste steht, ist der Salt-Wert damit bekannt.

Für den Anbieter beginnt damit ein ernsthaftes Problem, wenn er es überhaupt erfährt. Dann müssen nämlich, um ein neues Salt zu etablieren, alle Kunden sich wenigstens einmal neu einloggen, wozu der Dienst zunächst das alte Salt verwendet und dann einen neuen Hash mit dem neuen Salt ermittelt und diesen in eine neue Datenbank überführt. Ein Dienst, der das Salt wechselt, ist so wenigstens für einige Zeit gezwungen, beide Salts zu verwenden, damit Bestandskunden sich weiterhin einloggen können. Und wenn das eigentliche Passwort bereits erfolgreich ermittelt wurde, bietet das neue Salt so keinen Schutz.

Was müssen Sie also für ein sicheres Passwort tun?

Wenn Sie den bisherigen Ausführungen folgen konnten, verstehen Sie jetzt sicher, warum Passwörter lang sein müssen und aus Kombinationen von Klein- und Großbuchstaben, Ziffern und Sonderzeichen bestehen sollten.

Die eigentliche Gefahr für Ihr Passwort besteht nicht darin, dass es jemand durch Überlegen errät. Viel gefährlicher und wahrscheinlicher ist, dass Ihr Passwort über seinen Hash identifiziert wird, wenn dieser irgendwo gestohlen wird. Deshalb ist es wichtig, kein Passwort für mehr als einen Zweck zu verwenden.

Sie können sehr einfach zu einem gegen diese Angriffe gut gesicherten Passwort kommen. Dazu müssen Sie sich einfach nur eine Art eigenes Salt merken, zum Beispiel ein kurzes Wort wie „SalZ“. Wenn Sie nun für einen Dienst ein eigenes Passwort festlegen müssen, dann benutzen Sie eine Regel wie: Name des Dienstes + : + SalZ. So entsteht zum Beispiel das LinkedIn-Passwort:

LinkedIn:SalZ

Wir haben darin Großbuchstaben, Kleinbuchstaben und ein Sonderzeichen. Vielleicht mögen Sie auch noch eine Ziffer hinzufügen. Auf jeden Fall ist es unwahrscheinlich, dass der resultierende Hash (insbesondere, wenn er von seiten des Dienstanbieters ebenfalls gesalzen ist) bereits in einer Datenbank auftaucht.

Es bleibt jedoch zumindest ein theoretisches weiteres Problem: Angenommen, Sie fallen auf einen Phishing-Angriff mit einer gefälschten LinkedIn-Seite herein und geben dort Ihren Benutzernamen und dieses Passwort ein. Damit ist das LinkedIn-Konto auf jeden Fall kompromittiert, aber wenn sich jemand dieses Passwort anschaut, dann kann er zusätzlich zumindest mit einiger Wahrscheinlichkeit erraten, dass Ihr Passwort für Facebook entsprechend Facebook:SalZ oder vielleicht FaceBook:SalZ lautet. Dieses Risiko halte ich allerdings für relativ gering.

Trotzdem empfiehlt es sich, eine Zwei-Faktor-Identifizierung zu verwenden, wo immer das möglich ist. Bei Facebook beispielsweise können Sie einen Code anfordern, der über die Handy-App ausgegeben wird und nach einem neuen Login zusätzlich eingegeben werden muss. Würde jemand das Facebook-Passwort kennen und zum Einloggen verwenden, könnte er trotzdem ohne Ihr Handy nicht weitermachen, weil nur darauf der Code eingeblendet wird, den er als nächstes eingeben müsste. Und wenn solch ein Code bei Ihnen angezeigt wird, ohne dass Sie sich bei Facebook eingeloggt haben, dann sollten Sie Ihr Passwort dort schleunigst ändern.

 

Schreiben Sie einen Kommentar

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