Christian Seiler: MD5 Verschlüsselung, wie soll das gehen?

Beitrag lesen

Hallo,

wie zum Pinguin funzt die MD5 Verschlüsselung?

Gar nicht. MD5 ist keine Verschlüsselung, sondern ein Hash. Eine Verschlüsselung hat nämlich die Eigenschaft, dass man das Resultat wieder entschlüsseln kann, bei einem Hash soll das gerade nicht bzw. nur schwer möglich sein.

Dort war zu Lesen das ein Passwort z.B t1u34 immer den gleichen MD5 String bildet, es also nie vorkommen wird das diese Zeichenkette anders Verschlüsselt wird.

Der MD5-Hash von 't1u34' ist immer der gleiche, ja.

Ich habe in Linux 2 User angelegt mit den gleichen Passwort und mir mal die shadow datei Angeschaut, und siehe da die ersten paar Zeichen stimmen überein aber der Rest ca. 90% des Strings nicht.

Klar. Linux verwendet auch für das Hashing der Passwörter kein reines MD5. Bzw. es hängt von der Einstellung ab, ob überhaupt MD5 verwendet wird; verschiedene Linux-Varianten unterstützen sowohl DES-basierte Hashes (traditionelles crypt()), MD5 als auch SHA1. Allerdings werden die Hashes nicht in Reinform eingesetzt, sondern "gesalzen".

Also wie will Linux dann das Passwort erkennen?

Ganz einfach: Zusätzlich zum Passwort wird ein Zufallsstring (genannt "Salt") mit einer festen Länge erzeugt. Dieser wird an das Passwort abgehängt (oder umgekehrt) und das wird dann in die Hash-Funktion (z.B. MD5) gesteckt. Das Passwort-Feld in der Shadow-Datei setzt sich dann wie folgt zusammen:

Mechanismus-Kennzeichnung + Salt + Ergebnis der Hash-Funktion

Mechanismus-Kennzeichnung: Damit wird angegeben, welcher Hashing-Mechanismus verwendet wird, $1$ für MD5.

Salt: Der Salt im Klartext (d.h. nicht gehasht)

Im Thread stand das Linux das eingebene Passwort verschlüsselt und mit dem in der shadow datei befindlichen  passwort vergleicht.

So ist es. Aus dem gespeicherten Hash wird sowohl Mechanismus als auch Salt extrahiert und damit wird dann zusammen mit dem eingegebenen Klartextpasswort versucht, den Hash nachzubilden - das Ergebnis wird dann verglichen.

Der Grund, warum Salts verwendet werden, ist, dass man damit eben nicht so ohne weiteres an Hand des Hashes erkennen kann, welches Klartextpasswort jemand hat. Sonst könnte sich ja jemand eine Tabelle mit lauter Hashes zu Klartextpasswörtern anlegen und einfach nachsehen. Klar, das geht mit Salts auch, wenn man einfach jeden möglichen Salt berücksichtigt, aber dadurch vervielfacht sich die Datenmenge gewaltig und dieses Unterfangen wird dadurch dann nicht mehr praktikabel (wobei Rainbow-Tabellen für reines MD5 sowieso schon nicht wirklich praktikabel sind, die brauchen bis dato auch gewaltig Platz).

Viele Grüße,
Christian

--
"I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup