En teoría, las contraseñas no deben almacenarse en texto sin formato y también se debe evitar almacenarlas como un simple hash, algo como md5(password)
.
Se recomienda almacenar la salida de la función que utiliza algoritmos / cifrados como bcrypt , script , PBKDF , pasado a la contraseña con un poco de sal.
Pero una vez que la base de datos / archivo con contraseñas se ha comprometido, por ejemplo, un archivo que contiene datos como este:
id, password
12, $2a$10$zkeaH43RM9Ep5.KPcyXWYuCaVSbKmmXaKLztvCa0G867ItEpvx4fa (bcrypt)
12, 05ffaebcca41770af425d4ba9b4e7bcdff532237dca931c192a36d94db7307d4 (scrypt)
12, JDJhJDEwJHprZWFINDNSTTlFcDUuS1BjeVhXWXVDYVZTYkttbVhhS0x6dHZDYTBHODY3SXRFcHZ4NGZh (base64 ofuscation bcrypt)
Como atacante, desde el primer vistazo, puedo ver que en el primer caso se usó bcrypt con un costo de 10, para el segundo tengo solo una longitud de 64 pulgadas donde probablemente se incluye sal, el tercero termina siendo la base64 solo ofuscando bcrypt
base64($2a$10$zkeaH43RM9Ep5.KPcyXWYuCaVSbKmmXaKLztvCa0G867ItEpvx4fa)
sólo para mencionar algunos ejemplos aleatorios.
Entonces, una vez que se haya comprometido esta información, además de seguir un procedimiento para cambiar la contraseña, etc., ¿cuál podría ser la mejor manera de almacenar las contraseñas que al menos podrían retrasar más el proceso de encontrar cómo se generó y tener más tiempo para permitir? todos los usuarios para restablecer / cambiar las contraseñas.
O preguntando de forma diferente, mientras tiene este tipo de datos, ¿qué suele hacer un atacante? y en base a esto, se podría mejorar para que sea más difícil encontrar un patrón, comenzar a descifrar las contraseñas, etc.