C
claW.
Gast
nein muss es nicht. die ausgangsbasis (=eingabe) ist immer noch die gleiche. per bruteforce muss somit nur das erste herausgefunden werden, da der zweite hash vom ersten abhängig ist. am einfachsten kann man das wohl so erklären: nach dem hände waschen, trocknest du dir die hände ab und zwar automatisch. genau das gleiche machst du nun hier im übetragenen sinne. wenn du das passwort oder was auch immer herausgefunden hast, wird dieser wert gehasht. dieser hash ist immer der gleiche (wenn wir vom passwort ausgehen). wenn du dies nun erneut hashst, dann hast du einen hash vom hash, welcher genauso immer der gleiche ist und vom 1. abhängig ist.
schwer zu erklären, vielleicht mal ein konkretes beispiel:
der (md5-)hash von "test" ist "098f6bcd4621d373cade4e832627b4f6". der hash vom hash ist "fb469d7ef430b0baf0cab6c436e70375". und nun der hash vom hash von test ist identisch zum hash vom hash "fb469d7ef430b0baf0cab6c436e70375". es bringt für die sicherheit also nichts, wenn man 2 mal hasht (außer erhöhte rechenlast). du könntest den hash nun 100 mal erzeugen, das ergebnis bleibt immer das gleiche, da die ausgangsbasis (das passwort) immer die gleiche ist und keine veränderung selbst intern vorgenommen wird. genauso bringt es nichts wenn du md5(sha1('abc')) anwendest, da dies genau aufs gleiche hinaus geht (auch md5('test'+sha1('abc')) bringt nichts).
rainbowtables umgeht man so auch nicht, sondern nur durch salted hashes (wie schon erwähnt wurde). salted hashes sind kurz gesagt hashes, in denen ein zufälliger, statischer, selbst ausgedachter term mit in den hash hinzugefügt wird. unbedachte seiten z.b. verwenden für den login lediglich einen "normalen" md5 hash vom passwort (md5('abc')), wodurch es hier möglich ist, durch rainbow tables zugriff zu einem x beliebigen nutzer zu erlangen. salted hashes realisierst du ganz einfach und ohne mehraufwand durch folgende anweisung: md5( 'dies wird ein salted hash, welcher in keiner rainbowtable zu finden sein wird. dabei bin ich mir sicher. ' + $passwort );. hierbei bezweifle ich schon, dass dieser hash irgendwo in einer rainbowtable gefunden werden kann. besser als solch ein zusatz, wäre es, ein definitiv sicheres passwort zu nehmen (sagen wir mal ein string mit groß- und kleinschreibung, zahlen und sonderzeichen) plus das passwort in einer annehmbaren großen länge. konkretes beispiel: md5( 'M!+fmfX4u+PFXv"&$8ZpikRFHegs:M-d' + $passwort );. hierbei müsste erst das erste "passwort" herausgefunden werden und zugleich das zweite (eigentliche) passwort ohne den zusatz. selbst wenn er das zweite, evtl. einfache passwort herausgefunden hätte, könnte er durch das erste definitiv sichere passwort, keinen zugriff zum system erlangen.
und nebenbei: md5( 'salted hash' + md5( 'test' ) ) ist nicht gleich md5( 'salted hash' + 'test' )!
ps: wenn es jemand besser erklären kann, dann schreibt drauf los. hab da immer so ein problem mit etwas auf einfache weise zu verdeutlichen.
schwer zu erklären, vielleicht mal ein konkretes beispiel:
der (md5-)hash von "test" ist "098f6bcd4621d373cade4e832627b4f6". der hash vom hash ist "fb469d7ef430b0baf0cab6c436e70375". und nun der hash vom hash von test ist identisch zum hash vom hash "fb469d7ef430b0baf0cab6c436e70375". es bringt für die sicherheit also nichts, wenn man 2 mal hasht (außer erhöhte rechenlast). du könntest den hash nun 100 mal erzeugen, das ergebnis bleibt immer das gleiche, da die ausgangsbasis (das passwort) immer die gleiche ist und keine veränderung selbst intern vorgenommen wird. genauso bringt es nichts wenn du md5(sha1('abc')) anwendest, da dies genau aufs gleiche hinaus geht (auch md5('test'+sha1('abc')) bringt nichts).
rainbowtables umgeht man so auch nicht, sondern nur durch salted hashes (wie schon erwähnt wurde). salted hashes sind kurz gesagt hashes, in denen ein zufälliger, statischer, selbst ausgedachter term mit in den hash hinzugefügt wird. unbedachte seiten z.b. verwenden für den login lediglich einen "normalen" md5 hash vom passwort (md5('abc')), wodurch es hier möglich ist, durch rainbow tables zugriff zu einem x beliebigen nutzer zu erlangen. salted hashes realisierst du ganz einfach und ohne mehraufwand durch folgende anweisung: md5( 'dies wird ein salted hash, welcher in keiner rainbowtable zu finden sein wird. dabei bin ich mir sicher. ' + $passwort );. hierbei bezweifle ich schon, dass dieser hash irgendwo in einer rainbowtable gefunden werden kann. besser als solch ein zusatz, wäre es, ein definitiv sicheres passwort zu nehmen (sagen wir mal ein string mit groß- und kleinschreibung, zahlen und sonderzeichen) plus das passwort in einer annehmbaren großen länge. konkretes beispiel: md5( 'M!+fmfX4u+PFXv"&$8ZpikRFHegs:M-d' + $passwort );. hierbei müsste erst das erste "passwort" herausgefunden werden und zugleich das zweite (eigentliche) passwort ohne den zusatz. selbst wenn er das zweite, evtl. einfache passwort herausgefunden hätte, könnte er durch das erste definitiv sichere passwort, keinen zugriff zum system erlangen.
und nebenbei: md5( 'salted hash' + md5( 'test' ) ) ist nicht gleich md5( 'salted hash' + 'test' )!
ps: wenn es jemand besser erklären kann, dann schreibt drauf los. hab da immer so ein problem mit etwas auf einfache weise zu verdeutlichen.
