Si entraran al sistema y descargaran el archivo de contraseñas con hash, podrían, con dificultad, encontrar contraseñas que funcionen.
Aunque nadie ha podido convertir la salida del hash MD5 en el texto original. La mala noticia es que el MD5 no requiere mucho tiempo de CPU.
"Espera, ¿son malas noticias?" En realidad, lo es. Al calcular valores hash, desea tomar más tiempo de CPU, en lugar de menos. Cuanto más rápido los malos puedan probar millones y miles de millones de contraseñas, más rápido podrán llegar a la que intenta mantener en secreto.
Hice una prueba de cinco millones de contraseñas de nueve caracteres y obtuve los siguientes resultados en mi máquina (usando openssl, resultados en milisegundos):
- MD5: 2449
- SHA1: 2620
- SHA256: 3884
Si desean probar aproximadamente 5 mil millones de contraseñas, que cubrirían casi todas las contraseñas de seis caracteres posibles, el tiempo de CPU oscilaría entre aproximadamente 28 días para MD5 a 44 días para SHA256. Esto es con un solo hilo en una computadora no muy rápida. Si invirtieron unos pocos cientos de dólares en media docena de tarjetas gráficas, esto podría hacerse en horas.
Es común que el proceso de hash calcule el hash varias veces. Calcularíamos el hash de la contraseña "abc123" y obtendríamos "8be8efb0bfa ...". Si calculamos el hash del hash, obtendremos "98dead38ed2 ...". Puede ver que si hacemos esto diez o cien veces, apenas notaremos la diferencia en el tiempo, pero los malos tendrán que tomar no horas, sino días o meses.
No lo olvides, solo necesitas encontrar una cadena que contenga el valor almacenado en la tabla de contraseñas, no necesariamente el valor original. Cualquier colisión servirá. Hay formas de atacar el hash para encontrar colisiones que pueden ser más simples que este ataque de fuerza bruta. Por lo que vale, dudo que haya muchos pares de cadenas de caracteres imprimibles que tienen el mismo valor.
No estoy seguro de que esto responda exactamente a tu pregunta, pero parece relevante.