¿El uso de 100,000 iteraciones de sha256 es lo suficientemente bueno para el almacenamiento de contraseñas? [duplicar]

2

¿Estoy creando una aplicación web y me preguntaba si sería seguro usar 100,000 iteraciones de sha256 para almacenar contraseñas? Sé que hay algoritmos como scrypt y bcrypt, sin embargo, me preguntaba si sería posible usar 100,000 iteraciones de sha256 para el almacenamiento de contraseñas.

Soy un novato completo, y la ayuda sería muy apreciada.

    
pregunta Matt 10.02.2018 - 21:37
fuente

4 respuestas

4

Para responder el título: no.

La premisa de su pregunta es incorrecta en primer lugar. Las repeticiones repetidas de SHA256 no son un algoritmo adecuado para el almacenamiento de contraseñas.

Debería usar Argon2 si su idioma tiene un enlace disponible. Si está utilizando PHP, puede usar la función incorporada password_hash con el PASSWORD_ARGON2I bandera. Para las aplicaciones .NET hay una implementación totalmente administrada disponible . Hay un enlace disponible para Java también. Hay un artículo fantástico de Paragon sobre almacenar contraseñas de forma segura , que tiene un ejemplo código para un montón de idiomas.

Si no puede usar Argon2 en absoluto, aunque no veo ninguna razón por la que no pueda (¡hay enlaces para casi todos los idiomas ahora!), entonces debería usar scrypt, bcrypt o PBKDF2-SHA256, en ese orden de preferencia . Una vez más, casi todos los idiomas tienen enlaces o bibliotecas para estos.

    
respondido por el Polynomial 11.02.2018 - 02:18
fuente
3

Dividamos la pregunta en dos elementos:

1) ¿El uso de 100.000 iteraciones es lo suficientemente bueno para el almacenamiento de contraseñas?

Depende! Siempre debe usar un factor de trabajo / recuento de iteración tan alto como su sistema pueda manejar con respuestas razonables, entendiendo que su lado será de un solo hilo (hashing la contraseña proporcionada), mientras que el atacante será paralelo (probará muchas contraseñas posibles simultáneamente) ).

Por lo tanto, determine cuánto tiempo puede gastar en cada hash; Si sus reglas son que el hash no puede durar más de 1/10 de segundo, y espera 16 inicios de sesión por segundo en un cuadro de 8 núcleos, entonces el factor de trabajo / cuenta de iteración de hash debería tomar 1/20 de segundo.

2) ¿El uso de SHA-256 es lo suficientemente bueno para el almacenamiento de contraseñas?

Por sí mismo, no. Como parte de una construcción que incluye una sal, sí, absolutamente. La construcción que está buscando que usa SHA-256 es PBKDF2-HMAC-SHA-256, que usa iteraciones de HMAC-SHA-256, que es simplemente HASH (Key XOR opad, HASH (Key XOR ipad, texto)) donde ipad y opad son valores fijos (dimensionados para SHA-256).

PBKDF2 (RFC2898) los repite como tales:

           U_1 = PRF (P, S || INT (i)) ,
           U_2 = PRF (P, U_1) ,
           ...
           U_c = PRF (P, U_{c-1}) .

Es importante tener en cuenta que el constructo HMAC es el PRF.

Respuesta: Sí, si usa PBKDF2-HMAC-SHA-256 con 100,000 iteraciones Y no puede encajar más en el tiempo disponible

Puede encontrar una variedad de implementaciones de PBKDF2 en mi repositorio Github , incluida una variedad de idiomas y Las implementaciones de scratch, así como OpenSSL y PolarSSL y otras implementaciones basadas en bibliotecas, incluidos los vectores de prueba.

Compare la velocidad de lo que escriba y de lo que tenga disponible. Para el hashing de contraseña seguro, debe usar su implementación más rápida

    
respondido por el Anti-weakpasswords 11.02.2018 - 18:41
fuente
1

¿Qué algoritmo?

Consulte: ¿Cómo hash seguro las contraseñas?

¿Cuántas iteraciones?

Consulte: Parámetros para PBKDF2 para hashing de contraseña

    
respondido por el Luc 11.02.2018 - 19:11
fuente
-5

Podrías hacer eso, pero honestamente, ¿cuál es la ganancia? Gastarás muchos recursos valiosos para hacer eso, en cualquier tipo de implementación que se me ocurra. Además, después de unas mil iteraciones, realmente no obtendrá mucho en términos de seguridad. Si desea usar sha, haga una buena implementación con un único sal para cada usuario y quizás haga hash nuevamente dos o tres veces si eso lo hace sentir más seguro. Pero no hay necesidad de más iteraciones. Después de eso, puede utilizar un mejor algoritmo o mejorar más aspectos de sus implementaciones de seguridad.

    
respondido por el Chris Tsiakoulas 10.02.2018 - 22:29
fuente

Lea otras preguntas en las etiquetas