Como señaló Johannes Gorset, la publicación de Thomas Ptacek de Matasano Security explica por qué las funciones simples de hash de propósito general como MD5, SHA1, SHA256 y SHA512 son malas opciones de hashing de contraseñas .
¿Por qué? Son demasiado rápidos: puede calcular al menos 1,000,000 hashes MD5 por segundo por núcleo con una computadora moderna, por lo que la fuerza bruta es factible contra la mayoría de las contraseñas que usan las personas. ¡Y eso es mucho menos que un clúster de servidores de craqueo basado en GPU!
Salar sin estirar la tecla solo significa que no puede calcular previamente la tabla del arco iris, debe construirla ad hoc para esa sal específica. Pero realmente no hará las cosas mucho más difíciles.
El usuario @ Will dice:
Todo el mundo habla de esto como si pudieran ser pirateados a través de Internet. Como ya se dijo, limitar los intentos hace que sea imposible descifrar una contraseña en Internet y no tiene nada que ver con el hash.
No necesitan hacerlo. Aparentemente, en el caso de LinkedIn , utilizaron la vulnerabilidad de inyección SQL común para obtener la tabla de base de datos de inicio de sesión y descifraron millones de contraseñas sin conexión.
Luego vuelve al escenario de ataque fuera de línea:
La seguridad realmente entra en juego cuando toda la base de datos se ve comprometida y un hacker puede realizar 100 millones de intentos de contraseña por segundo contra el hash md5. SHA512 es aproximadamente 10,000 veces más lento.
No, SHA512 no es 10000 veces más lento que MD5, solo toma aproximadamente el doble. Crypt / SHA512 , por otro lado, es una bestia muy diferente que, como su contraparte BCrypt, realiza estiramientos clave , produciendo un hash muy diferente con una sal aleatoria incorporada y tomará cualquier cosa entre 500 y 999999 veces más para calcular (estiramiento es sintonizable).
SHA512 => aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Crypt/SHA512 => $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
Entonces, la opción para PHP es Crypt / Blowfish (BCrypt), Crypt / SHA256 o Crypt / SHA512. O al menos Crypt / MD5 (PHK). Ver www.php.net/manual/en/function.crypt.php