Deje un servidor que solo requiere una contraseña para abrir una sesión; sin nombre de usuario Imaginemos que el usuario 'Alice' se ha registrado, con la contraseña 'ILoveBillClinton'.
Ahora, un nuevo usuario quiere registrarse; llamémosle Bob Fuera de (mala) suerte, Bob elige usar la contraseña 'ILoveBillClinton' también. Tales colisiones suceden en la práctica; de hecho, incluso si los usuarios eligen contraseñas con 30 bits de entropía (una figura que ya es optimista), basta con tener alrededor de 30 mil usuarios para tener una buena probabilidad de desencadenar tal colisión (esto se llama Paradoja de cumpleaños ).
El servidor de registro tiene tres formas de manejar esta situación:
-
El servidor advierte a Bob sobre la colisión. Luego, Bob se entera inmediatamente de que hay otro usuario con la misma contraseña y, como el servidor no requiere el nombre de usuario, solo la contraseña, Bob obtiene acceso inmediato a la cuenta de Alice.
-
El servidor no advierte a Bob sobre la colisión, sino que simplemente ignora el registro. Cuando Bob realmente se conecta, tiene la sorpresa de ser recibido con una pancarta que dice "¡Hola, Alice!". Bob ha obtenido acceso inmediato a la cuenta de Alice.
-
El servidor no advierte a Bob sobre la colisión, y reemplaza el registro de Alice con el registro de Bob. Bob tiene su propia cuenta, está bien. Pero cuando Alice vuelve a iniciar sesión, escribe su contraseña y se la saluda con "¡Hola, Bob!". Alice ha obtenido acceso inmediato a la cuenta de Bob.
Ninguno de estos métodos es satisfactorio.
La entrada del nombre de usuario no sería necesaria si las colisiones de contraseñas no ocurrieran (o ocurrirían solo con una probabilidad insignificante). Pero mientras las contraseñas sean elegidas por mentes humanas y almacenadas en cerebros humanos, ocurrirán colisiones y se necesitará un nombre de usuario (o ID de usuario o cualquier otro valor discriminante similar).
Editar: como @mikeazo alude a, si el usuario no elige las contraseñas, sino que las genera el servidor de registro , entonces el servidor puede imponer la singularidad y evitar este problema. Sin embargo, en la práctica, a los usuarios humanos no les gustan las contraseñas generadas por máquinas.
Además, la falta de un nombre de usuario impide que el salating específico del usuario, que es un problema para el almacenamiento de contraseñas, siempre que las contraseñas tengan una entropía lo suficientemente baja como para ser escaneadas exhaustivamente (consulte esta respuesta para obtener detalles sobre cómo se debe introducir una contraseña, incluida la sal). Esto sucede incluso si las contraseñas son elegidas por el servidor (con unicidad forzada). A menos que pueda convencer a sus usuarios de que recuerden las contraseñas largas y aleatorias que no eligieron ...