Wie finde ich den Hashing-Algorithmus, der zum Hashing von Passwörtern verwendet wird?

11

Ich habe das Arbeitspasswort und kann den Hash (/ etc / passwd) sehen. Wie finde ich den Hashing-Algorithmus, der zum Hashing des Kennworts verwendet wird, ohne manuell verschiedene Algorithmen auszuprobieren, bis ich eine Übereinstimmung finde?

Dorin Botan
quelle
1
Welche Unix-Variante verwenden Sie?
Kusalananda
3
Ich bin sehr überrascht, dass Sie einen Hash sehen können /etc/passwd. Ich dachte, alle Unix / Linux-Varianten hätten sich vor /etc/shadowJahren getrennt. (Ich weiß, dass solche Systeme immer noch Hashes unterstützen, passwdaber ich kenne keine Dienstprogramme mehr, die sie dort
ablegen
Es ist OpenWrt Backfire 10.03. Hier sind noch Hashes gespeichert /etc/passwd. Dies ändert jedoch nichts an der Frage. Macht es?
Dorin Botan
1
Nur zur Veranschaulichung: Die BSDs haben zwei Berkeley DB-Dateien, roaima. Es ist immer noch geteilt, aber es ist nicht /etc/shadowund sie haben keine Datei mit diesem Namen.
JdeBP

Antworten:

27

Dies ist in dokumentiert crypt(3)‚s Manpage , die Sie finden können über shadow(5)‚s Manpage oder passwd(5)‚s . Diese Links sind für moderne Linux-basierte Systeme geeignet. Die Beschreibung dort ist:

Wenn salt eine Zeichenfolge ist, die mit den Zeichen "$ id $" beginnt, gefolgt von einer Zeichenfolge, die optional mit "$" abgeschlossen wird, hat das Ergebnis die Form:

$id$salt$encrypted

id identifiziert die anstelle von DES verwendete Verschlüsselungsmethode und bestimmt dann, wie der Rest der Kennwortzeichenfolge interpretiert wird. Die folgenden Werte von id werden unterstützt:

ID  | Method
─────────────────────────────────────────────────────────
1   | MD5
2a  | Blowfish (not in mainline glibc; added in some
    | Linux distributions)
5   | SHA-256 (since glibc 2.7)
6   | SHA-512 (since glibc 2.7)

Blowfish, auch bekannt als bcrypt, auch durch Präfixe identifiziert wird 2, 2b, 2xund 2y(siehe PassLib Dokumentation ).

Wenn also ein Hash-Passwort im obigen Format gespeichert ist, können Sie den verwendeten Algorithmus anhand der ID ermitteln . Andernfalls ist es der cryptStandard-DES-Algorithmus (mit einem 13-stelligen Hash) oder der cryptDES von "big" (erweitert, um 128-Zeichen-Passwörter mit Hashes mit einer Länge von bis zu 178 Zeichen zu unterstützen) oder der erweiterte BSDI-DES (mit einem _Präfix) gefolgt von einem 19-stelligen Hash).

Einige Distributionen verwenden libxcrypt, das einige weitere Methoden unterstützt und dokumentiert :

  • y: yescrypt
  • gy: gost-yescrypt
  • 7: scrypt
  • sha1: sha1crypt
  • md5: SunMD5

Andere Plattformen unterstützen andere Algorithmen. Überprüfen Sie daher die cryptManpage dort. Beispielsweise unterstützt OpenBSDcrypt(3) nur Blowfish, das anhand der ID „2b“ identifiziert wird .

Stephen Kitt
quelle
2
DES-basierte Passwörter sind übrigens immer 13 Zeichen lang und bestehen aus alphanumerischen Zeichen sowie .und /. Die ersten 2 Zeichen sind das Salz und die anderen 11 sind ein Hash-Wert (eine Art). Und es ist der einzige der unterstützten Algorithmen, cryptder so schwach ist, dass Sie ihn nicht durch die Wahl eines stärkeren Passworts kompensieren können.
Kasperd