SHA512 Salted Hash von mkpasswd stimmt nicht mit einer Online-Version überein

7

Ich bin verwirrt über den Hash-Code (ASCII), der unter Linux (Ubuntu) / etc / shadow gespeichert ist.

In einem hypothetischen Fall sei das Passwort "Test" , das Salz "Zem197T4" .

Durch Ausführen des folgenden Befehls

$ mkpasswd -m SHA-512 test Zem197T4

Es wird eine lange Reihe von ASCII-Zeichen generiert (so speichert Linux im / etc / shadow)

$6$Zem197T4$oCUr0iMuvRJnMqk3FFi72KWuLAcKU.ydjfMvuXAHgpzNtijJFrGv80tifR1ySJWsb4sdPJqxzCLwUFkX6FKVZ0

Bei Verwendung des Online-SHA-512-Generators (z. B. http://www.insidepro.com/hashes.php?lang=eng ) wird ein Hex-Code wie folgt generiert:

Option 1) Passwort + Salz

8d4b73598280019ef818e44eb4493c661b871bf758663d52907c762f649fe3355f698ccabb3b0c59e44f1f6db06ef4690c16a2682382617c6121925082613fe2

Option 2) Salz + Passwort

b0197333c018b3b26856473296fcb8637c4f58ab7f4ee2d6868919162fa6a61c8ba93824019aa158e62ccf611c829026b168fc4bf90b2e6b63c0f617198006c2

Ich glaube, dieser Hex-Code sollte das Gleiche sein wie der von mkpasswd generierte ASCII-Code. Aber wie hängen sie zusammen?

Hoffe jemand könnte mich aufklären?

A. Au
quelle
mkpasswdgeneriert Hashes im "modularen Krypta-Format": pythonhosted.org/passlib/modular_crypt_format.html
Martin von Wittich

Antworten:

7

Unter Ubuntu / Debian mkpasswdist ein Teil des Pakets whois und implementiert, in mkpasswd.cdem eigentlich nur ein ausgefeilter Wrapper um die crypt()Funktion in glibc deklariert ist unistd.h. crypt () akzeptiert zwei Argumente, password und salt. Das Passwort lautet in diesem Fall "Test". Dem SHA-512-Hash wird "$ 6 $" vorangestellt (siehe SHA-Krypta ), sodass "$ 6 $ Zem197T4" an crypt () übergeben wird.

Vielleicht haben Sie bemerkt, welche -ROption mkpasswddie Anzahl der Runden bestimmt. Im Dokument finden Sie eine Standardeinstellung von 5000 Runden. Dies ist der erste Hinweis, warum das Ergebnis niemals der einfachen Verkettung von Salt und Passwort entsprechen würde, es wird nicht nur einmal gehasht. Wenn Sie bestehen, erhalten -R 5000Sie das gleiche Ergebnis. In diesem Fall wird "$ 6 $ round = 5000 $ Zem197T4" an crypt () übergeben und die Implementierung in glibc (der Bibliothek von Debian / Ubuntu) extrahiert die Methode und die Anzahl der Runden daraus.

Was in crypt () passiert, ist komplizierter als nur die Berechnung eines einzelnen Hashs. Das Ergebnis ist am Ende base64-codiert. Aus diesem Grund enthält das von Ihnen angezeigte Ergebnis alle Arten von Zeichen nach dem letzten '$' und nicht nur [0-9a-f] wie in der typischen Hex-Zeichenfolge eines SHA-512-Hash. Der Algorithmus ist im bereits erwähnten SHA-Crypt- Dokument ausführlich beschrieben .

LeSpocky
quelle
0

Die ganze Idee bei der Verwendung eines gesalzenen Passworts besteht darin, dass Sie jedes Mal, wenn Sie einen Hash für dasselbe Passwort generieren, ein anderes Ergebnis erhalten. Dies dient dazu, Probleme mit Regenbogentischen zu vermeiden.

Angenommen, einer Ihrer Benutzer verwendet ein schwaches Kennwort, z. B. 123456, und Ihr / etc / shadow wurde angezeigt. Jetzt muss der böse Hacker nur noch eine Regenbogentabelle verwenden, um das schwache Passwort herauszufinden und es an anderen Orten erneut zu verwenden.

Han
quelle