Hashing vs. Verschlüsselung: Wie Ihr Passwort auf dem Server gespeichert wird

Angenommen, Sie richten ein Konto bei VerySecureWebsite.com ein. Sie geben Ihre E-Mail-Adresse und Ihr Passwort ein und richten Ihr Konto ein. Kurz darauf erhalten Sie eine E-Mail, in der Sie ironischerweise darüber informiert werden, dass die Webseite gehackt wurde und die Benutzernamen sowie Passwörter aller Benutzer, die im Klartext gespeichert waren, jetzt im Darknet verkauft werden. Während Sie beginnen, das Passwort für all Ihre Konten zu ändern (Sie verwenden schließlich nur eines, Sie Ungeheuer), fragen Sie sich: „ Ist das nicht eine schlechte Idee? Sollten meine Passwörter nicht in einer Art geheimem Code vorliegen, damit Hacker sie nicht einfach lesen können? ”
Sie liegen richtig. Jede Webanwendung oder Dienst, der ein Benutzername/Passwort-Anmeldesystem verwendet, sollte die Passwörter seiner Nutzer mit einem gesalzenen Hash speichern, möglicherweise sogar mit einem gesalzenen langsamen Hash, eventuell mit einem Pepper. Falls sich das mehr nach Frühstück als nach Kryptographie anhört, keine Sorge: Im Gegensatz zu Ihrem Passwort (hoffentlich) ist die sichere Passwortspeicherung kein allzu schwieriges Thema.
Auch lesen: Warum Einschränkungen bei Website-Passwörtern Sie nicht sicher halten
Klartext und grundlegende Verschlüsselung

| Benutzername | Eingetragenes Passwort | Gespeicherte Form |
|---|---|---|
| UnwittingUser | WeakPassword | WeakPassword |
Klartext-Passwörter in einer internetverbundenen Datenbank zu speichern, ist eine ziemlich schlechte Idee: Wenn die Datenbank gehackt wird, ist jeder, der eines dieser Passwörter wiederverwendet hat, gefährdet. Und doch tun es immer noch eine erschreckend große Zahl von Websites, wahrscheinlich weil Sicherheitsupgrades mehr für den Kunden als für das Unternehmen gedacht sind. Wenn Sie testen möchten, ob eine Seite dies tut, versuchen Sie die Option „Passwort vergessen“. Wenn sie Ihnen einfach Ihr Passwort anstatt eines Reset-Links senden, wird es im Klartext gespeichert.
| Benutzername | Eingetragenes Passwort | Verschlüsselt mit AES-128 Schlüssel: WeakKey |
|---|---|---|
| UnwittingUser | WeakPassword | 38MkoXVXoKe01uAOROBLpQ== |
Verschlüsselung mag wie eine starke Methode erscheinen, um Passwörter zu speichern, aber sie ist eigentlich nur ein Schritt über Klartext hinaus. Ein verschlüsseltes Passwort kann normalerweise mit einem Schlüssel decodiert werden, und wenn die Hacker diesen finden oder erraten, ist die Verschlüsselung nutzlos.
Hashing > Verschlüsselung

| Benutzername | Eingetragenes Passwort | Zu hashender String | Mit SHA-256 gehasht |
|---|
| UnwittingUser | WeakPassword | WeakPassword | 252E2406732308F9A7
B378ED94E78467D14
077D19C8282443FCD
3D6190FCABFA |
Eine Hash-Funktion ist im Grunde genommen einfach eine Einweg-Verschlüsselung: Sie konvertieren das Klartext-Passwort in ein geheimes Codewort, aber es gibt keinen Schlüssel, um es zurückzukonvertieren, was bedeutet, dass Sie das tatsächliche Passwort aus der gehashten Version niemals ableiten können.
So verwalten die meisten sicheren Websites ihre Passwörter:
- Der Benutzer erstellt ein Konto
- Das Passwort des Benutzers wird durch die Hash-Funktion geleitet und in der Datenbank gespeichert
- Jedes Mal, wenn der Benutzer sich anmeldet, wird das Passwort, das er eingegeben hat, gehasht und die Datenbank prüft, ob der eingegebene Hash mit dem Hash übereinstimmt, den sie in ihren Unterlagen hat.
- Wenn dies der Fall ist, kann sich der Benutzer anmelden
Bei einem Hash speichert die App/Website Ihr tatsächliches Passwort nirgends, und ein Hacker, der einbricht, erhält lediglich eine Liste von Buchstaben und Zahlen, die nicht dekodiert werden können. Je nach Stärke des Algorithmus können diese Hashes recht schwierig zu knacken sein.
Hashes sind jedoch nicht unknackbar. Ein Angreifer muss nur ein Wörterbuch mit potenziellen Passwörtern durch die Hash-Funktion leiten und dann diese Hashes mit den Hashes in der Datenbank vergleichen. Wenn zwei Hashes übereinstimmen, kann der Hacker einfach schauen, welches Passwort diesen Hash erzeugt hat.
Um Zeit und Rechenleistung zu sparen, verwenden viele Angreifer einfach eine Lookup-Tabelle (oder eine „Regenbogentabelle“, eine platzsparende Variante von Lookup-Tabellen), eine vorab generierte Tabelle voller potenzieller Passwörter und deren Hashes. Sie können tatsächlich versuchen, ein Klartext-Wort zu hashen und dann selbst eine Lookup-Tabelle auf den Hash anzuwenden; es ist nicht allzu schwer. Grundsätzlich, wenn Ihr Passwort auch nur ein wenig verbreitet ist, befindet sich der Hash dieses Passworts wahrscheinlich bereits in einer Lookup-Tabelle. Das ist ein großartiger Grund, keine gängigen Passwörter zu verwenden.
Auch lesen: Erstellen Sie ein starkes Passwort mit diesen Tipps und Tools
Gesalzene Hashes > Hashes

