Hashing? Salting? Wie bitte?

Warum Site-Betreiber Passwörter nicht nur "hacken" sondern auch "salzen" sollten, damit ein Passwortklau keine schwerwiegenden Folgen hat.
 
Wenn man sich in ein Nutzerkonto für eine Website oder einen anderen Internetservice einloggen will, braucht man auch heute noch wie eh und je meist nur einen Usernamen und ein Passwort. Damit das Einloggen funktioniert, müssen die Passwörter der Nutzer auf dem Webserver gespeichert werden. Früher wurden sie oft einfach im Klartext abgelegt - Angreifer konnten sie daher ganz einfach entwenden, wenn sie in einen Server eindringen konnten. Vor einigen Jahren begann man daher damit, die gespeicherten Passwörter durch "Hashing" zu schützen. Heuzutage reicht dies als Sicherheitsmassnahme allein auch nicht mehr aus.
 
Durch Hashing (Englisch für hacken) wird eine Zeichenfolge in eine andere Zeichenfolge umgerechnet. Aus dem Passwort "Password" wird beispielsweise durch SHA-1 "e75fd8bfd5a4819ae­09942144ccb8b03393d99ad". Webserver speichern zu einem Userkonto nur diese Zeichenfolge, nicht das ursprüngliche Passwort.
 
Diese zweite Zeichenfolge, genannt Hash, lässt sich nun theoretisch nie mehr zurückrechnen. Das heisst das kein Computer der Welt "e75fd8bfd5a4819ae0994­2144ccb8b03393d99ad" wieder in das ursprüngliche "Password" umrechnen kann, sogar wenn er weiss, dass SHA-1 verwendet wurde. Das ist der grosse Unterschied zur normalen Verschlüsselung. Bei dieser ist es das Ziel, einen verschlüsselten Text bei Bedarf auch wieder entschlüsseln zu können.
 
Bei einem Login auf einer Website ist eine Entschlüsselung aber nicht nötig. Das vom User eingegebene Passwort wird auf dem Server der Site neu gehashed, und dieser Hash dann mit dem gespeicherten verglichen. Ist der Hash gleich, ist das Passwort korrekt.
Durch Hashing ensteht, wenn die gleiche Methode verwendet wird, aus der gleichen Zeichenfolge auch immer der genau gleiche Hash. Das heisst, wenn man man für zwei Webseiten das gleiche Passwort benützt, und beide Webseiten SHA-1 verwenden, wird auch bei beiden der genau gleiche Hash gespeichert.
 
Hashing wird auch für andere Zwecke als die Sicherung von gespeicherten Passwörtern verwendet. Wie erwähnt, erzeugt die gleiche Zeichenfolge auch immer den gleichen Hash. Wird die ursprüngliche Zeichenfolge aber auch nur ein bisschen verändert, ensteht ein komplett anderer Hash. Diese Eigenschaft von Hashes wird beispielsweise von Browsern verwendet, um Serverzertifikate zu verifizieren oder um die Unveränderbarkeit von Einträgen in Blockchains zu sichern.
 
Salting
Bei der Passwortspeicherung ist Salting eine zusätzliche Sichheitsmassnahme. Dabei werden in den gespeicherten Hash, weitere, zufällige Zeichen eingefügt. Der Webserver weiss, welche Zeichen nicht zum eigentlichen Hash gehören. Ein Hacker, der in den Besitz eines Files mit "gesalzenen" Hashes gelangt, aber nicht.
 
Diese Zusatzmassnahme beim Speichern von Passwort-Hashes ist heute von entscheidender Wichtigkeit. Hacker müssen nämlich Hashes auch nicht entschlüsseln, um herauszufinden, welches Passwort dazu gehört. Sie, beziehungsweise ihre Software und Computer, können die Passwörter auch erraten. Im Jahr 2012 wurden bei LinkedIn eine Unmenge von Passwort-Hashes gestohlen, 178 Millionen, um genau zu sein. Diese waren allerdings eben nicht "gesalzen". Ein englischer Security-Forscher konnte Anfang dieses Jahres mit den Methoden moderner Hacker innert sechs Tagen 98 Prozent der Hashes realen Passwörtern zuordnen. Der dafür verwendete spezialisierte Computer kostete ihn nur knapp 20'000 Dollar.
 
