Tuve la idea de ocultar permanentemente la contraseña del usuario al exigir una longitud mínima y luego eliminar ciertos caracteres. Por ejemplo, si la contraseña de usuario es secret123
, el sistema la reducirá a ecrt12
, le agregará caracteres aleatorios como ecrt12!@#$%^&*
antes de realizar hashing, agregar sal, etc. y luego se almacenará en la base de datos.
La concesión de todas las prácticas comunes también se usó como:
- sal única por usuario
- sistema de pimienta
- bcrypt / scrypt o lo que sea lo último, el mejor crypto algo disponible
Para resumir en código:
$hash = hash($modifiedpassword.$uniquesalt.$systempepper)
// iterado a 1000s.
En el caso de que un atacante logre revertir todos los hashes, la mejor información que podrían recuperar es ecrt12!@#$%^&*
y no el secret123
original. Incluso si piratean el código del sistema, nunca sabrán qué caracteres fueron eliminados.
Mi pregunta ahora es como expertos en seguridad, ¿recomendaría esta práctica de eliminar / agregar la contraseña de usuario original?