Générateur de mots de passe scrypt
Calculez le hash d’un mot de passe avec scrypt, une fonction de dérivation de clé exigeante en mémoire. Définissez le salt, le coût (N), la taille de bloc (r), la parallélisation (p) et la longueur de clé, puis obtenez le hash sous forme de chaîne PHC, hexadécimale et Base64. Fonctionne dans votre navigateur.
Entrée
Sortie
Documentation
Qu’est-ce que scrypt ?
scrypt est une fonction de hachage de mots de passe, ou fonction de dérivation de clé, conçue par Colin Percival en 2009 et publiée sous la référence RFC 7914. Comme bcrypt et Argon2, elle est volontairement lente : chaque tentative coûte du temps à un attaquant. Elle exige également beaucoup de mémoire : chaque hachage remplit un grand bloc de mémoire, puis le relit dans un ordre imprévisible, ce qui rend le déchiffrement par GPU et par puces personnalisées bien plus coûteux. scrypt est utilisée pour le stockage des mots de passe dans de nombreux frameworks web, dans les bibliothèques standard de Node.js, Python et Go, ainsi que dans des portefeuilles de cryptomonnaies, comme les magasins de clés Ethereum.
Description de l’outil
Cet outil calcule le hachage d’un mot de passe avec scrypt dans votre navigateur. Il utilise au départ un sel aléatoire et les paramètres recommandés par OWASP pour le stockage des mots de passe. Vous pouvez modifier le sel, le coût (N), la taille de bloc (r), le parallélisme (p) et la longueur de clé. Le hachage est disponible sous forme de chaîne PHC, utilisable par les bibliothèques de gestion des mots de passe, ainsi qu’en hexadécimal et en Base64 pour le code qui stocke séparément le sel et les paramètres.
Fonctionnalités
- Calcule le hachage d’un mot de passe avec scrypt, conformément à la RFC 7914
- Crée un sel aléatoire de 16 octets et propose un bouton pour en générer un nouveau
- Accepte votre propre sel pour reproduire un hachage calculé ailleurs
- Définit le coût (N) de 2⁴ à 2²⁰, la taille de bloc (r), le parallélisme (p) et la longueur de clé
- Fournit le hachage sous forme de chaîne PHC, en hexadécimal et en Base64
- Affiche la progression des hachages lents et avertit lorsque les paramètres nécessitent plus de 1 Gio de mémoire
- Fonctionne dans votre navigateur : le mot de passe ne quitte donc jamais votre appareil
Paramètres
| Paramètre | Valeur par défaut | Fonction |
|---|---|---|
| Coût (N) | 131072 (2¹⁷) | Nombre de blocs mémoire. Le doubler double le temps et la mémoire. |
| Taille de bloc (r) | 8 | Taille de chaque bloc, soit 128 × r octets. Influe aussi sur le temps et la mémoire. |
| Parallélisme (p) | 1 | Nombre d’exécutions indépendantes. Multiplie le temps, mais pas la mémoire. |
| Longueur de clé | 32 octets | Longueur du hachage. |
La mémoire nécessaire est de 128 × N × r octets, soit 128 Mio avec les valeurs par défaut.
Formats de sortie
La chaîne PHC contient tout ce qui est nécessaire pour vérifier le mot de passe ultérieurement : l’algorithme, les paramètres, le sel et le hachage. Le sel et le hachage sont encodés en Base64 sans remplissage :
$scrypt$ln=17,r=8,p=1$<salt>$<hash>ln est le logarithme en base 2 de N : ln=17 signifie donc que N = 131072. C’est le format que passlib pour Python, la crate Rust scrypt et le paquet Node.js @phc/scrypt savent lire et écrire.
Les champs hexadécimal et Base64 contiennent uniquement le hachage, tel que renvoyé par crypto.scrypt dans Node.js, hashlib.scrypt dans Python et scrypt.Key dans Go. Stockez le sel et les paramètres avec le hachage.
Fonctionnement
Le champ du sel est lu comme du texte et encodé en UTF-8, comme lorsqu’on transmet une chaîne de caractères en guise de sel à crypto.scrypt dans Node.js. Le sel aléatoire est composé de 16 octets aléatoires écrits sous la forme de 32 caractères hexadécimaux ; ce sont ces 32 caractères qui sont utilisés pour calculer le hachage. Le mot de passe est lui aussi encodé en UTF-8. Le hachage est calculé dans un thread d’arrière-plan afin que la page reste réactive. Le calcul redémarre dès que vous modifiez une entrée.
Conseils
- Utilisez un nouveau sel aléatoire pour chaque mot de passe. Un même mot de passe associé au même sel produit toujours le même hachage.
- OWASP recommande au minimum N = 2¹⁷, r = 8 et p = 1 pour le stockage des mots de passe. Augmentez N autant que votre serveur peut se le permettre pour chaque connexion.
- Node.js limite par défaut la mémoire utilisée par scrypt à 32 Mio. Indiquez une valeur
maxmemsupérieure àcrypto.scryptsi vous utilisez N = 2¹⁷ ou plus avec r = 8. - Pour vérifier un hachage provenant d’un autre système, saisissez le même mot de passe, le même sel et les mêmes paramètres, puis comparez les résultats.