Los hashes de contraseña deben ejecutarse md5 miles de veces: ¿en serio?

7

Hojeé por Cómo pueden las empresas reforzar la seguridad de las contraseñas y pensé que varias afirmaciones eran completamente erróneas, en particular:

  1. El hash criptográfico (como md5) con sal es malo.
  2. No es infrecuente romper / romper archivos de sombra de Unix.
  3. Para hacer un hash de contraseña, debería ejecutarlo en md5 o lo que sea cientos o miles de veces.

El artículo sugiere que los hash con sal son demasiado fáciles de romper y que querrías seleccionar un hash de contraseña porque es computacionalmente más largo para verificar las contraseñas, por lo que no puedes hacer tantas por segundo.

Creo que hacer 3 es malo para la seguridad y 1 es en realidad la mejor opción. ¿Qué piensan ustedes?

    
pregunta Hendrik Brummermann 17.06.2012 - 02:38
fuente

4 respuestas

14
  

El hash criptográfico (como md5) con sal es malo.

Ya no es suficiente. Las funciones hash criptográficas tradicionales están diseñadas para documentos y, por lo tanto, están optimizadas para velocidad.

Pero la velocidad es exactamente lo que no queremos para los hashes de contraseña. Las tarjetas gráficas modernas pueden hacer 2.000.000.000 hash SHA1 o MD5 por segundo. Por lo tanto, forzar una contraseña de 6 caracteres en bruto requiere menos de 10 minutos.

  

No es infrecuente romper / romper archivos de sombra de Unix.

Eso es cierto para los antiguos hashes usados en ellos.

  

Para hacer un hash de contraseña, debería ejecutarlo en md5 o lo que sea cientos o miles de veces.

Si bien esta es una mejora sobre el uso de funciones de hash rápidas, no es suficiente.

Debes usar uno de los algoritmos de cifrado hash (excepto md5crypt ): sha256crypt , sha512crypt , bcrypt o scrypt . Esos son algoritmos diseñados para ser relativamente lentos y no fáciles de implementar en tarjetas gráficas para obtener un aumento de rendimiento.

Esos algoritmos hacen más que solo usar la salida de una ronda como entrada para la próxima ronda. Las reglas de qué usar como entrada varían según el contador de iteraciones (consulte las especificaciones vinculadas). Moderno sistema operativo unix utiliza sha512crypt.

scrypt va un paso más allá que los otros algoritmos porque además del uso escalable de la CPU, scrypt utiliza mucha memoria. La idea es hacer que las implementaciones de hardware de las contraseñas sean mucho más caras. Dicho hardware generalmente tiene acceso a hasta 1 KB de memoria rápida, pero los parámetros predeterminados de scrypt requieren 16 MB.

    
respondido por el Hendrik Brummermann 17.06.2012 - 19:42
fuente
5
  

El hash criptográfico (como md5) con sal es malo.

No leí el artículo, pero se podría leer de una de estas dos formas:

  1. MD5, incluso cuando está salado es malo.
  2. Los hashes salados son malos.

En respuesta al primero, sí, esto es cierto. MD5 ha demostrado ser inseguro y, de todos modos, es demasiado rápido para ser una función de hash segura. No uses MD5.

En cuanto al segundo, está completamente equivocado. Siempre sal tu hash. Esto ayuda a prevenir los tabla de arco iris .

  

No es infrecuente romper / romper archivos de sombra de Unix.

Esto es cierto, la mayoría de las personas eligen contraseñas inseguras que son bastante fáciles de romper. Fin de la historia. La herramienta de seguridad clásica para hacer esto es John the Ripper . Incluso los archivos ocultos que utilizan hashes modernos a menudo usan algoritmos que son demasiado rápidos para brindar mucha protección (ver más abajo).

  

Para hacer un hash de contraseña, debería ejecutarlo en md5 o lo que sea cientos o miles de veces.

Esto solía ser cierto. La razón para hacer esto es hacerlo mucho más lento por cada intento de contraseña (ya que tienes que ejecutar mucho el algoritmo de hash). Incluso con un hash moderno como SHA2, a menudo es tan rápido que el uso de una contraseña mal escogida puede llevar una cuestión de días, o incluso de horas.

Los algoritmos de digestión modernos tienen esto en cuenta y están diseñados para ser computacionales o intensivos en memoria. Los ejemplos comunes incluyen bcrypt que incluye una sal y está diseñado para ser computacionalmente costoso. Un algoritmo más nuevo, scrypt, ha estado recibiendo un poco de atención recientemente por su uso intensivo de memoria (lo que dificulta mucho más el agrietamiento de la GPU).

    
respondido por el Sam Whited 18.06.2012 - 01:20
fuente
4

¿Por qué crees que 3 es malo para la seguridad? Realmente, lo que deberías estar haciendo es usar algo como bcrypt para codificar tus contraseñas para evitar todo este lío.

Bcrypt combina esas propiedades. Vuelve a utilizar la contraseña utilizando un salt varias veces para crear una función hash lenta y segura que produce hashes criptográficamente seguros.

    
respondido por el Oleksi 17.06.2012 - 03:45
fuente
3

1 es un deber. Las sales son muy importantes para garantizar que las contraseñas no se puedan descifrar fácilmente simplemente comparándolas con una tabla de arco iris.

¿Por qué consideras 3 malos? Es una técnica conocida como estiramiento de la tecla . Y aumenta considerablemente el tiempo y la potencia de cómputo necesarios para descifrar contraseñas.

En cuanto a 2, diría que no es raro descifrar las contraseñas comunes / malas almacenadas en el archivo de la sombra. Las buenas contraseñas (altamente aleatorias, alfanuméricas, etc.) deberían ser relativamente seguras.

    
respondido por el Ayrx 17.06.2012 - 05:06
fuente

Lea otras preguntas en las etiquetas