Database Security

Sécuriser les mots de passe dans MySQL : meilleures pratiques

Spread the love

Le stockage sécurisé des mots de passe est crucial pour toute application gérant des comptes utilisateurs. Le stockage en clair est extrêmement risqué et inacceptable. Cet article explore le stockage sécurisé des mots de passe dans MySQL, en se concentrant sur les meilleures pratiques modernes et en soulignant les faiblesses des méthodes obsolètes.

Table des matières :

Qu’est-ce que le hachage de mot de passe ?

Le hachage de mot de passe est une fonction cryptographique unidirectionnelle transformant un mot de passe en une chaîne de caractères de taille fixe (le hachage). Il est informatiquement impossible d’inverser ce processus, ce qui signifie que vous ne pouvez pas récupérer le mot de passe original à partir de son hachage. Cela protège les mots de passe même si la base de données est compromise.

Cependant, tous les algorithmes de hachage ne sont pas créés égaux. La sécurité dépend de la résistance aux attaques par collision (différents mots de passe produisant le même hachage) et aux attaques par force brute (essayer de nombreux mots de passe). Les algorithmes obsolètes sont vulnérables.

Pourquoi éviter MD5 et SHA1 ?

MD5 et SHA1 sont obsolètes et cryptographiquement brisés pour le stockage des mots de passe. Ils sont sensibles à diverses attaques, les rendant impropres à la sécurisation des identifiants utilisateur. Ne les utilisez jamais.

Fonction PASSWORD() de MySQL

La fonction PASSWORD() intégrée de MySQL offre une sécurité légèrement meilleure que MD5 ou SHA1, mais elle n’est toujours pas recommandée pour les applications modernes. Bien que ce soit une amélioration, des algorithmes plus robustes sont facilement disponibles.

Exemple (à des fins d’illustration uniquement ; ne pas utiliser en production) :


INSERT INTO users (username, password) VALUES ('john_doe', PASSWORD('mysecretpassword'));

Vérification (à des fins d’illustration uniquement ; ne pas utiliser en production) :


SELECT * FROM users WHERE username = 'john_doe' AND PASSWORD('mysecretpassword') = password;

Fonction ENCRYPT() de MySQL

La fonction ENCRYPT() de MySQL est également faible et doit être évitée pour le stockage des mots de passe. Elle offre une protection insuffisante contre les attaques modernes.

Meilleures pratiques modernes : Bcrypt, Argon2 et Scrypt

Utilisez des algorithmes de hachage modernes et robustes tels que bcrypt, Argon2 ou scrypt. Ceux-ci sont conçus pour être coûteux en calcul, rendant les attaques par force brute beaucoup plus difficiles. Crucialement, ne mettez jamais en œuvre le hachage de mot de passe vous-même. Utilisez des bibliothèques établies dans votre langage de programmation choisi pour éviter les erreurs courantes et garantir une implémentation correcte, y compris le salage et le poivrage.

Ces bibliothèques gèrent la complexité du hachage sécurisé des mots de passe, notamment :

  • Salage : Ajout d’une chaîne aléatoire au mot de passe avant le hachage, le rendant unique même si le même mot de passe est utilisé plusieurs fois.
  • Poivrage (facultatif) : Ajout d’une chaîne secrète côté serveur, améliorant encore la sécurité.
  • Facteurs de coût adaptatifs : Ajustement de la complexité du hachage en fonction des ressources disponibles, rendant plus difficile à craquer avec une puissance de calcul accrue.

Envisagez d’utiliser un système de gestion de mots de passe dédié si vous n’avez pas l’expertise nécessaire pour implémenter correctement la gestion sécurisée des mots de passe.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *