it-swarm.com.de

Hashing-Passwort zur Erhöhung der Entropie

Ist es sicher, ein Kennwort zu hashen, bevor es in einer Anwendung verwendet wird, um die Kennwortentropie zu erhöhen?

Erhöht diese Vorgehensweise die Entropie, wenn ein PBKDF in der Anwendung selbst verwendet wird, oder erhöht das PBKDF selbst die Kennwortentropie?

Wenn ein zufälliges Passwort mit md5 gehasht wird, liefert die Ausgabe eine 128-Bit-Entropie?

BEARBEITEN: Das Ergebnis der Hash-Funktion soll als Kennwort für kryptografische Funktionen und Anwendungen wie AES-256, E-Mail und Zugriff auf Computersysteme verwendet werden.

Das verwendete Verfahren ist Passwort -> Hash des Passworts -> Anwendung

BEARBEITEN 2: Wenn beispielsweise eine E-Mail-Anwendung während der Registrierung ein Passwort anfordert, wird das beabsichtigte Passwort lokal gehasht, bevor es bereitgestellt wird.

14
AXANO

Nein, Sie erhöhen die Entropie nicht, indem Sie sie ein-, zweimal oder zehnmal hacken. Betrachten Sie die Entropie so, wie es aus der Eingabe und nicht aus der Ausgabe hervorgeht. Sie können Entropie nicht mit einem deterministischen Prozess hinzufügen, da die Entropie des Ergebnisses nicht zählt.

Auch wenn Sie einen Code wie diesen haben:

$password = "123456";
$result = md5($password) . sha1($password) . hash('gost', $password);
echo $result;  //   e10adc3949ba59abbe56e057f20f
// 8941b84cdecc9c273927ff6d9cca1ae75945990a2cb1f
// 81e5daab52a987f6d788c372

Und Sie erhalten eine beängstigend aussehende 136-Byte-Zeichenfolge. Das Kennwort lautet immer noch 123456, und jeder Angreifer, der Ihr Hash-Passwort brutal erzwingt, muss es im Durchschnitt nur einmal versuchen, als 123456 ist das schlechteste Passwort in fast jeder einzelnen Liste.

Wenn ein zufälliges Passwort mit md5 gehasht wird, liefert die Ausgabe eine 128-Bit-Entropie?

Nein, MD5 ist deterministisch. Wenn der Angreifer weiß, dass es sich bei der Zeichenfolge um einen MD5-Hash handelt, ist die Entropie davon die Entropie des von Ihnen angegebenen zufälligen Kennworts.

Um das Kennwort sicherer zu machen, verwenden Sie eine geeignete Schlüsselableitung ( PBKDF2 ist gut), fragen Sie den Benutzer nach einem längeren Kennwort und prüfen Sie, ob der Benutzer die grundlegenden Kennwortregeln befolgt (keine Zeichen werden wiederholt eine Reihe, richtige Länge, gemischte Ziffern und Zeichen, gemischte Groß- und Kleinschreibung, solche Dinge).

29
ThoriumBR

Eine Schlüsselableitungsfunktion erhöht die Entropie nicht, macht die Dinge jedoch sicherer. Ein KDF hat folgende Funktionen:

  • Es wird ein Schlüssel mit der richtigen Länge erstellt. Viele Verschlüsselungsalgorithmen haben eine feste Größe, z. B. 16 Byte. Mit einem KDF können Sie ein Passwort beliebiger Länge verwenden.
  • Es verteilt die Entropie des Passworts über den gesamten Schlüssel. Verschlüsselungsalgorithmen sollen mit zufällig aussehenden Schlüsseln arbeiten. Wenn du benutzt 1000000000000000 als Schlüssel kann dies zu Sicherheitsproblemen im Verschlüsselungsalgorithmus führen. Ein KDF verschlüsselt das Passwort in einen zufällig aussehenden Schlüssel.
  • Es braucht Zeit. Um Brute-Force-Angriffe zu verlangsamen, kann die Schlüsselableitung verlangsamt werden, sodass der Versuch, viele Kennwörter zu verwenden, unangemessen viel Zeit in Anspruch nimmt.
4
Sjoerd

TL; DR

Das Hashing eines falschen Passworts vor dem Senden an ein Server als Passwort ist zeitintensiver, unangenehmer und weniger sicher als ein einfacher Passwortmanager.

Die Frage scheint darauf abzuzielen, einen Hashing-Algorithmus als sehr einfachen Passwort-Manager zu missbrauchen .

Verwenden Sie einen echten oder einen echten Passwort-Manager.

Ich werde Ihr Beispiel verwenden, um zu zeigen, warum es eine schlechte Idee sein wird:

  • Sie haben das nicht so "entropiereiche" Passwort 1111111111111
  • es wird den Hash 9DCBF642C78137F656BA7C24381AC25B haben

Jetzt bekommt ein Angreifer irgendwie eine Datenbank, in der die Passwörter im Klartext vorliegen (was in der Vergangenheit oft passiert ist). Und warum auch immer, er wird dort versehentlich nach Hashes suchen, die Klartext kennen (das nicht so "entropie-reiche" Passwort ist eines davon). Jetzt weiß er, dass der Benutzer mit Ihrem Benutzernamen/Ihrer E-Mail-Adresse "1111111111111" und dann MD5 als Kennwort verwendet. Was ist dann der Nutzen, den Sie haben? Einen Schritt mehr muss jemand tun, aber sicherheitstechnisch gibt es keinen wirklichen Unterschied.

Hier der Unterschied, was in der realen Welt passieren könnte:

Ihren Weg:

ClearText - MD5 -> HashedClearText - an Server gesendet (HTTP (S)) -> | | - MD5/SHA */... -> HashedHashedClearText

Normaler Weg:

ClearText - an Server gesendet (HTTP (S)) -> | | - MD5/SHA */... -> HashedClearText

3
Serverfrog