¿Por qué SHA-256 no es bueno para las contraseñas? [duplicar]

5

Acabo de comenzar a aprender sobre todo esto y realmente no puedo encontrar una respuesta para eso en cualquier lugar, ¿por qué no se usa SHA-256 para contraseñas? Descubrí que la razón es que el SHA-256 normal es una función rápida, y es mejor usar los más lentos, pero aquí está la parte que realmente no entiendo, por lo que he leído hasta ahora, SHA-256 produce un hash que tardaría MUCHOS años en descifrar, como MUCHO MUCHO, entonces ¿por qué se considera malo para las contraseñas cuando es básicamente imposible de descifrar?

    
pregunta Wiktor 12.10.2018 - 02:27
fuente

2 respuestas

14

Se trata de reducir el riesgo general de pérdida. Un buen algoritmo de hash hace que sea imposible invertir el valor de hash para calcular el texto original. Sin embargo, las contraseñas son muy, muy cortas. Al adivinar una contraseña, el atacante puede comparar la salida de su SHA-256 con el SHA-256 que encuentra en la base de datos. Y debido a que las contraseñas son tan cortas, es fácil para una computadora probar muchas conjeturas de contraseña de esta manera. Por unos pocos miles de dólares, puede comprar una pequeña supercomputadora dedicada a las pruebas SHA-256 (utilizada para la minería de bitcoins), que permite a un atacante probar 16 trillones contraseñas diferentes por segundo. Eso es mucho más efectivo que tratar de romper el SHA-256.

Hashing contraseñas no se trata de tratar de evitar el craqueo de una sola contraseña. Los propietarios de sitios web están mucho más preocupados porque tienen una base de datos de un millón de usuarios, y cuando los atacantes ingresan, frecuentemente roban una copia de la base de datos de contraseñas. Quieren dificultar que el atacante rompa todas las contraseñas en su base de datos.

Con el hardware dedicado (o una matriz de zombies de botnets), un atacante puede romper fácilmente la gran mayoría de las contraseñas en una base de datos típica donde solo están protegidas por una sola iteración de SHA-256. Y al romper las contraseñas en un sitio, los atacantes pueden aprovechar a las personas que reutilizan sus contraseñas en múltiples sitios. Este es un precursor de la realización de ataques de toma de control de cuenta (ATO), donde reutilizan las contraseñas robadas para acceder a cuentas bancarias o tarjetas de regalo y roban dinero real.

Para defenderse de esto, un algoritmo de protección de contraseñas especialmente diseñado se construye como una pérdida de tiempo. Por ejemplo, PBKDF2 ejecuta un algoritmo hash cientos, miles o millones de veces, según cómo lo configures. Esto aumenta la cantidad de trabajo que un atacante debe hacer para ejecutar una sola prueba por ese factor tan grande. Si configura PBKDF2 para ejecutar un millón de iteraciones, eso reduciría la efectividad del cuadro anterior para probar solo 16 millones de intentos de contraseña por segundo. Un atacante solo podría romper una millonésima parte de las contraseñas en la base de datos en comparación con descifrar una base de datos donde se almacenaron como un solo SHA-256. Esa es la reducción del riesgo.

    
respondido por el John Deters 12.10.2018 - 04:48
fuente
6

Además de la excelente respuesta de John, hay otra cosa importante a considerar.

Al verificar una contraseña, se pasa mucho tiempo en acciones como buscar la información de la cuenta almacenada (nombre de usuario, contraseña) en una base de datos.

Si tiene un algoritmo de hash rápido, esa búsqueda ahora ocupa una parte significativa de la validación de su contraseña. Esto hace que sea relativamente fácil para un intruso realizar un ataque en el que simplemente dispara nombres y contraseñas aleatorias y determina qué nombres en lugar de contraseñas no existen al sincronizar las respuestas.

Haciendo un hash lento en la contraseña entrante antes de enviarla a la base de datos para compararla con la contraseña almacenada, está tomando la duración de la búsqueda de la base de datos y la comparación de las contraseñas del tiempo necesario para verificar las contraseñas. El resultado es que una búsqueda fallida ahora toma el mismo tiempo (dentro del margen para la latencia de la red, etc.) como exitosa.

Por supuesto, esto supone que hash la contraseña entrante antes de intentar recuperar la información del usuario. Si no lo hace, un error para un usuario inexistente sería mucho más rápido que un error para un usuario existente con una contraseña incorrecta, lo que le dará a la persona que ataca su sistema información potencial sobre cuál de los intentos realizó. nombres de usuario reales, incluso si no sabía que eran nombres de usuario reales, para empezar.

¿Esto sucede en la práctica? Ni idea. Pero esa fue una de las razones de los mecanismos de hash lento que nuestro equipo de pentest nos dijo hace varios años.     

respondido por el jwenting 12.10.2018 - 08:32
fuente

Lea otras preguntas en las etiquetas