Valuta il mio schema di autenticazione? (Questo sembra abbastanza semplice da essere un duplicato, ma è veramente difficile da cercare per questo tipo di domande. Scusa se è un duplicato.)
Quando viene impostata una password, viene immediatamente sottoposta a hash con una salt salt S1
e memorizzata come H1
.
Quando un utente prova ad autenticare, viene inviato S1
e un valore casuale S2
. Poi hanno cancellato la loro password con S1
per ottenere H1
, poi ha cancellato quello con S2
per ottenere H2
. H2
viene quindi inviato al server.
Il server calcola semplicemente H2
allo stesso modo, quindi confronta i valori. Il server genera quindi un valore casuale a 64 bit C
e lo invia all'utente.
Tutte le altre comunicazioni con il server contengono C
come token di autenticazione.
Il punto qui è garantire che la password non venga mai inviata in chiaro; si presume che il canale di comunicazione tra utente e server sia "ragionevolmente" sicuro, nel senso che questo schema è per un target estremamente basso; le password più comuni dell'utente sono probabilmente le informazioni più preziose presenti.
Il protocollo dovrebbe difendersi da:
- Determinazione della password da parte di un attaccante passivo o attivo
- Impersonificazione dell'utente da parte di terzi senza capacità di intercettazione
EDITS
- Non sto usando TLS perché è per un videogioco; Sto cercando di ridurre al minimo la latenza il più possibile.
- La password dell'utente viene impostata tramite una webapp protetta da TLS.
- Non mi interessa (molto ☺) della NSA che dirotta l'account di un utente tanto quanto
1337Kid__1
dirottando l'account diOtherPlayer
o un utente malintenzionato che intercetta le password.- Sto prendendo le premesse su quanto sopra che è difficile fare intercettazioni sul traffico di un altro utente (per qualcuno che non è l'NSA) senza essere sullo stesso segmento di rete di loro; se questa è una nozione di cui dovrei essere disabitata, fammi sapere.