Hashfunktionen und Passwortsicherheit
Wussten Sie, dass die sicheren Webdienste, bei denen Sie sich mit einem Passwort anmelden, das Passwort, mit welchem Sie sich dort anmelden, überhaupt nicht kennen? Warum wird das so gehandhabt? Und wie ist das überhaupt möglich? Ausgerüstet mit dem Wissen aus unserem Beitrag zu Hashfunktionen und Informationssicherheit können wir Antworten auf diese Fragen geben.
Ein naives Anmeldeverfahren
Schauen wir uns zunächst an, wie ein naives Anmeldeverfahren aussehen würde. Wir melden uns bei einem Webdienst auf die übliche Weise mit einem Kontonamen und einem Passwort an:

Unser naiver Webdienst hat in seiner Datenbank eine Tabelle mit allen Kontonamen und den zugehörigen Passwörtern:

Der Webdienst sucht zunächst den Kontonamen aus der ausgefüllten Anmeldemaske in seiner Datenbank. Wenn der Name in der Datenbank existiert, dann vergleicht der Dienst auch das Passwort aus der Anmeldemaske mit dem zugehörigen Passwort in der Datenbank. Wenn die Passwörter übereinstimmen, dann wird die Anmeldung durchgeführt. Andernfalls wird die Anmeldung verweigert. Auf den ersten Blick ist das ein sicheres Anmeldeverfahren. Nur wer im Besitz eines gültigen Kontonamen ist und das zugehörige Passwort kennt, kann sich Zugang zum entsprechenden Konto verschaffen. Alle anderen müssen draußen bleiben. So weit, so gut! Aber was genau ist an diesem Verfahren naiv?
Das Problem ist, dass die Passwörter in der Datenbank gespeichert sind. Damit sind sie potenziell auch allen Personen bekannt, die Zugriff auf die Datenbank haben. Das sind zunächst die Betreibenden des Webdienstes und deren Mitarbeitenden. Weiterhin ist es heute bei vielen Unternehmen üblich, den tatsächlichen Betrieb der angebotenen Webdienste an US-amerikanische Cloud-Computing-Anbieter wie Amazon Web Services oder Google Cloud auszulagern. Wir können also davon ausgehen, dass grundsätzlich auch die Betreibenden und Mitarbeitenden dieser Cloud-Computing-Anbieter Zugriff auf die Datenbank und damit auf unser Passwort haben. Hinzu kommt natürlich, dass sich auch Kriminelle unbefugten Zugang zu den Daten in der Datenbank verschaffen könnten.
Darüber hinaus ist es kein Geheimnis, dass die meisten Nutzenden von Webdiensten dasselbe Passwort für mehrere Dienste wiederverwenden. Wer sich das Zugangspasswort einer Zielperson zu ihrem Facebook-/Twitteraccount oder Online-Reisebüro verschaffen konnte, hat folglich mit etwas Glück auch schon das Passwort für E-Mail, Online-Banking, Terminplaner, Dating-Plattform und für das Intranet des Unternehmens, bei dem die Zielperson arbeitet, in den Händen. Entsprechend hoch ist der ökonomische Anreiz dafür, die Passwörter aus der Datenbank eines beliebigen Webdienstes zu stehlen, auch wenn dieser Webdienst selbst gar kein lukratives Angriffsziel ist! Die Frage lautet: Wie lösen wir dieses Problem?
Ein weniger naives Anmeldeverfahren
Wir erinnern uns: der oben beschriebene naive Webdienst hat in seiner Datenbank eine Tabelle mit allen Kontonamen und den zugehörigen Passwörtern:

Wir passen diese Tabelle folgendermaßen an. Anstatt die Passwörter zu speichern, wenden wir auf die Passwörter eine kryptografische Hashfunktion unserer Wahl an:

Was eine kryptografische Hashfunktion ist, wird in dem Beitrag zu Hashfunktionen und Informationssicherheit beschrieben. Dann speichern wir statt der Passwörter die resultierenden Hashwerte in der Datenbank:

