Sono nuovo di Cybersecurity e sto scrivendo un server TCP con Java Socket API. Esiste una classe client e server. La classe del server è quella che verrebbe eseguita su un server, che ascolta su una porta specificata e accetta connessioni socket. Se la parte client del programma tenta di connettersi, deve inviare la password corretta crittografata al server. Il server ha un elenco di password corrette, hash con SHA-256.
Ho configurato un sistema di chiavi pubblico-privato RSA, in cui il server mantiene il privato e invia la chiave pubblica al client. Il client esegue l'hashing della password non elaborata con SHA-256, quindi utilizza la chiave pubblica per crittografarlo prima di inviarlo attraverso il socket.
Ciò di cui sono preoccupato (e sono sicuro che ci sono altri problemi) è che un utente malintenzionato userà la chiave pubblica per provare un sacco di password con il server. Se si generano le chiavi simmetriche AES utilizzando una stringa speciale con hardcoded sul lato client e server, sarebbe opportuno cifrare la chiave pubblica stessa con la chiave simmetrica prima di inviarla via cavo e usare quelle chiavi per una comunicazione aggiuntiva?
Non mi interessa nulla oltre alla password che viene inviata dal client al server subito dopo che il socket è stato accettato.