Alain: Bedeutung von $salt ?

Guten Tag,
mich würde es interessiern für was genau $salt in perl od. cgi eingesetzt wird und wesshalb.
Ich weiss das z.B. für verschlüsselung von passwörter das $salt benutzt wird um die basis vom schlüssel zu bilden.
Ich habe auch gesehen dass bei php auf einer seite den $salt=21 und bei selfhtml $salt=IN benutzt wird,in einem anderem cgi sah ich das "YL" ($password = crypt($request{'password1'}, "YL");
).

Was ist jetzt da der unterschied ausser dass bei den beiden Arten am Anfang vom verschlüsselten passwort 21,IN oder YL steht?
Sind das irgendwelche zusatz codes oder ist das einfach nur die kennung als basis?
Wie ist das,kann man für dieses $salt auch einen beliebigen tag nehmen sozusagen als eigenes und einmaliges basis tag?

Schönen gruss vom Alain

P.S.Ich fand weder in selfhtml noch in einer suchmaschiene genaueres darüber.

  1. hi!

    Ich weiss das z.B. für verschlüsselung von passwörter das $salt
    benutzt wird um die basis vom schlüssel zu bilden. Ich habe auch
    gesehen dass bei php auf einer seite den $salt=21 und bei selfhtml
    $salt=IN benutzt wird,in einem anderem cgi sah ich das "YL"
    ($password = crypt($request{'password1'}, "YL");).

    Der Salt hat eigentlich nur einen Zweck: wenn zwei Leute das gleiche
    Passwort eingeben, und es gäbe keinen Salt, dann würde in beiden
    Fällen das verschlüsselte Passwort gleich aussehen, und man wüsste,
    das die beiden Benutzer das gleiche Passwort haben.

    Um das zu verhindern, gibt man bei der Verschlüsselung des Passworts
    noch ein Salt an. Das sind zwei alphanumerische Zeichen, die man am
    besten bei jedem Verschlüsselungsvorgang zufällig auswählen lässt, um
    eben das oben beschriebene Szenario zu vermeiden.

    bye, Frank!

    1. 'nAbend

      Um das zu verhindern, gibt man bei der Verschlüsselung des Passworts
      noch ein Salt an. Das sind zwei alphanumerische Zeichen, die man am
      besten bei jedem Verschlüsselungsvorgang zufällig auswählen lässt, um
      eben das oben beschriebene Szenario zu vermeiden.

      Und dann wird's Salt vorn an das verschlüsselte Passwort angehangen, um später beim Passwortvergleich zum richtigen Ergebnis zu kommen. Denn wer weis denn dann noch, wie die das Salt bei der Kodierung aussah!?!

      Gruß Frank

      siehe auch http://forum.de.selfhtml.org/archiv/2000_1/t11109.htm#a55999

      1. 'nAbend

        guten Morgen :),

        ok das hab ich begriffen aber zum zitat vom link da unten:

        "Man braucht eben noch einen zusätzlichen (variablen) Parameter, der bei
        immer gleichem Algorithmus und möglicherweise gleichem Passwort unterschiedliche Ergebnisse
        bringt.Wenn der User sich dann authorisiert, muß  "salt" bekannt sein, damit das Ergebnis des
        erneuten "crypten" des angegebenen Passwortes mit dem z.B. in .htpasswd vergleichbar wird. "

        Wie sieht denn diese zusätzliche variable aus?
        In meinem beispiel würde das nicht funktionieren:
        sub docrypt {
                my $salt='XY';
                local($text) = @_;
                return crypt($text,substr($salt,-2));
        }
        jedes verschlüsselte passwort erhält am anfang die zwei zeichen XY
        ist auch besser als wenn jetzt return crypt($text,substr($text,-2));
        dasteht ,dann würde es die ersten beiden zeichen vom eigentlichen
        passwort (unverschlüsselt) zeigen.
        Um nochmal zum $salt zurückzukommen,wenn zwei verschiedene benutzer dasselbe passwort benutzen und dieses
        vom gleichen crypt verschlüsselt würde,dann wäre das passwort verschlüsselt dasselbe auch mit diesem salt crypt verfahren.
        Der Vorteil in meinem Fall sehe ich eben nur ,dass man das eigentliche passwort (die ersten beiden zeichen) nicht unverschlüsselt sieht.

        Gruss vom Alain

        Um das zu verhindern, gibt man bei der Verschlüsselung des Passworts
        noch ein Salt an. Das sind zwei alphanumerische Zeichen, die man am
        besten bei jedem Verschlüsselungsvorgang zufällig auswählen lässt, um
        eben das oben beschriebene Szenario zu vermeiden.

        Und dann wird's Salt vorn an das verschlüsselte Passwort angehangen, um später beim Passwortvergleich zum richtigen Ergebnis zu kommen. Denn wer weis denn dann noch, wie die das Salt bei der Kodierung aussah!?!

        Gruß Frank

        siehe auch http://forum.de.selfhtml.org/archiv/2000_1/t11109.htm#a55999

        1. 'nAbend
          guten Morgen :),

          (fast) 'nAbend

          Wie sieht denn diese zusätzliche variable aus?
          In meinem beispiel würde das nicht funktionieren:
          sub docrypt {
                  my $salt='XY';
                  local($text) = @_;
                  return crypt($text,substr($salt,-2));
          }

          ..............................^
          Warum machst Du hier einen Substring? Ist doch sowieso nur 2 Zeichen lang, Dein $salt.

          jedes verschlüsselte passwort erhält am anfang die zwei zeichen XY
          ist auch besser als wenn jetzt return crypt($text,substr($text,-2));
          dasteht ,dann würde es die ersten beiden zeichen vom eigentlichen
          passwort (unverschlüsselt) zeigen.

          Warum machst Du es nicht so:

          nimm einen Satz von Zeichen

          @passset = ('a'..'z');

          renne 2 mal durch die schleife

          for ($i = 0; $i < 2; $i++) {
                  # besorge Die eine Zufallszahl, die so groß
                  # ist wie der Satz von Zeichen
                  $randum_num = int(rand($#passset + 1));
                  # lies mit dieser Zahl ein beliebiges Zeichen
                  # aus dem Array
                  $salt .= @passset[$randum_num];
          }

          return crypt($pass1,$salt);

          So hast Du bei jedem Crypt eine anderes $salt. Du hast eben nicht die ersten beiden Zeichen des Passworts im Klartext da zu stehen und selbst bei gleichem Passwort sieht der gecryptete String anders aus.

          Gruß Frank

          1. Moin,

            Warum machst Du es nicht so:

            nimm einen Satz von Zeichen

            @passset = ('a'..'z');

            renne 2 mal durch die schleife

            for ($i = 0; $i < 2; $i++) {
                    # besorge Die eine Zufallszahl, die so groß
                    # ist wie der Satz von Zeichen
                    $randum_num = int(rand($#passset + 1));
                    # lies mit dieser Zahl ein beliebiges Zeichen
                    # aus dem Array
                    $salt .= @passset[$randum_num];
            }

            return crypt($pass1,$salt);

            So hast Du bei jedem Crypt eine anderes $salt. Du hast eben nicht die ersten beiden Zeichen des Passworts im Klartext da zu stehen und selbst bei gleichem Passwort sieht der gecryptete String anders aus.

            Gute idee,
            aber ich möchte ja dass das passwort gekennzeichnet wird mit dem ersten oder den ersten beiden zeichen(aus einem bestimmten Grund)
            jedoch wär mir das auch lieber,wenn bei einem anderen user der dasselbe passwort benutzt eine andere verschlüsselung gezeigt würde.
            Gruss vom Alain

            P.S.Wär das auch möglich?