Uso TLS per proteggere le mie comunicazioni TCP client-server.
Ho un server Qt e client Android e iOS. Per la connessione TLS uso solo i certificati lato server, quindi solo i client sono sicuri che siano connessi al server reale, ma il server non sa se si tratta di un'applicazione attendibile o dannosa. Quando il server e il client TLS tramite i socket TCP sono connessi, il client può registrare un nuovo utente o accedere come utente esistente.
La registrazione è simile a questa:
- L'utente fornisce login, password e informazioni aggiuntive sull'utente (età, posizione, ecc.) all'applicazione client.
- La password viene sottoposta a hash con questo schema:
hashed_password = hash(salt + hash(password))
, dovesalt
- uno dei campi dati dell'utente. - Il client invia login, password hash e informazioni aggiuntive dell'utente sul server con richiesta di registrazione.
- Il server esegue alcune operazioni di routine (controllare se questo utente esiste già, i tipi di campi sono corretti?) e quindi registra un nuovo utente nel DB: inserisce login, hash nella password lato client e ulteriori informazioni sull'utente nel
users
table.
Accedi in questo modo:
- L'utente fornisce login e password.
- La password viene cancellata utilizzando lo stesso schema :
hashed_password = hash(salt + hash(password))
. - Il client invia login e ha cancellato la password sul server con richiesta di autorizzazione.
- Server controlla la tabella
users
nel DB - c'è una coppia appropriata di login e password hash? Se sì, il server autorizza il socket di quel client come un utente, ora tutte le richieste da questo socket vengono interpretate come richieste dall''utente identificato, finché il socket non viene chiuso. Ma il server non ha alcun "token" e / o alcune altre cose (e so che non è così buono, si prega di controllare questa domanda ),
Il server - invia l'ID dell'utente al client (ovviamente questo ID verrà utilizzato solo per l'autoidentificazione del client in futuro).
Tutto quello che posso dire sui messaggi e altre richieste è che vengono passati senza alcuna protezione aggiuntiva, ad eccezione di TLS.
Quindi, ho una semplice domanda: dovrei usare alcuni protocolli crittografici aggiuntivi, algoritmi o altro per proteggere il processo di autenticazione degli utenti e il processo di trasmissione dei messaggi?