Wie werden Hash-Funktionen für Passwörter eingesetzt?

1 Antwort

Da du die Frage hier stellst, gehe ich davon aus dass dir die anderen Erklärungen im Internet zu kompliziert sind. Deswegen probiere ich es so einfach wie möglich...

Hash-Funktionen verwandeln einen beliebigen Input in einen Hash-Wert fest gelegter Größe wie z.B. 128 oder 256bit. Diese Hash-Werte erlauben es sogenannte Prüfsummen für alle möglichen Inputs zu erstellen.
Je größer der Hash-Wert, desto schwieriger ist es eine so genannte Hash-Collision zu finden.

Ein Beispiel für Passwörter:
Ich habe einen Server mit Login und muss die Login-Daten meiner User irgendwie abspeichern um bei jedem Login überprüfen zu können, dass sich die User mit ihren richtigen Daten (Username/Passwort) einloggen.
Nun möchte ich aber nicht das Passwort einfach so auf dem Server liegen haben, da im Falle eines Leaks alle Passwörter meiner User offen da liegen.
Also lasse ich die Passwörter durch eine Hash-Function laufen, welche mir jedes Passwort in einen Hash-Wert verwandelt. Kannst du hier mal testen:
http://hashgenerator.de/

Wenn ich z.B. mein Passwort "passwort123" auf meinem Server-Login durch eine SHA-256 Funktion laufen lasse wird der Hashwert "55789e79eca2f9a1e0786388b869f34f28a64ccbc37eb85ceeb031fd9677e06e" ausgegeben. Diesen Wert speichere ich ab, damit ist das Passwort vor etwaigen Leaks sicher und jedes mal wenn ich mich einlogge wird das übergebene Passwort wieder gehasht und nur die Hash-Werte werden verglichen. 

Einige Eigenschaften von Hash-Functions haben Vor- und Nachteile.

Egal wie lang der Input ist, es wird immer ein Wert fixer Größe ausgegeben.
Somit können Kollisionen auftreten, welche sich Angreifer zunutze machen können. Wie schon bereits gesagt, empfangen Hash-Function Inputs beliebiger Länge und speichern ihn, um bei unserem Beispiel zu bleiben, in einen Wert zwischen 0 und 2^256. Somit kann ein Angreifer einfach so lange neue Inputs übergeben, bis er zufällig den gleichen Hashwert erzeugt wie dein Passwort(unendlich große Inputs > 2^256 also logisch, dass es collisions gibt). Es gibt riesen Tabellen wo man nach Hashwerten suchen kann und nach Strings die diesen erzeugen. 

Ein klarer Vorteil, vor allem wenn es um Passwörter geht, liegt in der Eigenschaft dass Hash-Werte nicht mehr direkt in einen plaintext decoded werden können, was auch durch den fixen Output zustande kommt.

Ich hoffe das reicht dir an Eigenschaften und ich konnte dir ein bisschen weiterhelfen was Hashfunctions betrifft. Falls du noch Fragen hast frag einfach.

Liebe Grüße, JutenMorgen!

Was möchtest Du wissen?