Salz mit bekanntem Klartext und Hash berechnen?

2317
Neil

Ich habe die Zeichenfolge, die in einer Webapp mit md5-Hashing verwendet wurde, um mit einem Hash zu kommen. Ich habe auch den Hash. Das md5 der Zeichenfolge stimmt jedoch nicht mit dem Hash überein, also bin ich mit einem Salz verbunden. Gibt es eine Software, die mir helfen kann, das Salz zu bestimmen?

2
Hast du nur den Hash oder einen vollständigen Authdb-Eintrag? Ignacio Vazquez-Abrams vor 13 Jahren 0
Ich habe nur den Hash. Neil vor 13 Jahren 0

1 Antwort auf die Frage

1
bahamat

In Standard-Hashfunktionen (z. B. UNIX-Kennwörter in / etc / shadow) wird der Salt als Teil des Hash gespeichert.

Übergeben Sie den gespeicherten Hashwert als Salt und Sie sollten das korrekte Ergebnis erhalten.

Der Wert für das gehashte Kennwort in / etc / shadow ist tatsächlich ein $ -begrenzter Datensatz. Zum Beispiel haben wir diesen Hash des Passworts 'blarg':

$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0 

Es gibt drei Felder, die durch $ getrennt sind

  1. Die Hash-Funktion (in diesem Fall '1' für MD5)
  2. Das Salz (was "KfcI / JTQ" ist)
  3. Der Hashwert (der 'b5VTf4i9Mnf6QFgLuVZNM0' ist)

Wenn Sie mkpasswd mehrmals verwenden, ändert sich der Hash.

$ mkpasswd -m md5 blarg $1$Gst52IWk$8ARVeSlpkcZOlyKV10Slu/  $ mkpasswd -m md5 blarg $1$JeqRviA/$GnH/AvGnZEG9wLfJjiaAt1 

Wenn Sie jedoch das Salt (dh das zweite Feld) aus dem obigen Hashwert übergeben, können Sie es mit dem ursprünglichen Hash abgleichen:

$ mkpasswd -m md5 -S KfcI/JTQ blarg $1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0 

Sie können auch den gesamten Passwort-Hash übergeben (obwohl die Hash-Funktion weggelassen wird).

$ mkpasswd -m md5 -S KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0 blarg $1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0 

Unter Linux kann der Hashtyp in /etc/login.defs gesteuert werden. Seien Sie vorsichtig, wenn Sie dies ändern, Sie können sich vollständig aus dem System sperren. Ich schlage vor, die Manpage sorgfältig zu lesen, insbesondere unter den Überschriften MD5_CRYPT_ENAB und ENCRYPT_METHOD.

In diesem Fall würde das Salt vor dem eigentlichen Hash * stehen. Die resultierende Zeichenfolge wäre dann kein MD5-Hash (wie 32 Hexadezimalstellen), sondern etwas, das länger ist. Und was meinst du mit dem letzten Satz? Arjan vor 13 Jahren 0
Ich wollte hier einen Kommentar hinzufügen, aber was ich nicht sagen möchte, ist nicht einfach in das Kommentarfeld zu schreiben. Ich füge eine weitere Antwort hinzu, um gründlicher zu sein. bahamat vor 13 Jahren 0
Wie ich in meiner Frage erwähnt habe, war dies eine Webapp, die ihr eigenes, benutzerdefiniertes Authentifizierungssystem verwendete. Keine Unix-Systemkennwörter. Diese Passwörter wurden von PHP-Code gehasht, bevor sie in einer relationalen Datenbank gespeichert wurden. So, wie Arjan gesagt hat, habe ich eine 32-stellige Zeichenfolge und den Klartext dafür. Jede Methode, aus der das Salz hergestellt werden kann, kann daraus berechnet werden, es sei denn, es werden alle möglichen Salze von rohen Tieren gezwungen. Neil vor 13 Jahren 0
Das Salz sollte als Teil des Hashes enthalten sein, oder irgendwo im Code liegt das einzige Salz, das für alle verwendet wird. bahamat vor 13 Jahren 0