¿Existe una tabla que compara los algoritmos de hashing por velocidad, relativamente (máquina independiente)

6

Por lo que entendí *, uno de los criterios principales al elegir un algoritmo de hashing de contraseña / sal es su velocidad. Para evitar ataques de fuerza bruta, un algoritmo más lento es mejor (y también hace que sea menos práctico generar tablas de arco iris)

Suponiendo que lo entendí correctamente, ¿hay alguna tabla que tenga puntos de referencia relativos independientes de la máquina de esos algoritmos, ordenados por velocidad?

por ejemplo

  • MD5
  • SHA-1
  • SHA-256
  • PBKDF2
  • bcrypt

por ejemplo Si teóricamente, bcrypt es x veces más lento que SHA-1, ¿entonces se consideran equivalentes las repeticiones de SHA-1 x? (para la prevención de ataques de fuerza bruta relacionados con contraseñas con hash y saladas al menos)

* Soy nuevo en seguridad, y en este sitio, sé amable

    
pregunta Eran Medan 21.11.2012 - 06:52
fuente

6 respuestas

8

PBKDF2 y bcrypt están configurados con un "recuento de iteraciones", lo que significa que se pueden hacer tan lento como se desee. Por lo tanto, no puede haber una tabla que muestre qué tan rápido van. Lo que debe hacer, en cambio, es decidir cuánto tiempo asigna a la función (por ejemplo, desea que tome 0.05 segundos en su servidor) y luego configure el recuento de iteraciones en consecuencia. Esto depende mucho de las capacidades informáticas de su servidor, por lo que es una cuestión de medida en su hardware de destino.

Para las otras funciones, puede encontrar una gran cantidad de datos en este sitio para las medidas de rendimiento de muchos Las funciones hash en muchas plataformas (aunque todas estas plataformas tienden a ser servidores, sistemas de escritorio o, en el peor de los casos, teléfonos inteligentes, los sistemas integrados más pequeños no están cubiertos). La imagen de alto nivel es que:

  • El rendimiento depende mucho del hardware.
  • El rendimiento depende mucho de la implementación .
  • Todas las funciones de hash definidas actualmente son demasiado rápidas para ser adecuadas para el hashing de contraseñas por sí mismas; necesita algún tipo de desaceleración a través de miles o millones de iteraciones.

Si bien PBKDF2 agrega iteraciones correctamente, aún se puede hacer mucho más rápido en el contexto de un ataque paralelo, usando una GPU; por lo tanto, es posible que prefieras usar una función que no sea amigable con la GPU, y, en este momento, esto significa bcrypt (scrypt es un buen candidato, cuando es lo suficientemente viejo como para ser confiable). Consulte esta respuesta para obtener más información.

    
respondido por el Thomas Pornin 21.11.2012 - 13:22
fuente
11

Para obtener una medición precisa, debe realizar una prueba comparativa utilizando el hardware que desea utilizar con el software previsto. La implementación hace una gran diferencia, además de que algunos hardware pueden tener aceleración incorporada para ciertos algoritmos.

Si pretendes usar OpenSSL, entonces estás de suerte, porque tienen una suite de evaluación comparativa integrada.

$ openssl speed md5 sha1 sha256
Doing md5 for 3s on 16 size blocks: 4595381 md5's in 3.00s
Doing md5 for 3s on 64 size blocks: 3732906 md5's in 3.00s
....
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              24508.70k    79635.33k   227390.21k   419190.78k   557154.30k
sha1             21918.90k    68573.48k   164350.12k   256347.14k   305924.78k
sha256           20979.09k    52742.04k   100939.52k   130634.07k   142630.91k
    
respondido por el tylerl 21.11.2012 - 19:08
fuente
4

Una tabla de este tipo no te ayudaría, averiguando qué algoritmo hash es el más adecuado para las contraseñas hash. La idea de las funciones de derivación de claves como Bcrypt y PBKDF2 es que el tiempo necesario es configurable y adaptable .

Eso significa que, con un factor de costo, usted decide cuántas iteraciones se realizan para cifrar una contraseña. Ajusta este valor, para que tu servidor no se ralentice demasiado, sino que pueda frustrar los ataques de fuerza bruta.

