alligator: crypt / salt

Hallo zusammen,

ich will mal meine shadow überprüfen, wie lange es dauern würde die
bis jetzt eingesetzen Passwörter zu entschlüsseln.
Jedoch verstehe ich nicht ganz wie das gehen soll, da ja das "Salt"
unbekannt ist oder ?!?
Ich hab da nämlich schonmal rumprobiert und zwar auch wenn ich 2 mal dasselbe Passwort eingebe,
stehen ja verschiedene Strings in der Shadow. Wie kann ich denn dann die Shadow-Strings vergleichen,
ob ich das richtige Passwort gefunden habe.

Bspcode:
if ( ! $ARGV[0] )
{
print "Enter Passwd 1: ";
chomp ($a=<STDIN>);
}
else
{
$a=$ARGV[0];
}
if ( ! $ARGV[1]  )
 {
print "Enter Passwd 2: ";
chomp ($b=<STDIN>);
}
 else
{
$b=$ARGV[1];
}
$salt = join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64];
print "$salt\n";
$a_p=crypt($a,$salt);
$salt = join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64];
print "$salt\n";
$b_p=crypt($b,$salt);

print "$a - $a_p\n$b - $b_p\n";

Gruß
alligator

  1. Moin!

    ich will mal meine shadow überprüfen, wie lange es dauern würde die
    bis jetzt eingesetzen Passwörter zu entschlüsseln.
    Jedoch verstehe ich nicht ganz wie das gehen soll, da ja das "Salt"
    unbekannt ist oder ?!?

    Nein, ist es nicht. Die ersten beiden Zeichen eines crypt-Hashes sind das Salt.

    Der Sinn besteht darin, durch unterschiedliche Salts auch bei zwei identischen Passwörtern unterschiedliche Hash-Werte zu erhalten. Ansonsten wüßtest du, wenn dein Hash zufällig mit dem eines anderen Accounts übereinstimmt, das Passwort dieses Accounts.

    - Sven Rautenberg

    --
    "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
    1. Hi,

      Der Sinn besteht darin, durch unterschiedliche Salts auch bei zwei identischen Passwörtern unterschiedliche Hash-Werte zu erhalten. Ansonsten wüßtest du, wenn dein Hash zufällig mit dem eines anderen Accounts übereinstimmt, das Passwort dieses Accounts.

      Wirklich DAS Passwort?
      EIN Passwort für dieses Account ja.

      Soweit ich weiß, ist nicht sichergestellt, daß crypt bei gleichem Salt für verschiedene Paßwörter auch verschiedene Ergebnisse bringt.

      cu,
      Andreas

      --
      Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
      1. Ahoi,

        Danke habs begriffen.
        Hab noch 2 Fragen:
        1:
        $salt = join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64];
        Kann mir diese Zeil mal jemand erklären wie das genau funktioniert ?
        Ich weiss wie join und rand laut manpage funktionieren
        http://www.perldoc.com/perl5.8.0/pod/func/join.html
        http://www.perldoc.com/perl5.8.0/pod/func/rand.html
        aber irgendwie bekomm ich das nicht ganz zusammen.
        2:
        Woher bekomme ich ein deutsches Wörterbuch am besten als Textdatei :o) ?

        Gruß
        alligator

        1. use Mosche;

          $salt = join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64];
          Kann mir diese Zeil mal jemand erklären wie das genau funktioniert ?

          ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64]
          liefert einen Array-Splice, mit den Indizes zweier Zufallszahlen zwischen 0 und 63. Diese werden durch das join zu einem String zusammengefügt, ohne Trennzeichen. Hier also zB 'Aa', 'az', '/5' '..' usw.

          use Tschoe qw(Matti);

          --
            Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
      2. Moin!

        Wirklich DAS Passwort?
        EIN Passwort für dieses Account ja.

        Soweit ich weiß, ist nicht sichergestellt, daß crypt bei gleichem Salt für verschiedene Paßwörter auch verschiedene Ergebnisse bringt.

        Hm, das würde ich nicht unbedingt sagen.

        Ein Crypt-Hash ist 15 Zeichen lang. 2 davon sind fürs Salt, also bleiben 13 Zeichen für das Hashen des Passwortes. Leider werden vom Passwort nur die ersten 8 Zeichen verwendet, also ist das Verhältnis 8:13 - also eigentlich kein Grund für Kollisionen, die ja dafür verantwortlich sind, dass zwei verschiedene Passworte zum gleichen Hashwert führen.

        Die Begrenzung auf 8 Zeichen lange Passwörter ist übrigens ein sehr guter Grund, crypt nicht mehr einzusetzen, weil man das Verfahren mittlerweile sehr gut bruteforcen kann, wenn man den Hashwert kennt.

        - Sven Rautenberg

        --
        "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
  2. Hi!

    ich will mal meine shadow überprüfen, wie lange es dauern würde die
    bis jetzt eingesetzen Passwörter zu entschlüsseln.

    Dann wuerde ich nicht Perl nehmen, welches dafuer die Routine der C-Library benutzt, sondern Crack in Verbindung mit Ultra Fast Crypt. UFC ist etwa 30 bis 60 mal so schnell wie herkoemmliche crypt-Routinen, wenn man bei aufeinanderfolgenden Aufrufen immer wieder dasselbe Salt verwendet.

    http://www.dfn-cert.de/infoserv/dib/dib-9301.html
    http://www.dfn-cert.de/infoserv/dib/dib-9302.html

    So long

    --
    Bier trinken fetzt!!!