Estirando un hash, muchas iteraciones versus una cadena de entrada más larga

10

He estado leyendo sobre varios esquemas de hash de contraseñas, por ejemplo, la Crypt basada en SHA propuesta por Ulrich Drepper y usado en algunas versiones de Linux.

Un tema recurrente aquí es 'fortalecer' o 'estirar' la función de hash, usando muchas iteraciones del mismo hash. El tiempo de ejecución de la función de hashing también se puede aumentar concatenando salt y password juntos varios miles de veces, para formar una cadena mucho más larga, y luego hash la cadena una vez. Sin embargo, este método no parece ser favorecido.

¿Por qué? ¿Por qué parece que la concatenación de salt y password juntas no es una forma viable de extender la función hash?

    
pregunta Jesper Mortensen 27.04.2011 - 20:27
fuente

2 respuestas

6

La razón principal por la que muchas veces no se utiliza la concatenación de la sal y la contraseña es una combinación de tradición y pereza. Es decir, dado que el tamaño de la contraseña no es fijo, el número de copias debería ajustarse para que el tamaño de "cadena más larga" alcance un objetivo determinado. Parece que algunos implementadores iniciales de dichos esquemas lo consideraron engorroso, posiblemente porque implica el uso de una implementación de función hash "transmitida" (que acepta datos por trozos sucesivos) en lugar de una implementación de llamada de una sola función. La mayoría de los diseñadores ulteriores simplemente copiaron los diseños anteriores sin ninguna razón real buena (ni mala).

En un punto de vista teórico, las múltiples concatenaciones de la sal y la contraseña son mejores, ya que múltiples iteraciones reducen el espacio de los posibles valores de hash (una función de hash no es una permutación). Pero la reducción no va por debajo del espacio 2 128 de una función hash de 256 bits, así que no se preocupe aquí.

    
respondido por el Thomas Pornin 27.04.2011 - 21:55
fuente
5

La razón para 'estirar' (iterar) la función hash para el almacenamiento de contraseñas no es hacer un hash más fuerte, sino simplemente reducir la velocidad de la función, con el fin de reducir la fuerza bruta sin conexión y los ataques basados en diccionarios.

La iteración es solo una forma simple de lograrlo, porque los resultados son fáciles de entender (1000 iteraciones toman alrededor de 1000 veces más que una). La concatenación tendría un efecto similar, pero sería más difícil averiguar cuánto tiempo debía tener la cadena de entrada para obtener una desaceleración similar.

    
respondido por el frankodwyer 27.04.2011 - 20:35
fuente

Lea otras preguntas en las etiquetas