Me gustaría implementar un mecanismo de bloqueo que no solo proteja contra el mismo nombre de usuario y muchos ataques de contraseñas, sino también muchos nombres de usuario y mismos ataques de contraseñas.
Para implementar esto, pensé que necesitaba una tabla para almacenar cada contraseña ingresada que causó un intento fallido. Luego, en cada intento de inicio de sesión, verifico si hubo un intento fallido de inicio de sesión con la misma contraseña.
Todas las contraseñas que pertenecen a las cuentas de usuario están cifradas con bcrypt, tienen una sal, un alto costo y todo lo demás. Pero no puedo cifrar las contraseñas utilizadas en un intento fallido de inicio de sesión, ¿verdad? No puedo hacer una búsqueda con MySQL usando la cláusula WHERE porque cada vez que se vuelve a borrar una contraseña, el valor difiere del hash anterior, incluso si es la misma contraseña.
Para poder realizar una búsqueda con MySQL usando la cláusula WHERE, pensé que necesitaba almacenar las contraseñas en la tabla de intentos de inicio de sesión fallidos de una manera menos segura, como SHA512. Sé que algunas contraseñas ingresadas en un intento de inicio de sesión fallido podrían pertenecer a una cuenta de usuario. Entonces, ¿es seguro almacenar los hashes en este formato para poder verificar los intentos fallidos de inicio de sesión? ¿O hay una mejor manera de lograr esto?