Attualmente sto implementando SRP su un gioco che sto sviluppando. Tuttavia, distribuirò questo server di gioco e client, quindi vorrei che la registrazione fosse consentita al volo, senza richiedere all'host di utilizzare una sorta di forum o comunicazione via email per registrare l'account prima del primo accesso. Passerò al flusso di base di SRP, quindi le modifiche alla mia registrazione.
Documentazione SRP: Trovato qui
- L'utente inserisce il nome utente e la password nel client.
- Il client invia il nome utente e un valore generato casualmente sul server.
- Il server ottiene il salt e il verificatore della password (che è il risultato di una funzione sulla password, entrambi memorizzati esternamente) dell'utente e invia il sale e un altro valore generato casualmente al client.
- Ora ogni parte calcola in modo indipendente una chiave di sessione condivisa e dimostra che la chiave è reciproca.
- Se entrambe le prove corrispondono, l'utente si è autenticato con successo.
Per aggiungere la funzionalità di registrazione, ecco le mie modifiche proposte.
- L'utente inserisce il nome utente e la password nel client.
- Il client invia il nome utente al server.
- Il server controlla se esiste attualmente un utente con il nome utente inviato dal client.
- Se non esiste alcun utente, il server invia la chiave pubblica RSA al client, richiedendo al client di generare un salt e verificatore.
- Il client invia il sale, il valore effimero pubblico e il verificatore al server e lo codifica con la chiave pubblica.
- Il server decodifica il sale e il verificatore con la chiave privata.
- Ora ogni parte calcola in modo indipendente una chiave di sessione condivisa e dimostra che la chiave è reciproca.
- Se entrambe le prove corrispondono, l'utente si è autenticato con successo.
- Se l'utente si è autenticato con successo, il sale e il verificatore vengono salvati nel database o file per l'utente.
Questa sarebbe una forma accettabile e sicura di registrazione al volo? O ci sono delle cose che non ho considerato?
Modifica: sembra che non abbia fornito tutte le informazioni necessarie. Il modo in cui modifico il mio gioco dopo è simile ai server Minecraft, in cui gli utenti possono scaricare il client e connettersi a qualsiasi numero di server ospitati dall'utente, oppure possono essi stessi ospitare il server. La differenza tuttavia è che gli account utente di Minecraft vengono creati una volta, quando si registrano per l'account e quando avviano il client, il client si autentica con i server Minecraft ufficiali. Voglio lasciare la gestione della base utenti alle persone che ospitano i server; in questo modo gli unici account utente che conoscono sono quelli che si sono registrati con il loro server.