Menu
CoddyTech

Dériver une clé de mot de passe

Fait partie de la section Authentification et sécurité du Journey Node.js de Coddy. Leçon 2 sur 24.

Une clé de mot de passe est calculée à partir d’un mot de passe et d’un sel. Contrairement à un encodage, ce calcul n’est pas conçu pour être inversé. Scrypt rend les tentatives de deviner le mot de passe coûteuses en exigeant du travail pour chaque essai. Avec le même mot de passe, le même sel et les mêmes paramètres de dérivation, y compris la longueur de la clé, la clé est reproductible. Cette clé dérivée est communément appelée le hachage du mot de passe.

const key = await scryptAsync('invite 4821', 'example-only', 16);
return key.toString('hex');

Le troisième argument est la longueur de la clé en octets. L’utilitaire fourni utilise promisify pour transformer scrypt, qui repose sur les rappels de Node, en une fonction qui renvoie une promesse. Tu peux utiliser await avec cette fonction, comme pour la lecture d’un fichier. Le sel fixe utilisé dans cet exercice te permet de comparer les résultats ; pour stocker de vrais mots de passe, on utilise un nouveau sel aléatoire.

L’exercice suivant génère le nouveau sel aléatoire nécessaire lors du stockage d’un nouveau mot de passe.

challenge icon

Défi

Facile

Il s’agit d’un petit projet d’entraînement. Sa configuration est fournie ; modifie uniquement exercise.js.

Termine la fonction : dérive une clé de 32 octets à partir du mot de passe et du sel fournis, puis renvoie sa représentation hexadécimale dans key. Envoie deux fois {"password":"practice","salt":"fixed-for-this-exercise"} avec POST à /result : la même clé de 64 caractères apparaît. Modifie l’une ou l’autre des entrées et la clé change.

Essayez vous-même

import { scryptAsync } from './crypto.js';
export async function exercise({ password, salt }) {
    return { key: password };
}

Toutes les leçons de Authentification et sécurité

Entraînez-vous par vous-même : Playground Express