Der Dicki: Was ist Unix Crypt Format?

Hallihallo!

Ich habe ein kleines Problemchen:
Ich möchte, nur um mal ein bisschen rumzuprobieren, ein Verzeichnis mittels Passwortschützen.

Mein Provider (ewetel.net) hat mir dafür auch ein bisschen Info gegeben, wie die .htaccess auszusehen hat.
Man sagte mir auch, daß ich eine .htpasswd brauche, in der die Daten in der Form
Name:Passwort abzulegen sind.

Kein Problem...

Aber jetzt kommt mein Problem:
Es heisst: "Die .htpasswd enthält die Benutzernamen und die Kennwörter im Unix Crypt Format".

Es hiess weiter: "Um die Datei zu erstellen, können Sie unter Linux z.B. den Befehl htpasswd verwenden".

Ich habe aber kein Linux, sondern nur Windows 98 SE.

Stellt das ein Problem dar? Wenn ja: wie kann ich das lösen?
Und was ist das Unix Crypt Format überhaupt? Hört sich nach Verschlüsselung an...

Viele liebe Grüße,
Der Dicki

  1. Ich habe ein kleines Problemchen:
    Ich möchte, nur um mal ein bisschen rumzuprobieren, ein Verzeichnis mittels Passwortschützen.

    http://selfhtml.teamone.de/diverses/htaccess.htm#verzeichnisschutz

    Stellt das ein Problem dar? Wenn ja: wie kann ich das lösen?
    Und was ist das Unix Crypt Format überhaupt? Hört sich nach Verschlüsselung an...

    http://www.google.com/search?q=crypt+unix

    1. Hallihallo, Linksetzer ;)

      http://selfhtml.teamone.de/diverses/htaccess.htm#verzeichnisschutz

      Cool, damit kann ich was anfangen, danke!
      (Hätte ich aber auch selber drauf kommen können, grmblfrx...)

      http://www.google.com/search?q=crypt+unix

      Für diesen link gilt das Gleiche wie für den ersten. Auch das Eingeklammerte...
      Naja, manchmal habe ich echt ein mächtiges Brett vorm Kopf...

      Danke, und die üblichen lieben Grüße,
      Der Dicki

  2. Hoi,

    Man sagte mir auch, daß ich eine .htpasswd brauche, in der die Daten in der
    Form Name:Passwort abzulegen sind.

    Richtig.

    Aber jetzt kommt mein Problem:
    Es heisst: "Die .htpasswd enthält die Benutzernamen und die Kennwörter im
    Unix Crypt Format".

    Richtig.

    Es hiess weiter: "Um die Datei zu erstellen, können Sie unter Linux z.B. den
    Befehl htpasswd verwenden".

    Richtig.

    Ich habe aber kein Linux, sondern nur Windows 98 SE.

    Dumm :)

    Stellt das ein Problem dar?

    Unter Umstaenden...

    Wenn ja: wie kann ich das lösen?

    Hast du PHP auf dem Rechner? Wenn ja, dann in etwa so:

    <?php
    $salt = '';
    $array = Array('A','B','C','D',....,'Z','a','b',...,'z',0,1,2,...,9);
    for($i=0;$i<2;$i++) {
      $salt .= $array[rand count($array)];
    }
    echo crypt($_GET['pw'],$salt);
    ?>

    Mit Perl ginge es einfacher, aber leider haben nicht alle Perl-Versionen unter
    Windows 'crypt' implementiert.

    Und was ist das Unix Crypt Format überhaupt? Hört sich nach Verschlüsselung
    an...

    'cypt' ist ein One-Way-Verschluesselungs-Algorithmus. Das heisst, das
    verschluesselte kann nicht wieder entschluesselt werden.

    Gruesse,
     CK

    1. Hallihallo, Christian!

      Als Erstes einmal: vielen Dank für Deine Antwort.

      Ich habe aber kein Linux, sondern nur Windows 98 SE.

      Dumm :)

      Was soll ich sagen? Es läuft mittlerweile über ein Jahr ohne Bluescreen und/ oder größere Probleme ;)

      Hast du PHP auf dem Rechner? Wenn ja, dann in etwa so:

      <?php
      $salt = '';
      $array = Array('A','B','C','D',....,'Z','a','b',...,'z',0,1,2,...,9);
      for($i=0;$i<2;$i++) {
        $salt .= $array[rand count($array)];
      }
      echo crypt($_GET['pw'],$salt);
      ?>

      Leider habe ich auf meinem Rechner kein PHP, aber vielleicht sollte ich mal drüber nachdenken. Aus irgendwelchen unerfindlichen Gründen habe ich mich davor bisher immer gescheut...
      Zum Glück ist es für dieses Problem erstmal nicht nötig, der Linksetzer hat mich auf eine wunderschöne Seite geleitet.

      Und was ist das Unix Crypt Format überhaupt? Hört sich nach Verschlüsselung
      an...

      'cypt' ist ein One-Way-Verschluesselungs-Algorithmus. Das heisst, das
      verschluesselte kann nicht wieder entschluesselt werden.

      Das ist ja cool. Wusste gar nicht, daß sowas geht. Bedeutet das nach meinen (ohne überheblich wirken zu wollen) nicht besonders geringen Mathematikkenntnissen dann aber nicht, daß es sich dabei dann nicht um eine bijektive Abbildung vom Klartext ins Verschlüsselte hat, und demzufolge dann mehrere Klartexte ein und dasselbe Verschlüsselungsergebnis haben können?

      Gruesse,
      CK

      Viele liebe Grüße zurück, und vielen Dank nochmal,
      Der Dicki

      1. Hallo,

        'cypt' ist ein One-Way-Verschluesselungs-Algorithmus. Das heisst, das
        verschluesselte kann nicht wieder entschluesselt werden.
        Das ist ja cool. Wusste gar nicht, daß sowas geht.

        Offensichtlich doch :)

        Bedeutet das nach meinen (ohne überheblich wirken zu wollen) nicht besonders
        geringen Mathematikkenntnissen dann aber nicht, daß es sich dabei dann nicht
        um eine bijektive Abbildung vom Klartext ins Verschlüsselte hat,

        Wie genau das funktioniert, weiss ich nicht. Lies den Quelltext :)

        und demzufolge dann mehrere Klartexte ein und dasselbe
        Verschlüsselungsergebnis haben können?

        Doch, das kann passieren. Deshalb wird der Schluessel ($salt in meinem Beispiel)
        auch immer zufaellig gewaehlt.

        Gruesse,
         CK

        1. Hallihallo!

          Bedeutet das nach meinen (ohne überheblich wirken zu wollen) nicht besonders
          geringen Mathematikkenntnissen dann aber nicht, daß es sich dabei dann nicht
          um eine bijektive Abbildung vom Klartext ins Verschlüsselte hat,

          Wie genau das funktioniert, weiss ich nicht. Lies den Quelltext :)

          Och Männo... Hab doch von php so viel Ahnung wie ein Dicki von php... *g

          und demzufolge dann mehrere Klartexte ein und dasselbe
          Verschlüsselungsergebnis haben können?

          Doch, das kann passieren. Deshalb wird der Schluessel ($salt in meinem Beispiel)
          auch immer zufaellig gewaehlt.

          Aaaaahja. Dann ist das ja gar nicht mal so schlimm. Aber im Endeffekt bleibt dann doch das Problem, daß es zu jedem Nutzernamen mehrere Passwörter gibt, oder?
          Ich habe grade mal danach gesucht, aber nichts gefunden. Vielleicht bin ich heute einfach nur mal wieder zu blöd zum Lesen...

          Viele liebe Grüße,
          Der Dicki

          1. Hallo,

            Wie genau das funktioniert, weiss ich nicht. Lies den Quelltext :)
            Och Männo... Hab doch von php so viel Ahnung wie ein Dicki von php... *g

            Dann lies eine Beschreibung :) Es gibt sicher Beschreibungen zum
            crypt-Algorithmus.

            und demzufolge dann mehrere Klartexte ein und dasselbe
            Verschlüsselungsergebnis haben können?

            Doch, das kann passieren. Deshalb wird der Schluessel ($salt in meinem
            Beispiel) auch immer zufaellig gewaehlt.
            Aaaaahja. Dann ist das ja gar nicht mal so schlimm. Aber im Endeffekt bleibt
            dann doch das Problem, daß es zu jedem Nutzernamen mehrere Passwörter gibt,
            oder?

            Ja, das Problem besteht. Aber die Chance, dass es zu einem Passwort ein
            sinnvolles Aequivalent gibt, ist AFAIK doch relativ klein.

            Ich habe grade mal danach gesucht, aber nichts gefunden. Vielleicht bin ich
            heute einfach nur mal wieder zu blöd zum Lesen...

            Vielleicht hilft dir die Tatsache, dass crypt() AFAIK einen DES-Algorithmus
            benutzt.

            Gruesse,
             CK

          2. Hi,

            und demzufolge dann mehrere Klartexte ein und dasselbe
            Verschlüsselungsergebnis haben können?
            Doch, das kann passieren.

            da bin ich mir gar nicht sicher.

            Denn die Ausgabe einer crypt()-Verschlüsselung (11+2 Zeichen) ist
            deutlich _länger_ als deren Eingabe (8+2 Zeichen).

            Nicht jede Zeichenkette, die in der entsprechenden Länge darstellbar
            ist, kann also das Ergebnis einer crypt()-Operation gewesen sein -
            insofern wären reichlich Möglichkeiten vorhanden, die tatsächlichen
            Eingaben disjunkt im Ergebnisraum unterzubringen (3 Byte überzählig,
            also nur ein echtes Passwort auf 16 Millionen möglicher Werte).

            Aaaaahja. Dann ist das ja gar nicht mal so schlimm. Aber im Endeffekt
            bleibt dann doch das Problem, daß es zu jedem Nutzernamen mehrere
            Passwörter gibt, oder?

            Es gibt zu jedem Passwort so viele crypt()-Ergebnisse, wie es
            salt-Werte gibt (und das sind zwei Byte, also offenbar 65536 Stück).

            Da das salt jedoch im Ergebnis der Verschlüsselung drin steht, weißt
            der Server, wie er das neu ankommende Passwort verschlüsseln muß, um
            es mit dem verschlüsselten vergleichen zu können (ohne Kenntnis des
            salt hätte er dazu keine Chance), ohne daß der Server wissen muß
            wie das gespeicherte Passwort im Klartext lautet.

            Viele Grüße
                  Michael

            1. Hallihallo!

              Danke für diese ausführliche Antwort, bin schon etwas "beruhigter".

              Wenn ich Dich richtig verstanden habe, läuft das Ganze dann so ab:

              Übertragung im Klartext
                                                     |
                                          Entschlüsselung des Passwortes,
                                     das zum übermittelten Nutzernamen gehört.
                                                     |
                                      Vergleichen und entsprechend reagieren.

              Aber eine kleine, dumme Frage habe ich denn doch noch:

              Was ist dieses ominöse "salt"? Ist das sozusagen ein "dynamischer Verschlüsselungscode"?

              Viele liebe Grüße,
              Der Dicki

              1. Moin,

                Übertragung im Klartext

                ja

                Entschlüsselung des Passwortes,
                                       das zum übermittelten Nutzernamen gehört.

                nein

                Vergleichen und entsprechend reagieren.

                ja

                Das Passwort kann prinzipbedingt nicht wieder entschlüsselt werden, wenn es erst mal ge-crypt()-ed ist, da die Abbildung (zumindest potentiell) nicht ein-eindeutig ist. (Michael: Die Ausgabe hat zwar mehr Zeichen, aber weniger relevante Bits pro Zeichen.)

                Also das zu überprüfende Passwort muss im Klartext vorliegen. Dann wird das verschlüsselte Passwort rausgesucht und daraus der Salt extrahiert (der wird zusammen mit dem crypt()-Ergebnis gespeichert). Der crypt()-Algorithmus basiert im Prinzip auf DES mit ein paar Veränderungen, die das effiziente Ausführen einer Schlüsselsuche in Hardware erschweren sollen. Der Salt-String besteht aus zwei Zeichen aus der Menge [a-zA-Z0-9./] und verändert die Verschlüsselungsfunktion in einer von 4096 Arten.
                Dann werden die 7 niederwertigsten Bits der ersten 8 Buchstaben des Passworts genommen und daraus wird dann ein 56 Bit-Schlüssel. Der wird dann benutzt um mit dem modifizierten DES-Algorithmus einen festen String (in der Regel alles Nullen) mehrfach hintereinander zu verschlüsseln, wobei 11 druckbare ASCII-Zeichen entstehen (plus 2 Zeichen Salt, die vorangestellt werden).
                Dieser Algorithmus wird also einmal beim Festlegen des Passworts (mit zufälligem Salt) durchgeführt und das Ergebnis gespeichert. Ausserdem wird er jedesmal bei der Überprüfung eines Passworts (mit dem bekannten Salt) durchgeführt und das Ergebnis mit dem gespeicherten Ergebnis verglichen.

                --
                Henryk Plötz
                Grüße aus Berlin

      2. Und was ist das Unix Crypt Format überhaupt? Hört sich nach Verschlüsselung an...

        'cypt' ist ein One-Way-Verschluesselungs-Algorithmus. Das heisst, das
        verschluesselte kann nicht wieder entschluesselt werden.

        Das ist ja cool. Wusste gar nicht, daß sowas geht.

        Die Bezeichnung Verschlüsselung ist hier auch etwas fehl am Platze, denn was man verschlüsselt, sollte man per Definition auch immer wieder Entschlüsseln können (ok, wenn man nicht gerade den Schlüssel verschludert, soll ja vorkommen :).

        Ich für meinen Teil finde es sinnvoller, diese Einwegverschlüsselungen ganz einfach als das zu bezeichnen, was sie im Kern doch eigentlich auch sind: Prüfsummen. Und dazu gehören dann natürlich auch MD5 oder CRC32. Oder Dein eigener Bitquirl, der sich auch als ganz ordinäre Addition der einzelnen Eingangsbytes entpuppen kann.

        Das besondere Geheimnis dabei ist nur, daß dieser Algorythmus so angelegt sein muß, daß auch kleinste Änderung der Eingangsdaten zu einer Änderung in den Ausgangsdaten führt.

        Gruß,
          soenk.e

        1. Hallihallo!

          Die Bezeichnung Verschlüsselung ist hier auch etwas fehl am Platze, denn was man verschlüsselt, sollte man per Definition auch immer wieder Entschlüsseln können (ok, wenn man nicht gerade den Schlüssel verschludert, soll ja vorkommen :).

          Ich für meinen Teil finde es sinnvoller, diese Einwegverschlüsselungen ganz einfach als das zu bezeichnen, was sie im Kern doch eigentlich auch sind: Prüfsummen. Und dazu gehören dann natürlich auch MD5 oder CRC32. Oder Dein eigener Bitquirl, der sich auch als ganz ordinäre Addition der einzelnen Eingangsbytes entpuppen kann.

          Das fand ich jetzt aber mal anschaulich.
          Jetzt, wo Du das Wort "Prüfsummen" ins Spiel gebracht hast, fällt mir die Vorstellung des Ganzen gleich viel leichter.

          Danke für die Aufklärung!

          Viele liebe Grüße,
          Der Dicki

  3. Moin,

    Stellt das ein Problem dar? Wenn ja: wie kann ich das lösen?
    Und was ist das Unix Crypt Format überhaupt? Hört sich nach Verschlüsselung an...

    Richtig, das passwort wir in Unix verschlüßelt ( gecrypted ) and dann
    in der passwd Datei gespeichert.

    Ich habe im Netz mal ein Javascript gesehen, welches das gemacht hat.
    Speziel für die .htaccess Datei.

    Leider weiß ich nicht mehr wo das stand. Gehe doch mal auf die Suche.

    regds
    Wiz

    1. Hallihallo, Wiz!

      Auch Dir erstmal herzlichen Dank für die Antwort.

      Ich habe im Netz mal ein Javascript gesehen, welches das gemacht hat.
      Speziel für die .htaccess Datei.

      Hätte ich eigentlich auch selber drauf kommen können: SelfHTML hält auch hierfür das Passende bereit, wie der Linksetzer mir mitgeteilt hat...

      Viele liebe Grüße,
      Der Dicki