Lasciare un server che richiede solo una password per aprire una sessione; nessun nome utente. Immaginiamo che l'utente "Alice" sia registrato, con la password "ILoveBillClinton".
Ora, un nuovo utente vuole registrarsi; chiamiamolo Bob. Per fortuna (cattiva), Bob sceglie di usare anche la password 'ILoveBillClinton'. Tali collisioni si verificano nella pratica; infatti, anche se gli utenti scelgono password con 30 bit di entropia (una cifra già ottimistica), è sufficiente che 30.000 utenti abbiano una buona possibilità di attivare una collisione di questo tipo (questo è chiamato Birthday Paradox ).
Il server di registrazione ha quindi tre modi per gestire questa situazione:
-
Il server avverte Bob della collisione. Bob impara immediatamente che c'è un altro utente con la stessa password, e poiché il server non richiede il nome utente, solo la password, Bob ottiene l'accesso immediato all'account di Alice.
-
Il server non avvisa Bob della collisione, ma ignora semplicemente la registrazione. Quando Bob si collega effettivamente, ha la sorpresa di essere accolto con uno striscione che recita "Ciao, Alice!". Bob ha ottenuto l'accesso immediato all'account di Alice.
-
Il server non avvisa Bob della collisione e sostituisce la registrazione di Alice con la registrazione di Bob. Bob ha il suo account, va bene. Ma quando Alice si connette di nuovo, digita la sua password, e viene accolta con "Ciao, Bob!". Alice ha ottenuto l'accesso immediato all'account di Bob.
Nessuno di questi metodi è soddisfacente.
La registrazione del nome utente non sarebbe necessaria se le collisioni con password non avvenissero (o si verificherebbero solo con probabilità trascurabile). Ma fintanto che le password vengono scelte dalle menti umane e archiviate in cervelli umani, le collisioni accadrà e sarà necessario un nome utente (o un ID utente o un valore discriminante simile).
Modifica: come alluso da @mikeazo, se le password non vengono scelte dall'utente , ma generate dal server di registrazione , quindi il server può imporre l'unicità ed evitare questo problema. Tuttavia, in pratica, agli utenti umani non piacciono le password generate a macchina.
Inoltre, la mancanza di nome utente impedisce salting specifico dell'utente, che è un problema per l'archiviazione delle password, purché le password siano di entropia sufficientemente bassa per essere sottoposte a scansioni esaurienti (vedere questa risposta per i dettagli su come la password deve essere sottoposta a hash, inclusa la salatura). Ciò accade anche se le password sono scelte dal server (con unicità forzata). A meno che tu non possa convincere i tuoi utenti a ricordare le password lunghe e casuali che non hanno scelto ...