¿Cuál es la ventaja de usar PBKDF2 vs SHA256 para generar una clave de cifrado AES a partir de una frase de contraseña?

58

Estoy viendo dos piezas de software comparables que cifran datos en el disco usando una frase de contraseña. Uno usa PBKDF2 para generar la clave de cifrado a partir de una frase de contraseña, mientras que el otro usa dos rondas de SHA256. ¿Cual es la diferencia? ¿Una es preferida sobre la otra?

    
pregunta Andrey Fedorov 22.06.2012 - 02:59
fuente

3 respuestas

67

La diferencia es que:

  • PBKDF2 por diseño es lento
  • SHA256 es una buena función hash; no es lento, por diseño

Entonces, si alguien probara diferentes frases de contraseña posibles, diga todo el diccionario, luego cada palabra con un dígito se agregue, luego cada palabra con una mayúscula diferente, luego dos palabras del diccionario, etc., entonces este proceso sería mucho más lento con PBKDF2.

Pero si tu frase de contraseña es realmente segura, eso es muy largo, bastante aleatorio y está fuera del alcance de cualquier proceso de enumeración sistemática, entonces no hay ninguna diferencia práctica, excepto que un atacante puede gastar más recursos tratando de romper tu frase de contraseña (o tal vez menos si deciden rendirse antes).

    
respondido por el curiousguy 22.06.2012 - 04:07
fuente
42

Los algoritmos de hash de contraseñas, como PBKDF2, bcrypt y scrypt, están diseñados para usar con contraseñas y son deliberadamente lentos. Los algoritmos criptográficos de hash son rápidos. Rápido es bueno en la mayoría de las situaciones, pero no aquí. Disminuir la velocidad del algoritmo (generalmente por iteración) hace que el trabajo del atacante sea mucho más difícil. Los hashes de contraseña también agregan un valor de sal a cada hash para que sea único, de modo que un atacante no pueda atacar varios hashes al mismo tiempo.

Los atacantes intentarán recuperar las contraseñas realizando ataques de diccionario y de fuerza bruta en los que adivinen contraseñas y las comparen con la contraseña almacenada para determinar si coinciden. Con funciones hash criptográficas regulares (por ejemplo, MD5, SHA256), un atacante puede adivinar miles de millones de contraseñas por segundo. Con PBKDF2, bcrypt o scrypt, el atacante solo puede hacer unos pocos miles de intentos por segundo (o menos, según la configuración).

Esto significa que cada contraseña es mucho más segura si se utilizan PBKDF2, bcrypt o scrypt en lugar de una función hash normal.

Además, PBKDF2, bcrypt y scrypt utilizan valores de "sal" aleatorios de gran tamaño para asegurarse de que la contraseña de cada usuario esté con un hash único. Atacar 100 hashes de contraseña llevará 100 veces más que atacar un hash. Atacar a un millón tomará un millón de veces más, etc. Con SHA256, el atacante puede intentar romper miles o millones de hashes al mismo tiempo con muy poca ralentización.

Siempre debe usar un hash de contraseña o "fórmula de derivación de clave" para las contraseñas en lugar de un hash criptográfico ordinario. Es muy difícil seleccionar contraseñas que sean lo suficientemente fuertes como para soportar un esfuerzo de descifrado dedicado si se las utiliza con algo como SHA o MD5. Con PBKDF2, bcrypt o scrypt, las contraseñas pueden tener tan solo 7 u 8 caracteres, pero con MD5 o SHA, deben tener al menos 13-14 caracteres.

    
respondido por el Steven Alexander 23.06.2012 - 06:57
fuente
9

Las respuestas anteriores son buenas, pero la razón inmediata es que sha256 no tiene sal y dos rondas son lamentablemente débiles de la misma manera que las contraseñas de 4 dígitos son débiles, computacionalmente:

  • Una configuración moderna de GPU puede calcular fácilmente todos los hash sha256 de 4 dígitos sin sal (en milisegundos)
respondido por el rox0r 27.06.2012 - 21:52
fuente

Lea otras preguntas en las etiquetas