Comment un hachage de mot de passe est-il encodé dans le fichier de mot de passe caché?


11

J'apprends la sécurité des mots de passe Linux (plus de curiosité que tout ce qui est utile) et je comprends que le vrai mot de passe est haché et stocké dans le fichier de mot de passe caché. Ce dont je ne suis pas sûr et que je n'ai pas pu trouver dans mon bref Google, c'est quel encodage est utilisé pour encoder la valeur hachée (et la valeur du sel). Ce n'est évidemment pas hexadécimal, et c'est évidemment du texte, à l'exclusion du :caractère. Quelqu'un peut-il me dire ici ce qu'est cet encodage?

Edit: je comprends le hachage (MD5, SHA-X), le sel et le spécificateur de hachage. Ce que je recherche, c'est la méthode de conversion des résultats de hachage (un tableau d'octets (octet [])) en la séquence de caractères que je vois dans le fichier, c'est-à-dire l'encodage.


Votre question est très liée à cette question.
Broam

Réponses:


11

Dans le cas de MD5 crypt (), le sel n'est qu'une chaîne aléatoire de 8 caractères au maximum de [a-zA-Z0-9./].

Le sel et le mot de passe sont ensuite hachés ensemble, passés par une fonction de renforcement, puis encodés à l'aide d'une variante sur Base64:

  • l'état MD5 (128 bits) est mélangé et divisé en 6 groupes, chacun contenant 3 octets (le dernier groupe comprend 2 octets de remplissage nul)
  • chaque groupe de 3 octets est ensuite divisé en 4 blocs de 6 bits chacun
  • enfin, chaque groupe de 6 bits est mappé sur un caractère de la plage [a-zA-Z0-9./]

8

Si vous voulez seulement savoir comment le mot de passe est encodé, crypt () utilise un encodage spécial de type Base64.

Le codage Base64 utilise le jeu de caractères suivant: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /

Alors que l' encodage crypt () utilise ce jeu de caractères: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

De plus, contrairement à Base64, il n'y a pas de remplissage "=".

D'un autre côté, les implémentations crypt () de MD5, SHA-X, etc. font plus que simplement générer un sel aléatoire, exécuter la fonction de hachage et l'encoder en utilisant l'ancien encodage.

Je recommande de lire ces deux excellents articles: "Hachage de mot de passe avec MD5-crypt en relation avec MD5" et "Implémentation de SHA512-crypt vs MD5-crypt" , pour une explication plus complète.



2

Recherchez-vous l'algorithme utilisé?

Traditionnellement, Unix et les premières variantes de Linux utilisaient un DES affaibli basé sur un maximum de 8 caractères du mot de passe. La plupart des installations Linux modernes utilisent des hachages MD5 pour les mots de passe, et certaines prennent en charge SHA. De plus, une prise en charge plus modulaire d'algorithmes supplémentaires est apparue, y compris Blowfish. La libc GNU utilisée par la plupart des Linux prend en charge DES, MD5 et SHA, vous offrant quelques options.

Le type spécifique d'algorithme de hachage utilisé est spécifié comme début du mot de passe par $ DIGIT $. Par exemple, $ 1 $ est MD5.

Vous pouvez obtenir des détails plus approfondis sur Wikipedia (voir la page sur Crypt_ (Unix) ) ou sur google pour «crypt unix» ou «crypt linux».

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.