Esta es la contestación más acertada que te podemos aportar, pero estúdiala pausadamente y valora si se puede adaptar a tu trabajo.
Solución:
Si está eligiendo un método de cifrado para su sistema de inicio de sesión, entonces la velocidad no es su amigo, Jeff tuvo una conversación con Thomas Ptacek sobre las contraseñas y la conclusión fue que debe utilizar el método de cifrado más lento y seguro que pueda permitirse .
Del blog de Thomas Ptacek:
La velocidad es exactamente lo que no desea en una función de hash de contraseña.Los esquemas de contraseñas modernos son atacados con crackers de contraseñas incrementales.
Los crackers incrementales no calculan previamente todas las posibles contraseñas descifradas. Consideran cada hash de contraseña individualmente y alimentan su diccionario a través de la función de hash de contraseña de la misma manera que lo haría su página de inicio de sesión de PHP. Los crackers de mesa arcoíris como Ophcrack usan el espacio para atacar contraseñas; Los crackers incrementales como John the Ripper, Crack y LC5 funcionan con el tiempo: estadísticas y cálculo.
El juego de ataque de contraseña se puntúa en el tiempo necesario para descifrar la contraseña X. Con las tablas de arco iris, ese tiempo depende de qué tan grande debe ser su mesa y qué tan rápido puede buscarla. Con los crackers incrementales, el tiempo depende de qué tan rápido pueda ejecutar la función hash de contraseña.
Cuanto mejor pueda optimizar la función hash de su contraseña, cuanto más rápida sea la función hash de su contraseña, más débil será su esquema. MD5 y SHA1, incluso los cifrados de bloques convencionales como DES, están diseñados para ser rápidos. MD5, SHA1 y DES son hash de contraseña débiles. En las CPU modernas, los bloques de construcción criptográficos sin procesar como DES y MD5 se pueden cortar en bits, vectorizar y paralelizar para hacer búsquedas de contraseñas ultrarrápidas. Las implementaciones de FPGA Game-over cuestan solo cientos de dólares.
Estoy con Peter. El desarrollador no parece entender las contraseñas. Todos elegimos (y yo también soy culpable de esto) MD5 o SHA1 porque son rápidos. Pensar en eso (porque alguien me lo señaló recientemente) no tiene ningún sentido. Deberíamos elegir un algoritmo de hash que sea estúpidamente lento. Quiero decir, en la escala de las cosas, un sitio ocupado hará hash de las contraseñas, ¿qué? cada 1/2 minuto? ¿A quién le importa si el servidor tarda 0,8 segundos frente a 0,03 segundos? Pero esa lentitud adicional es enorme para prevenir todo tipo de ataques comunes de fuerza bruta.
Según mi lectura, bcrypt está diseñado específicamente para el cifrado seguro de contraseñas. Está basado en pez globo y hay muchas implementaciones.
Para PHP, consulte PHP Pass
Para cualquiera que esté haciendo .NET, consulte BCrypt.NET
Cabe señalar que no desea cifrar la contraseña, quieres picadillo eso.
Las contraseñas cifradas se pueden descifrar, permitiendo que alguien vea la contraseña. El hash es una operación unidireccional, por lo que la contraseña original del usuario desaparece (criptográficamente).
En cuanto a qué algoritmo debe elegir, use el estándar actualmente aceptado:
- SHA-256
Y cuando aprietes la contraseña del usuario, asegúrate de incluir también otros archivos basura con ella. p.ej:
- contraseña:
password1
- sal:
PasswordSaltDesignedForThisQuestion
Agregue la sal a la contraseña del usuario:
String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");
Valoraciones y comentarios
Eres capaz de añadir valor a nuestra información aportando tu experiencia en las interpretaciones.