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
seed
al 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_key
e una risposta che il login ha avuto successo
Per inviare richieste che richiedono il login,
- Il client invia un hash generato da
access_key
eseed
insieme ai dati della richiesta. - Server controlla se l'IP non è cambiato e se l'hash fatto da
access_key
eseed
è corretto. Se lo è, il nuovoaccess_key
viene generato da quello vecchio, i dati della richiesta vengono elaborati e il server restituisce il nuovoaccess_key
insieme 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?