L'ANSSI (Agence nationale de la sécurité des systèmes d'information) recommande, dans son référentiel général de sécurité, l'usage de fonctions de dérivation de clé "à coût mémoire" pour le stockage des mots de passe sensibles — une catégorie où scrypt et Argon2 sont cités côte à côte, contrairement à des standards plus anciens qui ne demandent que du temps de calcul.
Qu'est-ce qu'une fonction memory-hard
Un algorithme memory-hard est volontairement conçu pour que le calcul d'un seul hachage nécessite de conserver en mémoire une grande quantité de données intermédiaires. Essayer d'économiser de la mémoire au prix d'un recalcul des valeurs augmente au contraire fortement le temps de calcul — l'attaquant doit donc sacrifier soit la mémoire, soit la vitesse.
Pourquoi cela complique les attaques sur du matériel spécialisé
Les puces ASIC et les GPU sont très efficaces pour exécuter en masse et en parallèle des opérations arithmétiques simples, mais ajouter de la mémoire à chaque flux de calcul parallèle coûte bien plus cher et s'adapte moins bien. Scrypt rend une attaque frontale sur ce type de matériel économiquement moins intéressante par rapport aux fonctions de hachage classiques.
Pourquoi c'est utile
- Choisir un algorithme de hachage de mots de passe résistant aux attaques par fermes de GPU.
- Comprendre le concept des fonctions memory-hard dans le contexte de la cryptographie.
- Comparer les compromis de scrypt face à bcrypt et Argon2 pour un système donné.
Combien de mémoire est réellement nécessaire
La quantité de mémoire nécessaire pour un calcul scrypt est approximativement égale à 128 × N × r octets. Avec des paramètres typiques (N=16384, r=8), cela représente environ 16 mégaoctets par hachage — négligeable pour une seule connexion, mais si un serveur doit traiter des milliers d'authentifications simultanées, le volume total de mémoire devient rapidement une contrainte réelle dans le choix des paramètres, et pas seulement une exigence de sécurité abstraite.