Il progetto su cui sto lavorando dipende da WebSockets per comunicare tra il server e il browser client per tutte le interazioni all'interno del gioco. Sto frequentando l'università per Computer Security, ma non sono ancora sicuro dei potenziali attacchi contro il sistema di validazione corrente.
Inizierò molto velocemente e dirò che in questo momento non posso usare Secure WebSockets a causa di Autobahn ( ancora ) che non supporta Secure WebSockets. Se devo cambiare il mio framework che sto usando per risolvere eventuali problemi, lo farò comunque.
Come funziona adesso, collegando l'utente richiede la chiave pubblica del server (2048 bit) che può essere modificata a intervalli regolari, il server fornisce la chiave pubblica all'utente. Per convalidare la chiave, un rapido scambio di invio di una stringa nota costante crittografata con la chiave viene inviato al server e il server verifica che la chiave sia corretta per l'utente. Dopo aver verificato la chiave, il client crittografa la password in testo semplice fornita dall'utente e la invia al server. Il server decrittografa la password, esegue l'hash della password con bcrypt e convalida la password in un modo resistente agli attacchi di temporizzazione (nessuna interruzione anticipata, quasi costante). La crittografia utilizza un nonce randomizzato come parte del padding per impedire attacchi di riproduzione.
La parte di cui sospetto di più è il modo in cui la mia attuale implementazione "tiene traccia" di quale socket appartiene a chi . Fondamentalmente se una richiesta di "login" viene gestita da un socket e il risultato è positivo, il socket viene "denominato" impostando un attributo speciale sul socket con lo username fornito nella richiesta di accesso.
Al momento della disconnessione, il socket viene distrutto e vi sono dei controlli di stallo per i socket che non hanno ricevuto una richiesta da molto tempo per essere disconnessi automaticamente. L'unico modo per impostare l'attributo su un socket sul lato server è eseguire una richiesta di accesso corretta.
Sono a conoscenza della possibilità di attacco del MITM in merito allo scambio di chiavi.
Le mie preoccupazioni sono quali sono i difetti in questo sistema e come dovrei prevenirli o attenuarli?