¿Los hashes SHA-256/512 con sal siguen siendo seguros si los hashes y sus sales están expuestos?

49

Escenario: un usuario malicioso roba una base de datos de contraseñas con hash y con sal, incluidas las sales para cada contraseña. Las contraseñas tienen una longitud de 6 a 10 caracteres y son elegidas por usuarios no técnicos.

¿Puede este usuario malintencionado descifrar estas contraseñas?

Entiendo que MD5 y SHA-1 ya no son seguros, ya que las herramientas de recuperación de contraseña asistida por GPU pueden calcular miles de millones de estos hashes por segundo por GPU.

¿Qué pasa con SHA-256 o SHA-512? ¿Están seguros actualmente? ¿Y en unos años?

    
pregunta Seppo Erviälä 21.06.2011 - 15:03
fuente

4 respuestas

60

La pregunta no indica cuántas rondas de hash se realizan. Y toda la respuesta depende de ese punto.

Todas las funciones de hash no son seguras si solo usas una iteración. La función hash, ya sea SHA-1 o una de la familia SHA-2, debe repetirse miles de veces. Consideraría 10.000 iteraciones como mínimo, y 100.000 iteraciones no son irrazonables, dado el bajo costo de un hardware potente.

Las contraseñas cortas también son inseguras. El mínimo de 8 caracteres debe ser, incluso para objetivos de bajo valor (porque los usuarios reutilizan la misma contraseña para múltiples aplicaciones).

Con una tarjeta gráfica de $ 150, puede realizar 680 millones de cálculos de hash SHA-1 por segundo. Si utiliza solo una ronda de hashing, todas las contraseñas de 6 caracteres se pueden probar en un poco más de 15 minutos (esto supone que se utilizan los 94 caracteres ASCII imprimibles). Cada carácter adicional multiplica el tiempo por 94, por lo que 7 caracteres requieren un día, 8 caracteres requieren 103 días en esta configuración. Recuerde, este escenario es un niño de 14 años que usa su GPU, no un criminal organizado con dinero real.

Ahora considere el efecto de realizar múltiples iteraciones. Si se realizan 1,000 iteraciones de hashing, el espacio de la contraseña de 6 caracteres toma casi 12 días en lugar de 15 minutos. Un espacio de 7 caracteres lleva 3 años. Si se usan 20,000 iteraciones, esos números aumentan a 8 meses y 60 años, respectivamente. En este punto, incluso las contraseñas cortas no se pueden buscar exhaustivamente; el atacante tiene que recurrir a un diccionario de contraseñas "más probables".

    
respondido por el erickson 21.06.2011 - 17:58
fuente
16

La sal puede considerarse pública prácticamente por definición .

En cuanto a qué hash usar y cuán "seguro" es, me atendría a las recomendaciones que hace el NIST para las agencias gubernamentales de EE. UU. Como el artículo de Wikipedia dice:

  

SHA-1 se está retirando para la mayoría de los usos gubernamentales; el Instituto Nacional de Estándares y Tecnología de EE. UU. dice: "Las agencias federales deberían dejar de usar SHA-1 para ... aplicaciones que requieren resistencia a las colisiones tan pronto como sea posible, y deben usar la familia de hachís SHA-2 Funciones para estas aplicaciones después de 2010 "

Puede especular sobre qué tan seguros o inseguros son los diversos algoritmos, pero ¿por qué molestarse cuando tiene una especificación que el gobierno de los Estados Unidos considera lo suficientemente bueno para su propio uso?

[editar]

Por cierto, su pregunta parece reflejar un malentendido sobre cómo se realizan estos análisis. Hay mucho más para una función hash que su número de bits.

Un hash de 160 bits forzado por la fuerza bruta como SHA-1 requiere 2 ^ 160 de esfuerzo; eso simplemente no va a suceder, no importa cuántas "GPU" le lances. De hecho, probablemente no sucederá en la vida del universo. (Es cierto que una colisión de fuerza bruta requiere "solo" esfuerzo 2 ^ 80. Pero también requiere 2 ^ 80 almacenamiento . Buena suerte con eso.)

