Métodos para ralentizar un algoritmo de hash

19

Entiendo por qué un algoritmo de hash debería ser lento, pero ¿es el método que lo hace lento para la fuerza del hash? Todo lo que he leído dice que el algoritmo debería ser computacionalmente lento: tache la cosa en miles de iteraciones o concaténela con grandes cadenas para ralentizarla. Esto parece que pondría una tensión innecesaria en la CPU. ¿No podría simplemente codificar la contraseña una vez con un buen salt aleatorio y luego simplemente pausar el hilo por un tiempo determinado?

    
pregunta Matthew 08.08.2014 - 17:14
fuente

2 respuestas

43

El objetivo no es hacer que el hash sea más lento para que lo calcules. El objetivo es hacer que el hash sea lento para que un atacante lo calcule. Más específicamente, lento para un atacante que tiene hardware rápido y una copia del hash y del salt, y que, por lo tanto, tiene la capacidad de montar un ataque sin conexión. El atacante no necesita hacer una pausa en un subproceso durante sus cálculos simplemente porque lo agregó a su aplicación. Utilizará software y hardware que le permitirán calcular los hashes de la manera más rápida y eficiente posible. Por lo tanto, para que sea difícil para el computador, con todo su hardware rápido y su eficiente software de hash, el hash debe ser computacionalmente duro para que usted también pueda calcularlo.

    
respondido por el Xander 08.08.2014 - 17:29
fuente
2

Ejecutar unos cuantos miles de iteraciones o agregar una sal muy larga no es necesariamente la mejor manera de hacer que un hash se ejecute lentamente, pero es la más obvia (más fácil).

La intención es, ante todo, frenar los ataques masivamente paralelos . Un atacante no podrá forzar su hash en un tiempo razonable en una sola CPU. Utilizará una botnet o una máquina con varias GPU (o ambas).

Ejecutar el mismo hash mil veces no es precisamente lo más sabio, ya que es fácil ejecutar esta tarea en paralelo, y principalmente enfatiza la ALU, ambas son coincidencias perfectas para el cálculo de GPU. Por otro lado, el impacto en su CPU puede ser muy notable (dependiendo de la cantidad de iteraciones que realice).

Idealmente, un hash lento implicaría operaciones que dificulten la paralelización y que utilicen ancho de banda además de ALU sin formato, como requerir y tocar cantidades sustanciales de RAM (esto también limita la cantidad de instancias que pueden ejecutarse en un zombie sin ser necesario). detectado) o que requieren operaciones que son costosas en las GPU (por ejemplo, escrituras de acceso aleatorio).

Por supuesto, esto no es exactamente tan trivial como lograr simplemente ejecutando un hash de miles de iteraciones, por lo que uno suele recurrir a eso.

    
respondido por el Damon 09.08.2014 - 10:11
fuente

Lea otras preguntas en las etiquetas