héros bg sans séparateur
Directives

Speicherung von Passwörtern

Wenn Ihre Anwendung Benutzer authentifiziert, wird sie wahrscheinlich auch mit Passwörtern umgehen.

Der Umgang mit Benutzerkennwörtern ist eine wirklich große Sache, und der angemessene Umgang mit ihnen ist noch wichtiger.

Es ist schwer, sich ein schlimmeres Szenario vorzustellen, als wenn eine Anwendung angegriffen wird und Benutzerpasswörter für alle sichtbar im Internet durchgesickert sind. Persönlich schaudern wir bei dem Gedanken. Wie können Passwörter also sicher und gemäß den besten Praktiken gespeichert werden? Schauen wir uns ein paar Möglichkeiten an.

Verschlüsselung versus Hashing

Oberflächlich betrachtet könnte man denken, dass Verschlüsselung nach einer guten Lösung für die sichere Passwortspeicherung klingt, aber sich vollständig darauf zu verlassen, könnte etwas problematisch sein.

Verschlüsselung ist von Natur aus eine bidirektionale Funktion, was natürlich bedeutet, dass genauso wie ein Passwort verschlüsselt werden kann, es auch entschlüsselt. Vollkommen logisch, oder? Wie könnten Sie sonst überprüfen, ob das Passwort eines Benutzers mit dem in der Datenbank gespeicherten übereinstimmt?

Die Fähigkeit, Passwörter zu entschlüsseln, ist also auch eine ziemlich große Belastung. Wenn jemand einen Server kompromittiert und einen Passwort-Chiffretext erhält, besteht eine gute Chance, dass er auch an das Schlüsselmaterial gelangt, das zur Entschlüsselung dieser Passwörter benötigt wird.

Hashing hingegen eignet sich aufgrund seines Einwegcharakters weitaus besser für Passwörter. Sobald Sie etwas gehasht haben, gibt es keine Funktion, um den Chiffretext direkt wieder in den ursprünglichen Klartext umzuwandeln. Aufgrund dieser Eigenschaft eignen sich Hashes hervorragend für den Schutz von Passwörtern.

Nicht alle Hashes werden gleich erstellt

Wenn Sie sich einmal für das Hashing von Passwörtern für den Speicher entschieden haben, ist es auch nicht mehr so einfach, einfach eine Hash-Funktion anzuwenden und sie einen Tag lang aufzurufen.

Hashes gibt es in allen Formen und Größen, von denen die meisten angesichts der Fortschritte in der Computertechnologie der letzten zehn Jahre nicht gerade zum Speichern von Passwörtern geeignet sind.

Wie bereits erwähnt, können Hashes nicht rückgängig gemacht werden, da es sich um eine Einwegfunktion handelt. Das ist zwar technisch richtig, aber Hashing ist auch deterministisch, was bedeutet, dass sie auch anfällig für Brute-Forcing-Taktiken sind, die es einem Angreifer ermöglichen können, einen Hash potenziell in den ursprünglichen Klartext umzukehren, sofern genügend Zeit und Ressourcen zur Verfügung stehen.

Aus diesem Grund haben wir Hashing-Funktionen in zwei Kategorien aufgeteilt:

  • Kryptografische Hashes
  • Passwort-Hashes
Fonctionnalité Hachure cryptographique Hachure du mot de passe
Vitesse Très rapide Intentionnellement lent
Le facteur de travail peut être ajusté Non Oui

Ein wesentliches Merkmal von Passwort-Hashes ist, dass sie einen „Arbeitsfaktor“ haben (entweder durch eine einzelne Ganzzahl oder durch mehrere Parameter), der den Aufwand definiert, der für die Berechnung des Hashs erforderlich ist.

Da CPUs und GPUs im Laufe der Jahre immer schneller geworden sind, ist es einfacher geworden, massive Brute-Force-Angriffe gegen Hashes auf Verbraucherhardware durchzuführen, was bedeutet, dass ein Hash mit der Zeit immer weniger sicher werden kann.

Der „Arbeitsfaktor“ wird verwendet, um sicherzustellen, dass Hashes so gespeichert werden, dass sie den Branchentrends entsprechen. Wenn die Hardware schneller wird, erhöhen Sie den Arbeitsfaktor des Algorithmus, um sicherzustellen, dass die Entschlüsselung des Hashs mehr Zeit und Mühe in Anspruch nimmt. Nehmen wir als Beispiel 100 ms auf moderner Hardware an.

Dies bedeutet, dass der Arbeitsfaktor in der Praxis möglicherweise alle 2-3 Jahre erhöht werden muss.

Hachure cryptographique Hachure du mot de passe
MD5 bcrypt
SHA-1 scrypt
SHA-2 PBKDF2
SHA-3 Argon2