La razón por la que MD5 y SHA-1 se consideran "posiblemente inseguras" es que se han descubierto puntos débiles en cada algoritmo que podrían reducir el trabajo, muy por debajo del esfuerzo de fuerza bruta. La razón para cambiar a un algoritmo más nuevo (como SHA-2) es evitar aquellas debilidades conocidas; La razón para usar 256 bits es proporcionar algún búfer contra las debilidades desconocidas . No tiene nada que ver con las "GPU"; para resistir los ataques de fuerza bruta, 160 bits es suficiente.

Las declaraciones similares son válidas para toda la criptografía, por cierto.

Ahora, es imposible exagerar cuánto más saben las personas de NSA sobre estas cosas que usted o yo. Hacen recomendaciones para las agencias gubernamentales de EE. UU. Y la industria de EE. UU. A través del NIST. Entonces, a menos que su adversario sea un gobierno mundial importante, las recomendaciones del NIST son más que suficientes. Ignore a los "expertos" autoproclamados que intentan decirle lo contrario; La NSA es mejor en lo que hace de lo que posiblemente puedas imaginar.

Si su adversario es un gobierno mundial importante, nadie en SO está calificado para ayudarlo. Y tienes problemas mucho mayores que la función hash que debes usar.

[editar 2]

Por supuesto, asumo que ya está utilizando esta función como parte de un esquema de hashing de contraseña estándar, como PKCS # 5 (también conocido como "PBKDF2"), y su pregunta fue puramente sobre qué función hash utilizar.

PBKDF2 recomienda un mínimo de 1000 iteraciones, pero puedes elegir lo que quieras. El esfuerzo de fuerza bruta del atacante aumenta linealmente con ese número, por lo que 10000 iteraciones frente a 1000 significa que les llevará 10 veces más tiempo forzar la fuerza bruta de cada contraseña.

    
respondido por el Nemo 21.06.2011 - 17:34
fuente
1
  

Si el atacante conoce la sal, puede calcular una nueva tabla de arco iris basada en el valor de la sal.

Depende del algoritmo utilizado. De acuerdo con Coda Hale , MD5 y la familia de algoritmos de hash SHA son propósitos generales y están destinados a velocidad. En resumen, llega a la conclusión de que estos no son suficientes para prevenir los ataques de diccionario y que Bcrypt es el camino a seguir, ya que hay más tiempo de configuración involucrado en descifrar contraseñas, lo que ralentiza drásticamente a un atacante. Aquí hay otro artículo interesante en bcrypt .

  

¿Qué pasa con SHA-256 o SHA-512? ¿Están seguros actualmente? ¿Y en unos años?

Tenga cuidado, hay dos lados en este argumento. Hay el lado bcrypt y el SHA-256 y parte superior. Si crees en el lado de la familia SHA, entonces creo que estarás a salvo durante más de unos pocos años con SHA-256, incluso algunos argumentan que el SHA-1 con sal es lo suficientemente bueno, pero si quieres serlo. salvo entonces me quedaría con SHA-256. Existe un foro que también menciona que el MD5 todavía tiene 5-10 años para demostrarse que es "lo suficientemente poco confiable". Lamentablemente, no puedo publicar los enlaces porque ya he alcanzado mi máximo de dos.

Personalmente, estoy usando SHA-256 con una sal, pero definitivamente tendré que leer más en bcrypt y reevaluar. Con suerte, esto ayuda. Este es un tipo de pregunta en el que puede pasar muchas horas investigando, pero sin embargo es interesante.

    
respondido por el SantosLHalper 21.06.2011 - 17:24
fuente
-1

El propósito de la sal es proteger de los ataques usando la tabla de ranbow. Si el atacante conoce la sal, puede calcular una nueva tabla de arco iris según el valor de la sal.

Entonces la respuesta corta sería sí. El robo de sal permitirá que el atacante pueda usar el ataque de la tabla del arco iris contra estas credenciales (aunque el atacante primero debe construir una tabla única del arco iris).

La respuesta larga dependerá de la complejidad de estas contraseñas. Si el usuario utiliza una contraseña simple ( stackoverflow ), el robo de sal tendrá un mayor impacto en la contraseña. Si el usuario utiliza una contraseña compleja ( $ TACK0verflow ), la sal que se roba tendrá un impacto mucho menor (ya que es poco probable que aparezca en cualquier tabla de arco iris).

    
respondido por el Jim 21.06.2011 - 15:58
fuente

Lea otras preguntas en las etiquetas