Verwenden alle Linux-Distributionen dieselbe kryptografische Hash-Funktion ?
Wenn ja, wird es mit dem Kernel selbst bereitgestellt?
BEARBEITEN: - Ich beziehe mich auf die Funktion, die hauptsächlich zum Speichern von Benutzeranmeldekennwörtern verwendet wird.
Antworten:
Nein und nein zu Ihren Fragen.
Ich würde einen Blick auf die
crypt(3)
Funktion werfen, um weitere Informationen zu erhalten. Vonman crypt(3)
:Sie können Ihr Pam-Setup überprüfen, um festzustellen, ob Sie MD5 oder DES verwenden:
Und Sie können in dieser
/etc/shadow
Systemdatei sehen, dass es auch MD5 verwendet:Die Codes, die Sie
/etc/shadow
für jede Art von Hashing sehen:In Red Hat-Distributionen können Sie dies mit dem
authconfig
Befehl ändern .Verweise
quelle
Beachten Sie, dass eine Kennwort-Hash-Funktion eine bestimmte Art von kryptografischer Hash-Funktion ist, die nicht für andere Verwendungen von kryptografischen Hash-Funktionen verwendet wird. Eine Passwort-Hash-Funktion muss langsam sein. Normalerweise verwenden wir schnelle kryptografische Hash-Funktionen. Technisch gesehen ist eine Passwort-Hash-Funktion keine Hash-Funktion, sondern ein Salted- Key-Stretching-Algorithmus , der zwei Eingaben (das Passwort und das Salt) übernimmt, während eine Hash-Funktion eine einzige Eingabe (die Daten) übernimmt. Siehe So sichern Sie Passwörter sicher? Weitere Informationen zum Passwort-Hashing.
Aus historischen Gründen wird in vielen Unix-Dokumenten das Kennwort-Hashing als "Verschlüsselung" bezeichnet. Dies ist jedoch kein Verschlüsselungsprozess (Sie können einen Hash nicht wieder in das Kennwort entschlüsseln). Der historische Grund ist, dass in den frühen Tagen von Unix die Passwort-Hashing-Funktion auf dem DES- Algorithmus basiert, der hauptsächlich für die Verschlüsselung verwendet wird.
Das Passwort-Hashing wird von einer Funktion in der Standardbibliothek aufgerufen
crypt
. (Beachten Sie, dass es ein traditionelles Unix-Dienstprogramm gibtcrypt
, das nicht verwandt ist. Dieses verschlüsselt tatsächlich.) Der Kernel weiß nichts über Kennwörter. (Einige Kernel auf einigen Plattformen bieten eine kryptografische Bibliothek, um die Vorteile von Hardwarebeschleunigern zu nutzen.)Die historische
crypt
Funktion verwendete einen DES-basierten Algorithmus, der für die damalige Zeit in Ordnung war, aber für die heutigen Computergeschwindigkeiten zu schwach ist. Heute ist die Passwort - Hash - Funktion durch die Zeichen zu Beginn des Salzes angegeben:$1$
,$5$
,$6$
, ... Diese drei Werte (und ein paar mehr) sind de - facto - Standard in vielen Unix - Varianten (einschließlich Linux - Systemen auf Basis von Glibc, die praktisch alle nicht eingebettete und einige der größeren eingebetteten). Einige Unix-Varianten bieten mehr Auswahlmöglichkeiten. Eingebettete Linux-Systeme verfügen möglicherweise nicht über alle diese Methoden.$1$
basiert auf MD5, jedoch mit einer festen Anzahl von Iterationen und ist aus diesem Grund veraltet.$5$
und$6
basieren auf einer variablen Anzahl von Iterationen von SHA2-256 bzw. SHA2-512. Weitere Informationen finden Sie unter Erstellen von SHA512-Kennwort-Hashes in der Befehlszeile, wenn Sie einige Kennwort-Hashes über die Befehlszeile berechnen möchten.quelle
Nein, und es wird nicht vom Kernel bereitgestellt. Abhängig von der Version, der Distribution und den von Ihnen verwendeten Unixen finden Sie unterschiedliche Hash-Codierungsalgorithmen (ich nehme an, Sie möchten hauptsächlich das Passwort speichern).
Wenn Sie die
/etc/shadow
Datei als root betrachten, können Sie sehen, welcher Hash unter Ihrem Linux verwendet wird.Wenn Sie etwas mit einem Hash signieren möchten, integrieren die meisten Unices die Binärdatei
md5sum
odersha1sum
quelle
md5sum
und Freunde die üblichen kryptografischen Hashes sind, die nicht zum Hashing von Passwörtern verwendet werden. Passwort-Hashes sind langsam; Die üblichen unter Unix basieren auf MD5 oder SHA-2 (viele Male wiederholt und mit Salz eingeworfen). Siehe meine Antwort für weitere Details.