DerDieDas: md5 decodieren?

Guten Abend, ich mal wieder ;)

Es gibt ja dieses tolle Modul Digest::MD5 was ein beliebigen Text in eine Prüfsumme verwandeln kann.
Geht es auch andersrum? Also von Prüfsumme zurück zum Text?
Ich denke mal eher nicht, sonst könnte es ja jeder zurück "verfolgen" aber vielleicht in dem selben Skript?

Habe beim "Ver"googeln etwas gelesen namens use Encode aber klappt nicht so ganz.

Was ich genau vorhabe kann ich nicht sagen, da ich es für nichts bestimmtes bräuchte aber mir schon öfters die Idee gelegen käme.

Lg,
DDD

  1. Lieber DerDieDas,

    diese Verschlüsselungen sind nicht umkehrbar, und das ist Absicht. Man kann aber zwei "Texte" auf dieselbe Art und Weise verschlüsseln. Kommt nach der Verschlüsselung das gleiche Ergebnis, waren die beiden "Texte" identisch.

    Was genau ist jetzt Dein Problem?

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hallo Felix,

      diese Verschlüsselungen sind nicht umkehrbar,

      bei MD5 handelt es sich nicht um eine Verschlüsselung.

      und das ist Absicht. Man kann aber zwei "Texte" auf dieselbe Art und Weise verschlüsseln. Kommt nach der Verschlüsselung das gleiche Ergebnis, waren die beiden "Texte" identisch.

      Nein, das ist falsch. Zum gleichen MD5-Wert gibt es beliebig viele Texte, auf die dieser MD5-Hash passt. Sonst könnte wäre die Menge der verschiedenen Texte endlich.

      Freundliche Grüße

      Vinzenz

      1. Lieber Vinzenz,

        bei MD5 handelt es sich nicht um eine Verschlüsselung.

        sorry, das hatte ich wohl mit crypt() verwechselt...

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Wow, meine Themen die ich hier verfasse werden ganz schnell voll ;)

          Habe mir das Wikipedia Beispiel angeschaut und mir ist es jetzt etwas klarer was bzw. wie MD5 funktioniert.

          Ich danke euch.

          1. Hallo, ich schon wieder :D

            Habe da noch eine frage: es fiel in dem Beitrag die Funktion crypt nun hab ich "rechachiert" und sehe das einige sowohl von md5 als auch von crypt vom Gebraucht abraten
            Ich möchte jetzt ein Passwort zum Beispiel verschlüsseln lassen was sollte ich dazu benutzen?
            Und wenn doch md5 oder crypt in frage käme, was würdet ihr mir raten?

            Danke im vorraus,

            Lg, DDD

            1. Habe da noch eine frage: es fiel in dem Beitrag die Funktion crypt nun hab ich "rechachiert" und sehe das einige sowohl von md5 als auch von crypt vom Gebraucht abraten
              Ich möchte jetzt ein Passwort zum Beispiel verschlüsseln lassen was sollte ich dazu benutzen?
              Und wenn doch md5 oder crypt in frage käme, was würdet ihr mir raten?

              Auf jeden Fall nichts Proprietäres oder Betriebssystem-beeinflusstes.
              md5 und sha1 sind durchaus tauglich für diese Zwecke.
              Ich selbst verwende sha1, das etwas längere Hashes erzeugt.

              mfg Beat

              --
              Woran ich arbeite:
              X-Torah
              ><o(((°>      ><o(((°>
                 <°)))o><                      ><o(((°>o
            2. Hallo DerDieDas,

              Habe da noch eine frage: es fiel in dem Beitrag die Funktion crypt nun hab ich "rechachiert" und sehe das einige sowohl von md5 als auch von crypt vom Gebraucht abraten
              Ich möchte jetzt ein Passwort zum Beispiel verschlüsseln lassen was sollte ich dazu benutzen?
              Und wenn doch md5 oder crypt in frage käme, was würdet ihr mir raten?

              MD5 und SHA-1 (was crypt macht, weiß ich gerade nicht) sind für normale Anwendungen völlig ausreichend, wenn man die Funktionen richtig einsetzt. Dazu gehört z.B., dass man Kennwörter nicht einfach so in die Hashfunktion steckt, sondern vorher Konstante oder zufällige Texte mit dem Kennwort verknüpft. Einfach damit das kennwort länger wird.

              Ansonsten lassen sich simple kennwörter mit 8 Zeichen oder weniger mit Hash-Listen, Rainbowtables usw. sehr schnell aus den Hashs zurückextrahieren.

              Jonathan

              1. MD5 und SHA-1 (was crypt macht, weiß ich gerade nicht) sind für normale Anwendungen völlig ausreichend, wenn man die Funktionen richtig einsetzt. Dazu gehört z.B., dass man Kennwörter nicht einfach so in die Hashfunktion steckt, sondern vorher Konstante oder zufällige Texte mit dem Kennwort verknüpft. Einfach damit das kennwort länger wird.

                und nicht so leicht kolisionen auf kurze, bekannte zeichenketten gefunden werden bzw es nicht so leicht möglich ist, rainbowtables zu durchsuchen

                Ansonsten lassen sich simple kennwörter mit 8 Zeichen oder weniger mit Hash-Listen, Rainbowtables usw. sehr schnell aus den Hashs zurückextrahieren.

                richtig - ABER wenn der salt (dieses anhängsel vor dem hashen) eine kurze zeichenkette ist, ist das ermitteln des klartextpasswords aus rainbowtables sehr leicht, auch wenn der salt nicht bekannt ist

                beispiel, der salt-wert ist "foo" und man verfügt über eine userdatebank mit irre vielen benutzern, hier gibts sicher ein paar helden die als passwörter abc, 123 usw verwenden - was dann die werte "abcfoo" und "123foo" ergibt - diese findet man wiederum schnell in verschiedenen rainbowtables - wenn der salt-wert bekannt ist, ist es sehr einfach die klartextpasswörter "zurückzurechnen" sofern das gesaltete passwort in der rainbow-tabelle vorkommt bzw man generiert eine neue damit

                angenommen zu einem hash existieren 3 mögliche klartexte in der rainbow tabelle und der salt "foo", der hinten angehängt wird, ist bereits bekannt:

                • geheim1
                • geheim2
                • und geheim3foo
                  in diesem fall ist es extrem unwahrscheinlich, dass "geheim3" nicht dass klartext passwort ist

                aus diesem grund sollte der salt-wert immer möglichst komplex (sonderzeichen) und lange sein, um potentiell einfache passwörter zu schützen und in weiter folge auch die komplexeren, die sich sonst nach bekanntwerden des hashes leichterer ermitteln ließen - eine rainbow-tabelle mit einem bekannten prä oder suffix bei den klartextphrasen ist wesentlich kleiner als eine generische ;)

                1. Hallo suit,

                  Ein Salt muss ja immer irgendwo im Klartext gespeichert sein, da man sonst das Passwort gar nicht prüfen könnte.
                  Meist steht das Salt sogar direkt mit unverschlüsselt in der Userdatenbank und zwar idealerweise ein eigenes für jeden Nutzer.
                  Das Salt verhindert damit nicht, dass man eine Rainbow-Tabelle aufbaut, sondern erzwingt nur, dass man dies tatsächlich machen muss und zwar für jeden Benutzer einzeln.
                  Damit wird die Aufgabe, die Nutzer mit den einfachen Passwörtern zu finden, schon deutlich schwieriger.

                  Grüße

                  Daniel

                  1. Ein Salt muss ja immer irgendwo im Klartext gespeichert sein, da man sonst das Passwort gar nicht prüfen könnte.
                    Meist steht das Salt sogar direkt mit unverschlüsselt in der Userdatenbank und zwar idealerweise ein eigenes für jeden Nutzer.
                    Das Salt verhindert damit nicht, dass man eine Rainbow-Tabelle aufbaut, sondern erzwingt nur, dass man dies tatsächlich machen muss und zwar für jeden Benutzer einzeln.
                    Damit wird die Aufgabe, die Nutzer mit den einfachen Passwörtern zu finden, schon deutlich schwieriger.

                    pro benutzer einen eigenen salt ist natürlich potentiell sehr sicher - üblich ist aber soweit ich im "gefühl" habe gar keinen salt zu verwenden oder für jedes passwort den selben salt

                    unter dem gesichtspunkt "jeder benutzer anderer salt" ist es natürlich ungleich schwieriger bzw wesentlich zeitaufwändiger (tendentiell "sehr lange")  das urpsprüngliche password herrauszufinden

                    nichts desto trotz ist ein bekannter salt-wert (ob pro benutzer oder global) ein extrem hilfreiches werkzeug, wenn es darum geht den tatsächlichen ungehashten ursprungswert zu finden

                    1. Hallo suit,

                      pro benutzer einen eigenen salt ist natürlich potentiell sehr sicher - üblich ist aber soweit ich im "gefühl" habe gar keinen salt zu verwenden oder für jedes passwort den selben salt

                      Ok, wenn man PHP-Scripts mit in die Statistik aufnimmt ;-) Meine Überlegung war nur, Linux macht es so, Apache macht es auch so, dürfte also eine anerkannte Methode sein.

                      Grüße

                      Daniel

                      1. Ok, wenn man PHP-Scripts mit in die Statistik aufnimmt ;-) Meine Überlegung war nur, Linux macht es so, Apache macht es auch so, dürfte also eine anerkannte Methode sein.

                        natürlich und die entsprechende "entschlüsselung" ist so rechenintensiv, dass es sich nicht auszahlt

                        aber es gibt viele öffentliche systeme in denen das password ohne salt gehasht wird (phpbb, matis, mediawiki,typo3) usw das ist ebenfalls "anerkannt"

                        nur sollte man als benutzer eben ein sicheres passwort wählen und nicht auf den "schutz" durch das system vertrauen

                    2. Hi,

                      nichts desto trotz ist ein bekannter salt-wert (ob pro benutzer oder global) ein extrem hilfreiches werkzeug, wenn es darum geht den tatsächlichen ungehashten ursprungswert zu finden

                      Bei der crypt()-Funktion von Perl ist der Salt-Wert eh identisch mit den 2 ersten Zeichen des erzeugten Hashs, also ist der Salt-Wert eh immer bekannt, wenn man den Hash hat.

                      mfG,
                      steckl

        2. Moin!

          bei MD5 handelt es sich nicht um eine Verschlüsselung.

          sorry, das hatte ich wohl mit crypt() verwechselt...

          Hast du nicht, auch crypt() ist, obwohl der Name es vielleicht nahelegt, keine Verschlüsselung, sondern auch ein Hashwert.

          - Sven Rautenberg

          --
          "Love your nation - respect the others."
          1. Hi,

            bei MD5 handelt es sich nicht um eine Verschlüsselung.

            sorry, das hatte ich wohl mit crypt() verwechselt...

            Hast du nicht, auch crypt() ist, obwohl der Name es vielleicht nahelegt, keine Verschlüsselung, sondern auch ein Hashwert.

            Kann es sein, dass es sich bei crypt() irgendwie um eine Mischform handelt?
            Ich habe in mehreren Beschreibungen zu crypt() (u.a. hier und hier) gelesen, dass crypt() irgendwie den Data Encryption Standard anwendet, um Strings zu "verschlüsseln". DES (nicht zu verwechseln mit dem bayerischen Wort für "dieses";) ist aber ein Verschlüsselungsalgorithmus.
            Kann man hier also wirklich von einem Hash-Verfahren sprechen?

            mfG,
            steckl

            1. Tach,

              Kann es sein, dass es sich bei crypt() irgendwie um eine Mischform handelt?
              Ich habe in mehreren Beschreibungen zu crypt() (u.a. hier und hier) gelesen, dass crypt() irgendwie den Data Encryption Standard anwendet, um Strings zu "verschlüsseln". DES (nicht zu verwechseln mit dem bayerischen Wort für "dieses";) ist aber ein Verschlüsselungsalgorithmus.

              DES wurde von crypt genutzt um einen Hash zu erzeugen: http://en.wikipedia.org/wiki/Crypt_(Unix)#Traditional_DES-based_scheme.

              mfg
              Woodfighter

  2. Hallo,

    Es gibt ja dieses tolle Modul Digest::MD5 was ein beliebigen Text in eine Prüfsumme verwandeln kann.
    Geht es auch andersrum? Also von Prüfsumme zurück zum Text?

    Nein. Stell Dir vor, Du erzeugst einen MD5-Hash des aktuellen Wikipedia-Inhaltes. Glaubst Du, aus diesen paar Bytes den gesamten Inhalt verlustlos wiederherstellen zu können?

    Außerdem: Wieviele verschiedene Texte könnte es nur geben?

    Freundliche Grüße

    Vinzenz

    1. Grüße,

      Nein. Stell Dir vor, Du erzeugst einen MD5-Hash des aktuellen Wikipedia-Inhaltes. Glaubst Du, aus diesen paar Bytes den gesamten Inhalt verlustlos wiederherstellen zu können?

      wäre DIE kompression - man könnte eine ganze videothek in ein notizbüchlein packen ;)

      MFG
      bleicher

      1. Hi,

        wäre DIE kompression - man könnte eine ganze videothek in ein notizbüchlein packen ;)

        In einen einzigen Hashwert - man müßte das ganze ja nur rekursiv immer wieder anwenden, bis nur noch ein Wert übrig ist ;-)

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Grüße,

          In einen einzigen Hashwert - man müßte das ganze ja nur rekursiv immer wieder anwenden, bis nur noch ein Wert übrig ist ;-)

          na ja - aber das würde die gezielte filmwahl erschweren ;) wäre aber des filmparatentraum - gesamte hollywoodproduktion in 10zeichen >_>
          MFG
          bleicher

      2. Hi,

        Nein. Stell Dir vor, Du erzeugst einen MD5-Hash des aktuellen Wikipedia-Inhaltes. Glaubst Du, aus diesen paar Bytes den gesamten Inhalt verlustlos wiederherstellen zu können?
        wäre DIE kompression - man könnte eine ganze videothek in ein notizbüchlein packen ;)

        unter Linux lautet das ungeschlagene Komprimierungsprogramm übrigens rm - leider keine verlustfreie Komprimierung, aber extrem effizient.

        Cheatah, SCNR

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. unter Linux lautet das ungeschlagene Komprimierungsprogramm übrigens rm - leider keine verlustfreie Komprimierung, aber extrem effizient.

          warum komprimieren, wenn man alles in den unendlich großen speicher von /dev/null verschieben kann?

    2. Hallo Vinzenz,

      Außerdem: Wieviele verschiedene Texte könnte es nur geben?

      Nur 2^128 was ungefähr 10^38 entspricht, das könnte fast für alle reichen, evtl. sollte man aber auf 256-Bit-Summen ausweichen, um ganz sicher zu sein ;-)
      Jetzt muss man den Algorithmus nur noch so anpassen, damit er nicht auch noch die Texte berücksichtigt, die sowieso nie jemand braucht. Bekanntlich sind das sowieso die meisten ;-)

      Grüße

      Daniel

      1. Außerdem: Wieviele verschiedene Texte könnte es nur geben?
        Nur 2^128 was ungefähr 10^38 entspricht, das könnte fast für alle reichen, evtl. sollte man aber auf 256-Bit-Summen ausweichen, um ganz sicher zu sein ;-)

        ich weiss nicht, ob die antwort dein ernst war - aber nur weil ein 128-bit-md5-hash (theretisch) etwa 3,4x10^38 (du liegst hier etwas daneben) möglichkeiten hat, heisst es noch lange nicht, dass es exakt so viele texte gibt

        jeder hash hat unendlich viele mögliche ursprungszeichenkombinationen - wenn du ein extrem sicheres passwort hast - sagen wir eine buchstaben, zahlen und sonderzeichenkette mit 100 stellen und dieses passwort zufällig eine kollision auf die kette "1234" hat (mathematisch gesehen ist das sogut wie unmöglich), ist ein einfaches md5-basierendes login mittels brute-force schnell geknackt

        natürlich wird niemand je dein echtes passwort in die finger bekommen, aber eine kollision auf ein anderes, einfacheres passwort reicht aus um sich einzuloggen

        genausogut könnte der komplette der hash eines dvd-images den selben hash erzeugen wie ein völlig anderes dvd-image oder ganz ein anderer string

        12345 liefert als quersumme (15) der quersumme 6
        33 liefert ebenfalls als endresultat 6

        allein hierfür fänden sich unendlich viele mögliche kombinantionen die beim immer wieder neubilden einer quersumme im dezimalsystem als endresultat 6 ergeben

        1. Hallo suit,

          Nein, das war nicht völlig ernst gemeint. Mir ist klar, dass es Kollisionen geben kann. Und evtl. wurden sogar schon welche gefunden.
          Meine Antwort galt mehr dem Argument "wie viel mögliche Texte könnte es dann nur geben". Dieses Argument allein überzeugt nämlich keines Wegs, spätestens bei 256 Bit sind das ja mehr, als geschätzte Atome im Universum.
          Darauf bezog sich dann auch das, mit der Anpassung des Algorithmus.
          256 Bit sollten locker reichen, um alle Texte durch zu nummerieren, selbst wenn die Menschheit unendlich lange existiert, sollte es immer dafür reichen, alle gerade existierenden Texte durch zu nummerieren.
          Muss man das eben nur noch richtig zuordnen...

          Grüße

          Daniel

          1. 256 Bit sollten locker reichen, um alle Texte durch zu nummerieren, selbst wenn die Menschheit unendlich lange existiert, sollte es immer dafür reichen, alle gerade existierenden Texte durch zu nummerieren.
            Muss man das eben nur noch richtig zuordnen...

            aber auch da wirds kollisionen geben - von der seite ist "durchnummerieren" mit einem hash eine etwas sinnlose aufgabe ;)

  3. Hi,

    Es gibt ja dieses tolle Modul Digest::MD5 was ein beliebigen Text in eine Prüfsumme verwandeln kann.
    Geht es auch andersrum? Also von Prüfsumme zurück zum Text?

    Nein, es ist nicht möglich eindeutig zu bestimmen, zu welchem Text ein MD5-Hash gehört.
    Es können nämlich mehrere unterschiedliche Texte zu dem gleichen Hash führen.
    Siehe Beispiel bei Wikipedia.

    Es ist auch mit sehr viel Aufwand verbunden, wenn du einen möglichen Text suchen willst, der zu einem Hash gehört. Im Wikipedia-Eintrag zu MD5 werden die Methoden dazu aufgezählt.

    Ich denke mal eher nicht, sonst könnte es ja jeder zurück "verfolgen" aber vielleicht in dem selben Skript?

    Es macht keinen Unterschied, ob es das selbe oder ein anderes Script ist.

    mfG,
    steckl