Glossary
Fonction memory-hard
Une fonction memory-hard exige une grande quantité de RAM par tentative, fermant l'avantage des GPU/ASIC qui rend crackables les hash limités par le calcul.
Une fonction memory-hard est un algorithme de hachage de mot de passe conçu pour que chaque tentative nécessite une grande quantité de RAM, difficile à réduire, et pas seulement des cycles CPU ou GPU. Argon2 en est l'exemple de référence actuel : ses paramètres fixent un coût mémoire en kilo-octets que chaque calcul de hash doit allouer, en plus d'un coût temporel et d'un facteur de parallélisme. scrypt a inauguré la même idée plus tôt avec ses paramètres N/r/p.
L'objectif est de fermer l'avantage qui rend un hash purement limité par le calcul, comme MD5 ou SHA-1, si bon marché à attaquer : un GPU embarque des milliers de cœurs capables de calculer ces hash en parallèle à coût quasi nul, mais les GPU disposent de relativement peu de mémoire par cœur. En forçant chaque tentative à retenir, disons, 64 Mo en mémoire, un attaquant ne peut plus faire tourner des milliers de tentatives côte à côte sur la même carte — c'est l'exigence mémoire, et non l'arithmétique, qui devient le goulot d'étranglement, et elle est bien plus coûteuse à faire passer à l'échelle que le calcul brut.
La memory-hardness complète, sans le remplacer, un facteur de coût : les deux paramètres sont généralement ajustés ensemble. Voir Argon2 vs bcrypt vs scrypt pour comprendre l'interaction entre mémoire, temps et parallélisme, et régler hashcat pour un vrai débit GPU pour voir pourquoi les hash memory-hard se cassent à une infime fraction de la vitesse d'une empreinte brute.