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?
encryption
shadow
A. Au
quelle
quelle
mkpasswd
generiert Hashes im "modularen Krypta-Format": pythonhosted.org/passlib/modular_crypt_format.htmlAntworten:
Unter Ubuntu / Debian
mkpasswd
ist ein Teil des Pakets whois und implementiert, inmkpasswd.c
dem eigentlich nur ein ausgefeilter Wrapper um diecrypt()
Funktion in glibc deklariert istunistd.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
-R
Optionmkpasswd
die 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 5000
Sie 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 .
quelle
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.
quelle