Trasmissione di messaggi

0

Attualmente sto sviluppando un gioco che verrà eseguito in un cliente, che si iscriveranno a questo gioco online e creeranno il loro account lì, le loro informazioni saranno archiviate in un database MySQL. Sto creando il gioco usando Lua + Love2D, al momento del lancio del gioco l'utente verrà presentato con un campo login e password. Il processo andrà come segue:

  1. L'utente invia i propri dati
  2. Il client invia il proprio nome utente al server richiedendo la password salt
  3. Il client riceve il sale dal server e lo aggiunge al proprio input
  4. L'hash del client ha aggiunto la password una certa quantità di volte usando SHA256
  5. Il client invia l'hash finale al server
  6. Il server verifica che sia l'hash corretto
  7. Il client riceve "true" o "false" a seconda che sia la password corretta

Ora la mia domanda è, ho sentito che qualcuno può facilmente intercettare questi dati, e ottenere il loro nome utente, hash e hash password, quindi fondamentalmente inviare queste informazioni al server in qualche modo ottenere loro l'autenticazione per gli account di tali persone. Come posso evitare che ciò accada? Posso usare qualcosa come una chiave di autenticazione? Se sì, puoi spiegare come funzionerebbe?

    
posta Bicentric 14.11.2013 - 23:17
fonte

1 risposta

0

Sì, hai ragione, qualcuno potrebbe intercettare le comunicazioni e accedere come utente, inoltre stai facendo un sacco di lavoro extra non necessario sul client. Ecco i passaggi che vorrei fare

  1. L'utente invia i propri dati
  2. Il client stabilisce un collegamento sicuro al server (SSL o simile)
  3. Il client invia il nome utente e la password tramite il collegamento sicuro al server.
  4. Il server cerca il nome utente nel database e recupera il salt, il conteggio delle iterazioni e la password con hash
  5. Il server esegue la password inviata, la ricerca saltata e il conteggio iterazione cercato tramite una funzione di derivazione della password appropriata come bcrypt o pbkdf2
  6. Il server confronta l'output della funzione precedente con la password hash che ha cercato
    1. (facoltativo) Se la password era corretta, il server verifica se è stato aumentato il numero minimo di iterazioni per il server, se l'account dell'utente è inferiore al minimo il server eseguirà nuovamente la password al nuovo conteggio delle iterazioni livello con un nuovo salt e registra il nuovo hash, il nuovo conteggio e il nuovo salt nel database.
  7. Il client riceve "vero" o "falso" tramite il collegamento sicuro, a seconda che sia la password corretta
risposta data 15.11.2013 - 00:41
fonte

Leggi altre domande sui tag