drescher: MD5 Verschlüsselung, wie soll das gehen?

N´ abend,

wie zum Pinguin funzt die MD5 Verschlüsselung?
Ich habe hier mal vor langer Zeit einen Thread gelesen der dieses Thema beschrieb.
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.
So, das habe ich nun ausprobiert.
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.
Also wie will Linux dann das Passwort erkennen?
Wie soll das gehen?
Im Thread stand das Linux das eingebene Passwort verschlüsselt und mit dem in der shadow datei befindlichen  passwort vergleicht.
Aber wie soll er was vergleichen oder erkennen wenn die Verschlüsselung sich ändert?
Hat das jemand antworten drauf?

  1. Hallo,

    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.

    Das ist richtig. MD5-Hashes werden z.b. auch benutzt um zu erkennen, ob sich Dateien ändern o.ä.

    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.

    ...was damit zusammenhängen könnte, dass die shadow-Datei nicht mit MD5 verschlüsselt wird :).
    Wäre auch problematisch, da MD5 glaube ich nicht 100%tig eindeutig ist, nur nahezu eindeutig.

    Für die UNIX/LINUX-Passwörter wird afaik crypt verwendet, und dieser Algorithmus kodiert die Tageszeit mit in die Verschlüssellung hinein.

    (vgl. http://www4.informatik.uni-erlangen.de/Lehre/SS02/PS_KVBK/talks/folien_sithglan.pdf, Seite 18)

    Viele Grüße,
    Jörg

    1. Hallo,

      ...was damit zusammenhängen könnte, dass die shadow-Datei nicht mit MD5 verschlüsselt wird :).

      Das ist Quattsch, wie ich gerade gelesen habe, streich das.

      Wäre auch problematisch, da MD5 glaube ich nicht 100%tig eindeutig ist, nur nahezu eindeutig.

      Das auch

      Für die UNIX/LINUX-Passwörter wird afaik crypt verwendet, und dieser Algorithmus kodiert die Tageszeit mit in die Verschlüssellung hinein.

      Aber das müsst stimmen.

      1. Für die UNIX/LINUX-Passwörter wird afaik crypt verwendet, und dieser Algorithmus kodiert die Tageszeit mit in die Verschlüssellung hinein.

        Aber das müsst stimmen.

        Nein, ist auch falsch.

        Crypt ist eine von mehreren Möglichkeiten, und heutzutage hoffentlich die seltenst genutzte aufgrund der beschränkten Passwortlänge von nur 8 Zeichen.

        Das Salz für Crypt wird aus einer Zufallsquelle generiert. Nur bei ganz miesen Pseudo-Zufallsquellen würde sowas wie "Uhrzeit" direkt in die Zahlgenerierung mit einfließen.

  2. 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
    1. 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.

      Das wäre schön, dann hätten wir die optimale Kompression wenn der eigene Rechner z.B. aus einem File-Hash die Datei rekonstruieren könnte.
      "Nein, ich lade doch kein 2,8 GB DVD-Image 'runter, wenn ich nur einen 50 Zeichen langen string brauche, aus dem mein rechner das Image errechnen kann". ^^