Image de couverture - Hacher un Mot de Passe en JS avec Bcrypt

Hacher un Mot de Passe en JS avec Bcrypt

Apprenez à hacher des mots de passe en JavaScript avec Bcrypt pour sécuriser les informations sensibles de vos utilisateurs.

Icône de calendrier
Icône de chronomètre 4 min

La sécurité des mots de passe est une préoccupation majeure pour les utilisateurs mais aussi les développeurs qui en implémentent les mécaniques dans leurs applications. Lorsqu’un utilisateur crée un compte sur une application, il est crucial de s’assurer que son mot de passe soit stocké de manière sécurisée. Cet article a pour but de vous guider à travers les étapes essentielles pour hacher des mots de passe en JavaScript avec Bcrypt

Pourquoi hacher les mots de passe ?

Qu’est-ce que le hachage ?

Hacher un mot de passe consiste à le transformer en une chaîne de caractères inintelligible à l’aide d’un algorithme.

Contrairement au chiffrement qui est réversible, le hachage est un processus à sens unique : une fois haché, il n’existe pas de méthode de « déhachage », permettant de retrouver le mot de passe original à partir de la chaîne hachée.

Il est donc très laborieux (mais pas impossible avec des 🌈 Rainbow Tables…), de retrouver le mot de passe original à partir du hachage.

Avantages du hachage

Sécurité

Les mots de passe hachés sont protégés contre les attaques, même si une base de données est compromise.

Le mot de passe laConsole<3 donnerait par exemple le hash : $2y$10$5kPUaQdwJ8NeogHQUtcDheN1q4jZwIV3ocLB/v2EkTu3I/ZG (chaîne hachée avec la fonction bcrypt, ne pouvant être déchiffrée).

Inviolabilité

Les algorithmes de hachage modernes ajoutent une couche de protection supplémentaire en utilisant du sel (ou « salt »).

Saler un mot de passe signifie lui ajouter des caractères aléatoires au moment de la génération du hash de sorte à rendre chaque hachage quasi-unique (on parle de « résistance aux collisions »).

Ainsi, 2 mots de passe identiques ne donneraient pas les mêmes hashs.

Aussi, de nombreux algorithmes de hachage utilisent un facteur de travail (ou « work factor ») pour contrôler le nombre d’itérations du processus de hachage. Plus le facteur de coût est élevé, plus le processus est lent et plus il est difficile de générer un hachage par force brute.

Cela rend plus difficile pour un attaquant de craquer un mot de passe en essayant simplement tous les mots de passe possibles.

Performance

Les algorithmes de hachage modernes sont conçus pour être rapides et efficaces.

La bibliothèque Bcrypt

Qu’est-ce que Bcrypt ?

Bcrypt est une bibliothèque de hachage de mots de passe qui a été créée en 1999 par Niels Provos et David Mazières.

Elle est basée sur l’algorithme de chiffrement Blowfish et est conçu pour être résistant aux attaques par brute force en augmentant sa complexité via un facteur de travail ajustable.

Bcrypt est aujourd’hui très appréciée pour sa robustesse et est devenue l’option la plus répandue pour stocker des mots de passe de manière sécurisée grâce à l’ajout d’un sel unique pour chaque hachage.

Cette fonction a été implémentée au sein de nombreux langages et bibliothèques pour sécuriser des données en tout genre.

Installer Bcrypt en JavaScript

Pour commencer à utiliser Bcrypt en JavaScript, vous devez d’abord installer la bibliothèque bcrypt. Vous pouvez le faire via npm (Node Package Manager).

copié !
npm install bcrypt

Utiliser Bcrypt pour hacher un mot de passe

Voici un exemple simple pour hacher un mot de passe en utilisant Bcrypt dans une application Node.js.

copié !
const bcrypt = require('bcrypt');
const saltRounds = 10; // Facteur de travail

const hashPassword = async (plainPassword) => {
  try {
    const salt = await bcrypt.genSalt(saltRounds);
    const hashedPassword = await bcrypt.hash(plainPassword, salt);
    console.log('Mot de passe haché :', hashedPassword);
    return hashedPassword;
  } catch (error) {
    console.error('Erreur lors du hachage du mot de passe :', error);
    throw error;
  }
};
  1. Importer Bcrypt : La bibliothèque est importée en utilisant require.
  2. Définir le coût de calcul : saltRounds détermine le nombre de fois que l’algorithme de hachage sera exécuté (il représente le facteur de travail). Plus ce nombre est élevé, plus le processus sera lent et donc sécurisé.
  3. Générer un sel : bcrypt.genSalt(saltRounds) génère un sel unique pour chaque mot de passe.
  4. Hacher le mot de passe : bcrypt.hash(plainPassword, salt) crée le hachage sécurisé du mot de passe en utilisant le sel généré.

Nous pourrions ensuite appeler cette fonction en lui transmettant une chaîne à hacher :

copié !
hashPassword('monMotDePasseSuperSecret');

Vérifier un mot de passe haché

Une fois le mot de passe haché stocké, il est important de pouvoir vérifier si un mot de passe saisi par un utilisateur correspond au hachage stocké (pour un processus d’authentification par exemple). Voici comment procéder :

copié !
const verifyPassword = async (plainPassword, hashedPassword) => {
  try {
    const match = await bcrypt.compare(plainPassword, hashedPassword);
    if (match) {
      console.log('✅ Mot de passe valide');
    } else {
      console.log('❌ Mot de passe invalide');
    }
    return match;
  } catch (error) {
    console.error('Erreur lors de la vérification du mot de passe :', error);
    throw error;
  }
};
  1. Comparer le mot de passe : bcrypt.compare(plainPassword, hashedPassword) vérifie si le mot de passe en clair correspond au hachage.
  2. Résultat de la vérification : La fonction retourne true si les mots de passe correspondent, sinon false.

Nous pourrions ensuite appeler cette fonction en lui transmettant un mot de passe en clair et un mot de passe haché :

copié !
const plainPassword = 'monMotDePasseSuperSecret';
const hashedPassword = '$2b$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36YzTQ0iP/hxt8PxyeKnVSS';
verifyPassword(plainPassword, hashedPassword);

Le hachage des mots de passe est une méthode efficace et sécurisée pour protéger les informations sensibles des utilisateurs. En intégrant un procédé de salage et en permettant d’ajuster le facteur de travail, la bibliothèque JavaScript Bcrypt propose une implémentation simple et robuste du hachage de mots de passe en JavaScript.

Lire aussi