Das Anmeldeverfahren ändert sich dadurch nur geringfügig. Wir melden uns immer noch auf die übliche Weise mit einem Kontonamen und einem Passwort an:

Der weniger naive Webdienst sucht zunächst wieder den Kontonamen aus der ausgefüllten Anmeldemaske in seiner Datenbank. Aber im nächsten Schritt unterscheidet sich das neue Verfahren. Wenn der Name in der Datenbank existiert, dann wird die Hashfunktion auf das Passwort aus der Anmeldemaske angewendet. Erst dann wird der resultierende Hashwert mit dem zugehörigen Hashwert in der Datenbank verglichen. Noch einmal: es werden nun nicht mehr die Passwörter miteinander verglichen sondern lediglich ihre Hashwerte. Wenn die Hashwerte übereinstimmen, dann wird die Anmeldung durchgeführt. Andernfalls wird die Anmeldung verweigert.
Bis auf den Einsatz der Hashfunktion hat sich an dem Anmeldeverfahren nichts geändert. Aus den Eigenschaften kryptografischer Hashfunktionen ergibt sich, dass der Vergleich der Hashwerte genauso gut ist wie der direkte Vergleich der Passwörter. Aber jetzt sind die Passwörter selbst nicht mehr in der Datenbank des Webdienstes gespeichert. Wer sich Zugriff auf die Datenbank verschafft – befugt oder unbefugt – hat keinen Zugriff auf die Passwörter mehr, sondern nur noch auf deren Hashwerte. Der oben beschriebene ökonomische Anreiz dafür, die Passwörter aus der Datenbank eines Webdienstes zu stehlen, ist damit beseitigt, denn die Passwörter sind nun nicht mehr in der Datenbank enthalten.
Wie funktioniert das in der Praxis?
Wir hoffen, dass wir verständlich machen konnten, wie es möglich ist und warum es gängige Praxis ist, dass sichere Webdienste unsere Passwörter, die wir bei der Anmeldung verwenden, gar nicht kennen. In der Praxis wird die Sicherheit dieses Verfahrens noch weiter erhöht, indem die Hashwerte mit einer spezialisierten kryptografischen Hashfunktion (bcrypt) erzeugt und zusätzlich vor der Anwendung dieser Hashfunktion mit einer datenbankweiten, geheimen Zeichenkette (salt) verknüpft werden. Darauf möchten wir aber an dieser Stelle nicht eingehen.
Sie haben Ihr Passwort vergessen?
Wenn Sie Ihr Passwort für einen Webdienst vergessen haben, können Sie bei den meisten Webdiensten eine Zurücksetzung des Passwortes anfordern. Sie erhalten dann per E-Mail einen Link, der Sie auf ein Formular führt, womit Sie ein neues Passwort festlegen können. Wir wissen jetzt, warum das so umständlich gehandhabt wird: der Webdienst kennt Ihr altes Passwort nicht. Leider folgen immer noch nicht alle Unternehmen dieser etablierten Sicherheitspraxis. Wenn Sie per E-Mail oder im Telefonat mit einem Support-Team angeben, dass Sie Ihr Passwort vergessen haben, und daraufhin tatsächlich Ihr Passwort mitgeteilt bekommen, können Sie daraus schließen, dass dieses Unternehmen sich nicht an moderne Standards der Informationssicherheit hält. Spätestens dann sollten Sie unbedingt sicherstellen, dass Sie dieses Passwort in keinem anderen Zusammenhang verwenden. Um konsequent für jeden Webdienst ein eigenes Passwort zu verwenden, sollten Sie einen Passwort-Manager einsetzen. Dann müssen Sie sich kein einziges Passwort mehr merken und können hochwertige Zufallspasswörter verwenden. Für die populären Passwort-Manager gibt es Webbrowser-Plug-ins, die sogar die Anmeldemasken Ihrer Webdienste für Sie ausfüllen. Selten treffen Bequemlichkeit und Sicherheit so schön aufeinander.