Como usted mismo tiene que determinar el tiempo permitido, no es tan importante, qué función hash utiliza (en relación con el tiempo). Sin embargo, lo que puede hacer una diferencia es qué tan buena puede implementarse la función hash en una GPU. Aquí hay una tabla de la herramienta Hashcat 2012 . Un algoritmo que intenta ser ineficaz en GPU es Scrypt , Bcrypt es seguramente una buena opción también.

    
respondido por el martinstoeckli 21.11.2012 - 10:49
fuente
3

Sí, se necesitan algoritmos más lentos para el hashing de contraseñas. Bcrypt y PBKDF2 son excelentes para este propósito. Aquí hay una gran comparación entre los dos

Es difícil responder a una pregunta independiente de la máquina, pero asumiré que está más interesado en el hash utilizando una aplicación de escritorio / servidor en Java. Algunas personas han ejecutado algunos de los algoritmos de hash que mencionó en hardware dedicado de GPU, FPGA o ASIC a una velocidad vertiginosa. El caso afortunado de Bcrypt y Scrypt es que fue diseñado para usar memoria lenta y resiste las optimizaciones de estilo GPU.

PBKDF2 también es bueno y el NIST lo ha aprobado para el hashing de contraseñas. También la implementación de .NET es compatible con FIPS. Por lo tanto, es posible que la velocidad no sea lo único que debe considerar.

Aunque probablemente no lo necesite para esta pregunta actual, para futuras referencias también puede estar interesado en el sitio crypto.SE Para comparar algoritmos, ya que realmente depende de qué hardware generará el hash. Por ejemplo, aquí hay un enlace que trata sobre scrypt .

Algunas de estas preguntas se han formulado anteriormente, por lo que es una buena idea buscarlas, vincularlas y hacer una pregunta basada en el conocimiento que falta. Entonces, nuevamente, Security.SE es un grupo de personas inteligente y acogedor, así que creo que encajarás perfectamente.

    
respondido por el random65537 21.11.2012 - 07:05
fuente
3

La siguiente respuesta es solo para la pregunta específica "¿hay alguna tabla que tenga puntos de referencia relativos independientes de la máquina de esos algoritmos, ordenados por velocidad?".

Tal tabla no puede existir ya que la velocidad relativa de los diferentes algoritmos es diferente dependiendo de la máquina utilizada. Algunos algoritmos (por ejemplo, DES) fueron diseñados para ser rápidos en hardware y lentos en software. Otros algoritmos (por ejemplo, AES) se diseñaron para acelerar el software.

Hay varios tipos de máquinas que un atacante puede usar. Las PC son las más sencillas de usar, pero generalmente ofrecen el rendimiento más bajo. Los crackers serios son mucho más propensos a usar GPUs. Las organizaciones bien financiadas, como los gobiernos, probablemente usarán granjas FPGA.

Incluso si nos centramos en los crackers que utilizan GPU (los atacantes más probables), existen diferencias entre las GPU en el rendimiento relativo de las diferentes funciones hash. Esto se debe tanto al tipo de GPU (CUDA o OpenCL) como a los diferentes tamaños de memoria (algunas funciones de hash requieren más memoria que otras). Ivan Golubev mantiene una gran tabla que compara el rendimiento de casi todas las GPU del mercado con algunas funciones hash (por ejemplo, MD5, SHA1) aunque no es bcrypt o scrypt.

    
respondido por el David Wachtfogel 21.11.2012 - 08:56
fuente
3

Respuesta corta:

  • SHA-1 está fundamentalmente dañado, nunca lo uses.
  • MD5 es débil, marginalmente más fuerte con una sal.
  • SHA-256 es OK para el almacenamiento de contraseñas, aún así use un salt.
  • Hay un lote de discutir si bcrypt o PBKDF2 es "el mejor".
    • los fanáticos de bcrypt argumentan que el PBKDF2 puede ser paralelizado y, por lo tanto, forzado por la fuerza bruta.
    • Los fanáticos de PBKDF2 argumentan que el uso de pez globo por parte de bcrypt lo "debilita" porque el pez globo no ha sido investigado por vulnerabilidad lo suficiente y no ha sido aceptado oficialmente por la organización de seguridad de X de la semana.
    • luego todo desciende en pequeñas llamadas y "chistes muy gordos ... de mamá".

La conclusión es que usar PBKDF2 o bcrypt lo pone a una milla de distancia de cualquier otra persona que no esté usando una función hash con un factor de trabajo.

    
respondido por el Sammitch 21.11.2012 - 19:21
fuente

Lea otras preguntas en las etiquetas