Soy nuevo en ciberseguridad y estoy escribiendo un servidor TCP con la API de Java Socket. Hay una clase de cliente y servidor. La clase de servidor es lo que se ejecutaría en un servidor, escucha en un puerto específico y acepta conexiones de socket. Si la parte cliente del programa intenta conectarse, debe enviar la contraseña cifrada correcta al servidor. El servidor tiene una lista de contraseñas correctas, hash con SHA-256.
Tengo un sistema de clave pública-privada RSA configurado, donde el servidor mantiene la privacidad y envía la clave pública al cliente. El cliente tiene la contraseña sin procesar con SHA-256 y luego usa la clave pública para cifrarla antes de enviarla a través del socket.
Lo que me preocupa (y estoy seguro de que hay otros problemas) es que un atacante usará la clave pública para probar un montón de contraseñas con el servidor. Si genero claves simétricas AES usando una cadena especial codificada en el lado del cliente y del servidor, ¿tendría sentido cifrar la clave pública con la clave simétrica antes de enviarla por cable y usar esas claves para una comunicación adicional? >
No me preocupa otra cosa que no sea la contraseña que se envía del cliente al servidor justo después de que se acepta el socket.