Tengo un escaso conocimiento del mundo de la criptografía, estoy empezando a aprenderlo, así que soy un novato :)
Como proyecto para ingresar al campo de la criptografía, quiero escribir un programa cliente \ servidor que pueda enviar y recibir datos de manera segura ( es decir, encriptado).
Digamos que quiero cifrar el tráfico entre un cliente y un servidor o entre dos clientes. El servicio que estoy ejecutando solo puede hablar con el servidor u otro cliente (que también actúa como servidor) en un puerto conocido, el servidor básicamente busca una conexión en un lado en un puerto predeterminado.
Quiero que esos servicios puedan comunicarse entre sí sin la posibilidad de que un tercero que esté escuchando en la red pueda descifrar el contenido de la conversación o intente hacerse pasar por un servicio.
No estoy buscando una nueva forma de intercambiar claves (¿o debería hacerlo?), puedo hacer que las claves se guarden de forma segura en los servicios para que cuando x envíe un mensaje a y , y de vuelta, serán los únicos que podrán descifrar el contenido y la respuesta (fuera del curso, solo a un servicio verificado ).
- nota al margen, la clave se puede guardar en el programa - codificada o puede generarse a partir de una combinación de cosas (por ejemplo, IP, nombre de computadora, nombre de usuario o cualquier otra combinación de constantes) que se puede pasar a la para que el cliente pueda generar la clave (digamos que estoy pasando la IP, el nombre de la computadora y una semilla aleatoria, habrá una fórmula conocida para crear la clave a partir de esos valores).
Necesito usar una clave simétrica para el cifrado, pero tal vez pueda intentar usar dos claves generadas previamente como SSL.
Sé que si estoy usando la misma clave una y otra vez, un tercero puede oler el tráfico y obtener la clave (matemática, ¿cómo se hace?), cuantos más datos recopile, más más fácil se pone (?).
Entonces, ¿qué debo hacer para prometer que nadie podrá obtener la clave de cifrado (finalmente leyendo los datos)? ¿Qué cifrado debo usar? ¿Qué más necesito saber antes de comenzar mi viaje?