La respuesta a esta pregunta depende de dos factores:
- el vector de ataque
- la implementación de permitir contraseñas diferentes
Los sitios web deben almacenar contraseñas que no estén en texto sin formato o en cualquier otra forma que permita obtener la contraseña del valor guardado. Por lo tanto, generalmente se utiliza una función hash irreversible, de modo que solo se comparan los hashes de las contraseñas.
Ahora hay principalmente dos métodos para permitir contraseñas similares:
1) (El malo, no debe usarse, solo para completar) Uno podría almacenar muchos hashes diferentes de la contraseña del usuario en la base de datos. Ejemplo: el usuario ingresa 'abc123' como contraseña, y se guardan los hashes de
abc123
Abc123
ABc123
abc!"§
y así sucesivamente. Ahora, al iniciar sesión, hash la contraseña dada y mira si coincide con alguna contraseña del usuario.
2) Solo se guarda el hash de la contraseña real, y en el momento del inicio de sesión, la contraseña dada se altera (si la original no coincide) y las sales resultantes se comparan con la de la base de datos.
Ahora a diferentes vectores de ataque :
Si alguien obtiene la base de datos descrita en el método 1, la seguridad es un poco más débil de lo normal, porque hay muchos hashes diferentes para el usuario y las posibilidades son más altas que una. Con la base de datos del método 2, solo hay un hash, y se debe encontrar la ortografía exacta.
Hablando en términos generales, tienes más entropía en el espacio de tu personaje con el segundo método, porque haces una diferencia entre las letras mayúsculas y minúsculas.
Para un atacante que posee la base de datos (siempre que se realice de manera razonable), no existe un déficit de seguridad con este enfoque.
Pero en el caso de un ataque de fuerza bruta en el sitio web, siempre existe una mayor posibilidad de que el atacante inicie sesión con éxito en la cuenta del usuario. Por lo tanto, se deben tomar medidas adicionales para evitar este tipo de ataque.