Hash ist eine Prüfsumme
über einen String
über eine Datei
es gibt verschiedene mathematisch Verfahren - MD5, SHA1 usw.
ein immer gleicher Ausgangswert (Datei/String) ergibt immer den selben Hash-Wert
in der Regel sind Hashes kollisionsfrei
Passwörter und Hashes
Um Passwörter nicht übertragen zu müssen und auch nicht in Datenbanken speichern zu müssen als Klartext, werden häufig nur Hash-Werte gespeichert/übertragen.
Prinzip:
In der Datenbank des Ziels (zum Beispiel Forum) steht nur der Hash-Wert des Passwortes
die sich anmeldende Anwendung (zum Beispiel Browser oder Voice-over-IP-Telefon) erfragt das Passwort beim Anwender
die Anwendung (Browser/Voip-Client) bildet den Hash-Wert über das Passwort
die Anwendung sendet den Hash-Wert an das Ziel/Server
der Server/Ziel vergleicht den Hash-Wert in der Datenbank mit dem Empfangenen
Das funktioniert weil:
Client und Server das gleiche verfahren zum errechnen des Hash verwenden
ein bestimmter Klartext-String/Passwort immer den gleichen Hash-Wert ergibt
keine zwei Klartext-Strings/Passwörter den gleichen Hash-Wert ergeben
Es bietet folgende Vorteile:
Es ist ein schwacher Schutz, weil:
Rainbow-Tables
Regenbogen-Tabellen → ein Regenbogen enthält alle Farben des Regenbogens → eine Rainbow-Tabelle alle möglichen Passwortkombinationen
man bildet für alle Passwortkombinationen die enstprechenden Hash-Werte
Anchließend kann man anhand der Tabelle einfach geklaute Hashes (die Datenbank oder abgehörte) gegen die Tabelle abgleichen und erhält anhand des Hashes das Klartext-Passwort
Bei Hash-Werte ergibt ein Ausgangsstring/-Wert - zum Beispiel ein Passwort - immer den gleichen Hash-Wert.
Hash-Werte wiederholen sich nicht - das heißt sie sind Ein-Eindeutig (Ein Hash == ein Ausgangswert) - es gibt nicht zwei unterschiedliche Ausgangswerte die den gleichen Hash-Wert ergeben.
Der Hash-Wert enthält nicht genügend Informationen um den Ausgangswert zurück zu rechnen.
Man kann das Passwort also nicht direkt aus dem Hash erhalten, aber da der Hashgenau zu einem Passwort gehört, kann man einfach alle möglichen Passwortkombinationen errechnen und für jede mögliche Kombination den dazugehörigen Hash-Wert.
Den Aufwand muss man nur einmal machen und erhält eine Tabelle für das jeweilige Hash-Verfahren mit der man alles Hash-Werte dem richtigen Passwort zuordnen kann.
Salting/Gegenmaßnahmen
Erschweren der Nutzung von Rainbow-Tabellen,in dem das Passwort durch eine zufällig generierte Zeichenkette verlängert wird und dann der Hash gebildet
der Aufwand der Rainbow-Tabelle steigt durch die längere gewordenen Passwörter
der Aufwand der Rainbow-Tabelle steigt durch den Zufallswert
Das knacken des Hash wird nicht unmöglich, nur aufwendiger
Technischer Ablauf (Datenbank):
Passwort im Klartext wird um Zufallswert erweitert
Hash wird über Klartextpasswort+Zufallswert gebildet
Hash und Zufallswert (im Klartext) werden in der Datenbank gespeichert
Passwörter die im Klartext angeliefert werden
Passwörter gehast übers Netzwerk
der Zufallswert ausder Datenbank wird dem Client gesendet
der Client hängt den Zufallswert an das Passwort an
Client bildet über Klartext-Passwort+Zufallswert den Hash-Wert
Client sendet Hash-Wert → Server prüft ihn gegen den in der Datenbank gespeicherten
Technischer Ablauf (Netzwerkkomunikation):
Server sendet Zufallswert (neu generiert oder aus Datenbank)
Client hängt Zufallswert an Klartext-Passwort an
Client bildet Hash-Wert
Client sendet Hash-Wert an Server
wenn Server Passwort im Klartext hat
Server hängt Zufallswert an Klartextpasswort
Server bildet Hash über Klartextpasswort + Zufallswert
Server vergleicht beide Hash-Werte
wenn Server Passwort nur als Hash hat