| Benutzername | Eingetragenes Passwort | Zu hashender String | Mit SHA-256 gehasht,
salz = XcyKn42, vorangestellt | | — | — | — | — | | UnwittingUser | WeakPassword | XcyKn42WeakPassword | 13EB660FF7FBD29A728FC5
92297D78DF19AFF8797363
15FBF1F1C4B7123BD10C |
Anders als Schneckeneier macht Salz Hashes stärker. Da sich der gesamte Hash ändert, selbst wenn nur ein Buchstabe des Klartextwortes geändert wird, muss eine Seite nur etwas zusätzliches Klartext zu dem Passwort vor dem Hashen hinzufügen, um Lookup-Tabellen zu vereiteln. Der Angreifer kann das Klartext-Salz lesen, da es in der Datenbank gespeichert ist, aber es zwingt ihn, jede mögliche Kombination aus potenziellen Passwörtern und Salzen neu zu berechnen.
Natürlich können gesalzene Hashes immer noch geknackt werden. Hacker können einfach das Salz zu dem Passwort hinzufügen, das sie erraten, die Kombination hashen und auf Übereinstimmungen warten – ein Standard-Wörterbuchangriff. Da moderne GPUs Milliarden von Vermutungen pro Sekunde durchführen können, ist dies überhaupt nicht unrealistisch, macht den Prozess jedoch erheblich mühsamer. Andernfalls sind Brute-Force-Angriffe langsam, aber sehr effektiv.
Hashes noch stärker machen: andere Taktiken

| Benutzername | Eingetragenes Passwort | Zu hashender String | Mit Bcrypt gehasht,
salz = XcyKn42, vorangestellt,
12 Runden | | — | — | — | — | | UnwittingUser | WeakPassword | XcyKn42WeakPassword | $2y$12$6OleutQBO2iPoNvg
pyDndOU26Lqt9Y34f6PLEOx
mCELP5GoswrJT. |
Langsame Hashing-Algorithmen, wie PBKDF2 oder bcrypt, verwenden eine Technik, die als „Key Stretching“ bekannt ist, um Wörterbuch- und Brute-Force-Angriffe zu verlangsamen. Dies bedeutet im Wesentlichen, dass die Hash-Funktion so eingestellt wird, dass sie eine bestimmte Anzahl von Durchläufen dieser Art (obwohl es etwas komplexer ist als einfach dasselbe immer wieder zu machen), sodass Sie eine Menge Rechenleistung aufwenden müssen, um den richtigen Hash zu erreichen. Wenn eine Seite dies alles tut, ist ihre Sicherheit ziemlich gut.
| Benutzername | Eingetragenes Passwort | Zu hashender String | Mit Bcrypt gehasht,
salz = XcyKn42, vorangestellt,
12 Runden,
pepper = |4|\/|@p3pp3r, angehängt | | — | — | — | — | | UnwittingUser | WeakPassword | XcyKn42WeakPassword|4|\/|@p3pp3r | $2y$12$njmWr5UMydCzdCE44ElW/
OIfYp2PH9sgonCATyVY.OVKSpmoSaZlu |
Zur zusätzlichen Sicherheit können Sie Ihre Hashes auch „peppen“ – die hoffentlich bereits gesalzen sind. Ein Pepper, ähnlich wie ein Salz, ist eine Menge von Werten, die dem Passwort vor dem Hashen hinzugefügt werden. Im Unterschied zu einem Salz gibt es jedoch nur einen einzigen Peppwert, und er wird geheim gehalten, getrennt von den Salzen und Hashes. Es fügt eine weitere Sicherheitsstufe zu dem gesalzenen Hash hinzu, aber wenn es dem Angreifer gelingt, ihn zu finden, ist er nicht mehr sehr nützlich, da der Angreifer ihn einfach verwenden kann, um neue Lookup-Tabellen zu berechnen.
Machen Sie keinen Hash aus Ihrem Hash
Die Passwortsicherheit hat einige große Fortschritte gemacht – und so auch die Kunst, diese Sicherheit zu knacken. Leider sind Menschen immer noch schlecht im Passwortmanagement, und Datenbanken aktualisieren die Sicherheit nicht so häufig, wie sie sollten. Im Allgemeinen sollte man davon ausgehen, dass das Passwort, wann immer Sie ein Konto erstellen, mit relativ schwacher Sicherheit gespeichert wird. Wenn Ihr Passwort häufig oder ein Wörterbuchwort ist, ist es einem ziemlich hohen Risiko ausgesetzt, gecrackt zu werden. Gestalten Sie Ihre Passwörter lang, indem Sie Buchstaben, Zahlen und Symbole mischen, und Sie helfen den Hash-Funktionen, ihre beste Arbeit zu leisten.
Bildnachweis: Hash-Funktion