Knacken durch kluges (und extrem schnelles) Raten
Die Methode dafür ist im Prinzip einfach. Die Knacksoftware generiert aus möglichen Passwörtern die dazugehörigen Hashes und vergleicht sie mit der geklauten Liste. Stimmen zwei Hashes überein, ist das Passwort gefunden.
 
Zuerst werden in einem "Wörterbuchangriff" bereits bekannte Passwörter, die andere User verwendet haben, sowie überhaupt Wörter aus allen möglichen Sprachen durchgegangen. Auch wenn das Wörterbuch Abermillionen von Wörtern enthält, kann dies moderne Hardware in wenigen Stunden erledigen.
 
Etwas komplizierter wird es, wenn es darum geht, noch nicht bekannte Passwörter, die auch in keinem bekannten Wörterbuch enthalten sind, herauszufinden. Die Hacker füttern dafür ihre Software mit Informationen darüber, wie sich Menschen ihre Passwörter ausdenken. Die Software wendet dann diese Regeln ebenfalls an und probiert Millionen oder Milliarden weitere Möglichkeiten aus. Glauben Sie beispielsweise, "[email protected]" sei viel sicherer als "Passwort"? Vergessen Sie's.
 
Dass die Computer der Passwortknacker heute so viele mögliche Passwörter in so kurzer Zeit ausprobieren können, liegt unter anderem daran, dass frühere Hashing-Methoden darauf angelegt waren, möglichst schnell zu funktionieren beziehungsweise wenig Rechenleistung zu verbrauchen. Neuere Hashing-Funktionen werden dagegen bewusst so konzipiert, dass sie mehr Rechenpower brauchen.
 
Daran liegt es auch, dass jeder Passwortklau auch die Sicherheit aller anderen Passwörter senkt, sofern sie nicht völlig zufällig generiert wurden. Jede Passwortliste gibt Hackern weitere statistische Auskünfte über die bewussten und auch unbewussten Regeln, die Menschen anwenden, wenn sie sich Passwörter ausdenken. Diese Regeln fliessen dann wieder in die Knack-Software ein.
 
Salting verhindert den einfachen Abgleich von Hashes. Allerdings dürften durch die Weiterentwicklung der Hard- und Software der Passwortknacker auch die heutigen Salting-Methoden irgendwann an Wirksamkeit einbüssen.
 
Nachtrag 1.9.2016: Die Sicherheit von Hashing-Methoden kann auch durch andere Entwicklungen unterlaufen werden. Für SHA-1 und noch frühere Hashing-Funktionen wurden Methoden entdeckt, durch die sich entgegen der Konzeption dieser Algorithmen doch ein identischer Hash aus einer anderen als der usprünglichen Zeichenfolge herstellen lässt. Dies unterläuft vor allem den Einsatzzweck, durch Hashes die Unveränderbarkeit von Daten sicher zu stellen, letztlich könnten so aber Hashes auch direkt entschlüsselt werden Noch braucht ein solcher Angriff ungeheuer viel Rechenkraft und ist entsprechend teuer. Trotzdem möchte Google im Chrome-Browser SHA-1 aus Sicherheitsgründen schon in Kürze nicht mehr als Methode zur Verifizierung von Zertifikaten unterstützen.
 
Pfeffer
Pepper ist eine weitere Methode, um gespeicherte Passwort-Hashes sicherer zu machen. Dabei wird dem vom User gewählten Passwort vom Server noch eine zusätzliche, geheime Zeichenfolge hinzugefügt, bevor es gehasht wird. Die gleiche Zeichenfolge muss dann natürlich vom Server auch beim Login zum Passwort hinzugefügt werden, bevor die Hashes verglichen werden können. Die zusätzlichen Zeichen können immer gleich oder, noch sicherer, für jedes Passwort unterschiedlich sein. (Hans Jörg Maron)