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