Passwörter wie verschlüsseln? Ist md5 gut?
Hendrik
- php
Hey!
Ich möchte die Passwörter meiner User verschlüsseln lassen, bevor sie in die Datenbank gespeichert werden. Dazu dachte ich mir, verwende ich md5. Allerdings wurde die Unsicherheit von md5 in diesem Thread angeschnitten. Nun wollte ich noch einmal die Profis fragen:
Ist md5 zum Verschlüsseln von Passwörtern sicher? Wenn nein, welche Alternativen gibt es? Sollte/Kann ich gut gesalzenes crypt verwenden?
Hendrik
Ich denke, das nichts gegen MD5 als Hashfunktion für unwichtigere Passwörter auf Webseiten oder so spricht. Sicher kann man mit etwas Zeitaufwand und Rainbowtables und ähnlichem auch md5 knacken, aber da ich auch davon ausgehe, dass du die gehashten Passwörter nicht veröffentlichst, sollte das kein großes Problem sein. Du kannst beim md5 natürlich auch den Verschlüsselungstext künstlich verlängern (z.B. durch anhängen von immer dem gleichen Text, der natürlich auch nicht veröffentlich werden sollt), was evtl. das Entschlüsseln erschweren kann.
Als alternatives Hashverfahren kann ich sonst nur SHA-1 erwähnen. Davon sind allerdings auch kleinere Sicherheitsprobleme bekannt.
Hallo
ich benutze eine Kombination, zurest sha1 und dann md5, du kannst datürlich auf die erste hälfte des wortes md5 und die zweite sha1 machen, das ist dann auch ein bischen kreativer als nur immer md5 anzuwenden.
Grüße
www.legal-help.eu
Ich denke, das nichts gegen MD5 als Hashfunktion für unwichtigere Passwörter auf Webseiten oder so spricht. Sicher kann man mit etwas Zeitaufwand und Rainbowtables und ähnlichem auch md5 knacken, aber da ich auch davon ausgehe, dass du die gehashten Passwörter nicht veröffentlichst, sollte das kein großes Problem sein. Du kannst beim md5 natürlich auch den Verschlüsselungstext künstlich verlängern (z.B. durch anhängen von immer dem gleichen Text, der natürlich auch nicht veröffentlich werden sollt), was evtl. das Entschlüsseln erschweren kann.
Als alternatives Hashverfahren kann ich sonst nur SHA-1 erwähnen. Davon sind allerdings auch kleinere Sicherheitsprobleme bekannt.
Hey!
ich benutze eine Kombination, zurest sha1 und dann md5, du kannst datürlich auf die erste hälfte des wortes md5 und die zweite sha1 machen, das ist dann auch ein bischen kreativer als nur immer md5 anzuwenden.
Vielen Dank für die Antworten. Ich denke, letzteres werde ich auch machen!
Hendrik
hi,
Du kannst beim md5 natürlich auch den Verschlüsselungstext künstlich verlängern (z.B. durch anhängen von immer dem gleichen Text, der natürlich auch nicht veröffentlich werden sollt), was evtl. das Entschlüsseln erschweren kann.
Wirklich "entschlüsselt" wird bei solchen Attacken nicht - kann ja auch gar nicht, weil MD5 eben nur einen Hash darstellt, mehrere unterschiedliche Eingabedaten können also durchaus das gleiche Ergebnis liefern.
Und deshalb bringt es keine zusätzliche Sicherheit, wenn du an das Passwort vor dem hashen noch irgendwas anhängst - niemand schert sich um das "Original", sondern für eine erfolgreiche Attacke ist es lediglich erforderlich, einen Wert zu finden, der das gleiche Ergebnis liefert.
gruß,
wahsaga
Moin!
Und deshalb bringt es keine zusätzliche Sicherheit, wenn du an das Passwort vor dem hashen noch irgendwas anhängst - niemand schert sich um das "Original", sondern für eine erfolgreiche Attacke ist es lediglich erforderlich, einen Wert zu finden, der das gleiche Ergebnis liefert.
Doch, Prä- oder Suffixe verhindern die Angreifbarkeit über Rainbow-Tabellen. Insbesondere dann, wenn sie selbst so gewählt sind, dass sie vernünftig lang und hinreichend zufällig sind. SOzusagen als Salzersatz.
- Sven Rautenberg
hi,
Doch, Prä- oder Suffixe verhindern die Angreifbarkeit über Rainbow-Tabellen. Insbesondere dann, wenn sie selbst so gewählt sind, dass sie vernünftig lang und hinreichend zufällig sind. SOzusagen als Salzersatz.
Stimmt, das ist ein gutes Argument.
gruß,
wahsaga
Hallo,
Doch, Prä- oder Suffixe verhindern die Angreifbarkeit über Rainbow-Tabellen. Insbesondere dann, wenn sie selbst so gewählt sind, dass sie vernünftig lang und hinreichend zufällig sind. SOzusagen als Salzersatz.
Was darf man unter vernünftig lang und hinreichend Zufällig verstehen?
Gruß, Tomas
Moin!
Doch, Prä- oder Suffixe verhindern die Angreifbarkeit über Rainbow-Tabellen. Insbesondere dann, wenn sie selbst so gewählt sind, dass sie vernünftig lang und hinreichend zufällig sind. SOzusagen als Salzersatz.
Was darf man unter vernünftig lang und hinreichend Zufällig verstehen?
Das Problem mit Rainbow-Tabellen ist, dass dort für typische Passworte die zugehörigen MD5-Hashes gespeichert sind, so dass man eine Rückwärtssuche machen kann, um zu einem MD5-Hash in nahezu keiner Zeit (Google ist schließlich auch sehr fix) wieder eines der möglichen Passworte zu finden.
Angenommen, das Passwort zu dem bekannten Hash x lautet "stamm". Dann wäre es blöd, wenn man als Präfix "baum" nimmt, weil "baumstamm" ebenfalls ein mögliches, in Rainbowtabellen auffindbares Passwort ist, so das man auch zu dem aus "baumstamm" entstehenden Hash y den möglichen Eingangswert sehr schnell findet.
Rainbowtabellen sind in ihrem Umfang begrenzt. Es ist technisch nicht möglich, zu allen denkbaren MD5-Hashwerten auch nur einen einzigen Eingangswert zu speichern, dazu ist der Wertebereich einfach zu riesig, selbst wenn man auf atomarer Ebene arbeitet und das gesamte Universum dafür benutzt. Deshalb sollte der Präfix eben hinreichend lang sein (ich behaupte mal, dass 8 Zeichen schon ausreichen, denn 8 Zeichen plus das Passwort selbst übersteigt dann mit hoher Wahrscheinlichkeit den Speicherbereich existierender Rainbowtabellen), und hinreichend zufällig (wenn ich echte Worte wie "baum" vermeiden kann, sondern etwas wie "gq§Tz87+@" nehme, gerate ich kaum zufällig in die Gefahr, ein zusammensetzbares sinnvolles Wort zu generieren, dass vielleicht trotz seiner Länge in einer Rainbowtabelle steht).
- Sven Rautenberg
Hallo,
vielen Dank für die ausführliche Darstellung der Problematik.
Gruß, Tomas
hi,
Angenommen, das Passwort zu dem bekannten Hash x lautet "stamm". Dann wäre es blöd, wenn man als Präfix "baum" nimmt, weil "baumstamm" ebenfalls ein mögliches, in Rainbowtabellen auffindbares Passwort ist, so das man auch zu dem aus "baumstamm" entstehenden Hash y den möglichen Eingangswert sehr schnell findet.
Die Hashes von "stamm" und "baumstamm" dürften wenig "Ähnlichkeit" aufweisen - sonst wäre die Hash-Funktion Murks.
Angenommen, ich habe vor das Passwort "stamm" noch mein Präfix "baum" davorgesetzt, habe also den Hash von "baumstamm" gespeichert, und der sei x.
Meinst du jetzt, wenn du in deiner Tabelle nachschlägst, und zum Eintrag "baumstamm" den Hash x findest, dann sei es ein leichtes, durch auszuprobieren darauf zu kommen, dass "stamm" das "richtige" Passwort für diese Anwendung ist, in dem du z.B. es erst nur mit dem Wortteil "baum" und dann mit "stamm" versuchst?
Eine andere Art von Schwachstelle kann ich da nicht entdecken - oder kennst du eine weitere?
gruß,
wahsaga
Hallo wahsaga,
Meinst du jetzt, wenn du in deiner Tabelle nachschlägst, und zum Eintrag "baumstamm" den Hash x findest, dann sei es ein leichtes, durch auszuprobieren darauf zu kommen, dass "stamm" das "richtige" Passwort für diese Anwendung ist, in dem du z.B. es erst nur mit dem Wortteil "baum" und dann mit "stamm" versuchst?
Wenn er zu einem Hash die dazugehörige Klartext-Zeichenkette hat, ist es eh nicht mehr viel Aufwand, mögliche Prefixe oder Suffixe auszuprobieren.
Was Sven aber meinte ist, dass es sehr viel wahrscheinlich, dass der Angreifer in seiner Rainbow-Tabelle den Hash für "baumstamm" gespeichert hat, als dass er einen Hash zu "8l~/stamm" gespeichert hat.
Schöne Grüße,
Johannes