El uso de memoria de SCrypt proviene de su uso de una larga lista de números aleatorios psuedo. Como esta lista es pseudo -random, hay dos formas de tratarla:
-
Calcule previamente toda la lista y guárdela en la memoria. Dado que se espera que se acceda a cada elemento muchas veces, esto reduce el costo de la CPU pero aumenta el costo de la memoria.
-
Calcule cada elemento de la lista según sea necesario. Esto tiene muchas veces el costo de la CPU del cálculo previo, pero el uso de la memoria se reduce solo al elemento de la lista que realmente se está utilizando en el paso actual del proceso.
Es posible hacer un algoritmo híbrido en el que se precalifique parte de la lista y el resto se calcule según sea necesario, pero la mayoría de las implementaciones irán para un extremo u otro.
El objetivo es limitar la capacidad de las GPU para calcular muchos hashes en paralelo. Como la GPU típica tiene solo unos pocos megabytes de RAM por núcleo, un atacante necesita usar un algoritmo eficiente en algunos núcleos, o usar todos los núcleos pero un algoritmo altamente ineficiente.