Solución:
Por lo que entiendo, Bcrypt es más seguro. Está hecho para ser más lento, esto hace que sea más difícil para un atacante forzar una contraseña. Se puede configurar para iterar cada vez más, lo cual es útil ya que las CPU son cada vez más potentes.
Ese es el punto de tener lentitud configurable: puede hacer que la función sea tan lenta como desee. O, más exactamente, tan lento como puedas tolerar: de hecho, una función lenta es lenta para todos, atacante y defensor por igual.
Estos enlaces pueden ser de alguna ayuda:
https://security.stackexchange.com/questions/61385/the-brute-force-resistence-of-bcrypt-versus-md5-for-password-hashing
https://www.bentasker.co.uk/blog/security/201-why-you-should-be-asking-how-your-passwords-are-stored
¿Cuál es la diferencia entre bcrypt y hash varias veces?
https://www.quora.com/What-is-the-difference-between-bcrypt-and-general-hashing-functions-like-MD5
https://security.stackexchange.com/questions/4781/do-any-security-experts-recommend-bcrypt-for-password-storage/6415#6415
¿Pero esto no requiere que mi hash ya esté presente con el atacante para compararlo? Y si él / ella no tiene el hash en primer lugar, ¿cómo afecta el algoritmo de hash que utilizo a la seguridad de mi sitio? ¿Y eventualmente termina teniendo que usar la fuerza bruta en mi página de inicio de sesión de todos modos?
Primero, no. Muchos sitios permiten intentos de inicio de sesión sin límite de velocidad. Con MD5, asumiendo que los servidores pueden manejarlo, un usuario podría intentar rápidamente contraseñas de fuerza bruta simplemente probando muchas contraseñas en rápida sucesión. La lentitud de bcrypt garantiza que tal intento será mucho más lento.
En segundo lugar, un concepto de seguridad clave en la informática es la defensa en profundidad. No desea solo un nivel de seguridad: es bastante fácil escribir accidentalmente una vulnerabilidad de inyección SQL que podría permitir que un atacante descargue hash de contraseña. Al usar bcrypt, límite los daño tal vulnerabilidad puede causar.