Linux ne « décode » pas les mots de passe. Il utilise un processus de hachage et salage pour stocker les mots de passe en toute sécurité. Voici une description de l'algorithme et des concepts associés :
1. L'objectif :stockage sécurisé des mots de passe
Le principe fondamental est que le mot de passe réel en clair n’est *jamais* stocké nulle part. Si la base de données contenant les mots de passe était compromise, les attaquants auraient instantanément accès à tous les comptes d'utilisateurs. Le hachage et le salage empêchent cela.
2. Hachage :
* Fonction unidirectionnelle : Le hachage est une opération mathématique qui transforme le mot de passe en une chaîne de caractères de taille fixe appelée « hachage ». Il s'agit d'une fonction *à sens unique*, ce qui signifie qu'il est informatiquement impossible (extrêmement difficile et long) d'inverser le processus et de dériver le mot de passe d'origine à partir du hachage.
* Résistance aux collisions : Idéalement, différents mots de passe devraient produire des hachages différents. Un bon algorithme de hachage minimise le risque de « collision », où deux mots de passe différents génèrent le même hachage.
* Algorithmes de hachage courants sous Linux :
* bcrypt : Souvent considéré comme le choix le plus solide et préféré. Il comprend un sel intégré et est conçu pour être coûteux en calcul, ce qui le rend résistant aux attaques par force brute.
* Argon2 : Un algorithme de hachage de mot de passe moderne qui est également conçu pour être coûteux en termes de calcul et de mémoire, augmentant encore la résistance aux attaques. Cela devient de plus en plus populaire.
* crypt : Une autre fonction de dérivation clé conçue pour résister aux attaques par force brute.
* SHA-512 : (Moins courant *maintenant* pour le hachage direct de mot de passe, mais souvent utilisé dans le cadre d'une fonction de dérivation de clé plus large). Historiquement, il a été utilisé. Est encore parfois utilisé dans le cadre des configurations PAM.
* MD5, SHA-1, SHA-256 : Ne les utilisez pas ! Ceux-ci sont considérés comme obsolètes et vulnérables au hachage direct des mots de passe. Ils sont trop rapides et faciles à déchiffrer avec du matériel moderne et des tables arc-en-ciel précalculées. Ils peuvent être trouvés dans des systèmes plus anciens, mais doivent être mis à niveau.
3. Salage :
* Ajout de caractère aléatoire : Un « sel » est une chaîne aléatoire de caractères unique pour chaque utilisateur. Le sel est concaténé (ajouté) au mot de passe *avant* qu'il soit haché.
* Prévenir les attaques de Rainbow Table : Les tables arc-en-ciel sont des tables de hachage précalculées pour les mots de passe courants. Sans salage, un attaquant pourrait simplement rechercher le hachage dans une table arc-en-ciel pour trouver le mot de passe correspondant. Le salage rend les tables arc-en-ciel inutiles car chaque mot de passe possède un sel unique, ce qui donne un hachage unique même pour les mots de passe courants.
* Le sel est stocké avec le hachage : Surtout, le sel lui-même est stocké avec le mot de passe haché dans le fichier `/etc/shadow` (ou dans certaines bases de données des systèmes modernes). Il ne s'agit *pas* d'une faille de sécurité ; le sel est *obligatoire* pour vérifier un mot de passe.
* Pourquoi conserver le sel ? Pour vérifier le mot de passe d'un utilisateur, le système doit :
1. Récupérez le sel stocké pour cet utilisateur.
2. Concaténez le mot de passe saisi avec le sel.
3. Hachez le résultat en utilisant le *même* algorithme de hachage utilisé à l'origine.
4. Comparez le hachage nouvellement généré avec le hachage stocké. S'ils correspondent, le mot de passe est correct.
4. Le fichier `/etc/shadow` (approche traditionnelle)
Traditionnellement, les mots de passe des utilisateurs et leurs informations associées sont stockés dans le fichier `/etc/shadow`. (Remarque :l'affichage ou la modification directe de ce fichier nécessite généralement les privilèges root).
* Autorisations : Le fichier `/etc/shadow` n'est généralement lisible que par l'utilisateur `root`, garantissant que les utilisateurs réguliers ne peuvent pas voir les mots de passe hachés des autres utilisateurs.
* Structure : Chaque ligne du fichier `/etc/shadow` représente un compte utilisateur et a le format suivant (simplifié) :
```
nom d'utilisateur : hashed_password : last_change : min_days : max_days : warn_days : inactive_days : expire_date : flags
```
* Le champ `hashed_password` : C'est ici que le mot de passe salé et haché est stocké. Le format de ce champ comprend généralement un identifiant pour l'algorithme de hachage utilisé, le sel et le hachage réel. Par exemple:
* `$6$SOME_RANDOM_SALT$aVeryLongHashedPasswordString` (cela utilise SHA-512)
* `$2b$10$ANOTHER_RANDOM_SALT$EvenLongerHashedPasswordString` (cela utilise bcrypt)
* « 6 $ » indique SHA-512
* `$2b` indique bcrypt
* Le nombre (par exemple, « 10 » dans bcrypt) indique le *facteur de coût* ou le *facteur de travail*. Un facteur de coût plus élevé rend le processus de hachage plus coûteux en termes de calcul, augmentant ainsi le temps nécessaire pour déchiffrer le mot de passe.
5. Systèmes modernes et PAM (modules d'authentification enfichables)
* Bases de données : Les systèmes modernes utilisent souvent des bases de données (par exemple, LDAP, Active Directory) pour stocker les informations sur les comptes d'utilisateurs, y compris les mots de passe hachés.
* PAM : PAM est un cadre flexible qui permet aux administrateurs système de configurer différents mécanismes d'authentification. Il est utilisé pour gérer le processus d'authentification, notamment le hachage des mots de passe, la vérification des mots de passe et l'exécution d'autres tâches liées à la sécurité. Les fichiers de configuration PAM (par exemple, dans `/etc/pam.d/`) déterminent quels modules d'authentification sont utilisés et comment ils sont configurés.
Exemple de scénario :vérification du mot de passe de l'utilisateur
1. L'utilisateur saisit le mot de passe : L'utilisateur saisit son mot de passe dans une invite de connexion ou une application.
2. Le système récupère le sel : Le système recherche le compte de l'utilisateur et récupère le sel stocké dans `/etc/shadow` (ou dans la base de données appropriée).
3. Concaténation et hachage : Le système concatène le mot de passe saisi avec le sel récupéré. Ensuite, il utilise l'algorithme de hachage indiqué dans l'entrée `/etc/shadow` (par exemple, SHA-512 ou bcrypt) pour hacher le mot de passe et le sel combinés.
4. Comparaison : Le hachage nouvellement généré est comparé au hachage stocké dans `/etc/shadow`.
5. Réussite/échec de l'authentification : Si les deux hachages correspondent, l'authentification réussit. Sinon, l'authentification échoue.
Considérations importantes :
* Complexité du mot de passe : Encouragez les utilisateurs à choisir des mots de passe forts, longs, complexes et difficiles à deviner.
* Modifications régulières du mot de passe : Demander périodiquement aux utilisateurs de modifier leurs mots de passe peut contribuer à atténuer le risque de compromission des mots de passe.
* Authentification multifacteur (MFA) : L'utilisation de MFA ajoute une couche de sécurité supplémentaire en obligeant les utilisateurs à fournir plusieurs formes d'identification, telles qu'un mot de passe et un code provenant de leur téléphone.
* Audits de sécurité : Un audit régulier de la configuration de sécurité de votre système peut aider à identifier et à corriger les vulnérabilités potentielles.
* Rester à jour : Gardez votre système d'exploitation et vos logiciels à jour avec les derniers correctifs de sécurité.
En résumé : Linux ne « décode » pas les mots de passe. Il utilise une forte combinaison de salage et de hachage pour stocker en toute sécurité les représentations de mots de passe. Les algorithmes « bcrypt » et « Argon2 » sont généralement préférés pour leur résistance aux attaques par force brute. Une configuration correcte de PAM et la sécurité de votre système sont essentielles à la protection des comptes d'utilisateurs.
|