GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum ist die Ausgabe von openssl passwd jedes Mal anders?

> openssl passwd -1 "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/

Dies ist der erweiterte Unix-Stil crypt(3) Passwort-Hash-Syntax, insbesondere die MD5-Version davon.

Die erste $1$ identifiziert den Hash-Typ, der nächste Teil OKgLCmVl ist das Salt, das zum Verschlüsseln des Passworts verwendet wird, dann nach dem Trennzeichen $ Zeichen am Ende der Zeile ist der eigentliche Passwort-Hash.

Wenn Sie also den Salt-Teil aus der ersten Verschlüsselung nehmen und ihn mit den nachfolgenden verwenden, sollten Sie immer das gleiche Ergebnis erhalten:

> openssl passwd -1 -salt "OKgLCmVl" "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/
> openssl passwd -1 -salt "OKgLCmVl" "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/

Wenn Sie ein Passwort ändern , sollten Sie immer auf ein neues Salz umsteigen. Damit wird verhindert, dass jemand im Nachhinein herausfindet, ob das neue Passwort tatsächlich mit dem alten identisch war. (Wer die Wiederverwendung alter Passwörter verhindern möchte, kann den neuen Passwortkandidaten natürlich auch zweimal hashen:einmal mit dem alten Salt und dann, wenn das Ergebnis anders als das alte Passwort und damit akzeptabel ist, noch einmal mit einem neuen Salz.)

Wenn Sie openssl passwd verwenden ohne Optionen erhalten Sie das Original crypt(3) -kompatibler Hash, wie von dave_thompson_085 beschrieben. Dabei besteht das Salz aus zwei Anfangsbuchstaben des Hash:

> openssl passwd "a"
imM.Fa8z1RS.k
> openssl passwd -salt "im" "a"
imM.Fa8z1RS.k

Sie sollten diesen alten Hash-Stil in keiner neuen Implementierung verwenden, da er die effektive Passwortlänge auf 8 Zeichen beschränkt und zu wenig Salt enthält, um sich angemessen gegen moderne Methoden zu schützen.

(Ich habe einmal die Datenmenge berechnet, die erforderlich ist, um einen vollständigen Satz Regenbogentabellen für jeden klassischen crypt(3) zu speichern Hasch. Ich erinnere mich nicht an das genaue Ergebnis, aber vorausgesetzt, meine Berechnungen waren korrekt, war es in der Größenordnung von "einem bescheidenen Stapel von Multi-Terabyte-Festplatten". Meiner Meinung nach liegt es damit im Bereich "organisierte Kriminelle könnten es tun".)


Im Gegensatz zu normalen Hashes ist Passwort Hashes sollten 'Salz' und verwenden sollte langsam sein (normalerweise durch Iteration), um zu verhindern, dass ein Angreifer, der den/die Hash(s) erhält, das/die Passwort(e) leicht wiederherstellen kann. Siehe Canonical on security.SX und viele damit verlinkte.

Die ursprüngliche crypt(3) aus den 1970er Jahren, jetzt der Klarheit halber DEScrypt genannt, ist (leicht) gesalzen :

Salz ist eine aus der Menge [a-zA-Z0-9./] ausgewählte Zeichenfolge aus zwei Zeichen. Diese Zeichenfolge wird verwendet, um den Algorithmus auf eine von 4096 verschiedenen Arten zu stören.

Das etwas neuere MD5crypt-Schema ist gesalzen und iteriert, entspricht aber nicht modernen Standards. Diese beiden und einige der besseren Schemata, die sie auf Unix(en) ersetzt haben, sind in https://en.wikipedia.org/wiki/Crypt_%28C%29 .

detailliert beschrieben

User Muru hat recht. Das Passwort ist gesalzen.

Sie können Option -salt string hinzufügen selbst und der Hash bleibt gleich.

$ openssl passwd -salt "foo" "bar"
foXrpAKGo3142
$ openssl passwd -salt "foo" "bar"
foXrpAKGo3142

Linux
  1. Wie kann `date` die Uhrzeit aus einer anderen Zeitzone ausgeben?

  2. Ausgabe nach Stdout und gleichzeitig Grep in eine Datei?

  3. Verwenden des passwd-Befehls innerhalb eines Shell-Skripts

  4. Wie kann die Ausgabe des Zeitbefehls in eine Datei unter Linux umgeleitet werden?

  5. Was ist die maximale Länge des Passworts auf einem Unix/Linux-System?

Warum jetzt die beste Zeit ist, GNOME zu verwenden

Übergeben des Hashs mit Remotedesktop

warum unterscheidet sich die Ausgabe von `du` oft so sehr von `du -b`

Warum gibt pr_debug des Linux-Kernels keine Ausgabe aus?

Warum unterscheidet sich das „sudo“-Passwort vom „su root“-Passwort?

Was ist der Unterschied zwischen „passwd“ und „chpasswd“?