Sto scrivendo un gioco multiplayer. Ho un server centrale che elabora tutto. Per lo scambio di dati uso il protocollo HTTPS. Poiché questo è un gioco non posso usare sistemi computazionalmente costosi come RSA per il trasferimento dei dati.
Per accedere,
- Il client usa sha512 per produrre hash esadecimali da password e random
seed. - Il cliente invia la richiesta di "accesso" con nome utente, hash e
seedal server. - Il server verifica se l'utente non ha tentato troppe richieste di accesso e controlla se l'hash della password corrisponde all'hash creato dalla password nel database. Se lo fa, invia un
access_keye una risposta che il login ha avuto successo
Per inviare richieste che richiedono il login,
- Il client invia un hash generato da
access_keyeseedinsieme ai dati della richiesta. - Server controlla se l'IP non è cambiato e se l'hash fatto da
access_keyeseedè corretto. Se lo è, il nuovoaccess_keyviene generato da quello vecchio, i dati della richiesta vengono elaborati e il server restituisce il nuovoaccess_keyinsieme alla risposta dalla richiesta.
In qualsiasi momento, se l'IP del cliente cambia o viene inviato access_key non valido, la sessione viene automaticamente interrotta.
Quanto è sicuro questo approccio? Cosa posso fare per migliorarlo?