Este proyecto implementa un chat cliente-servidor en Python utilizando la biblioteca Tkinter para la interfaz gráfica. El objetivo principal del proyecto es destacar la importancia del cifrado en las telecomunicaciones. Para lograr esto, se examinará primero el funcionamiento del chat sin cifrado, utilizando herramientas como Wireshark para capturar el tráfico y visualizar los mensajes sin cifrar. Posteriormente, se implementará un cifrado para asegurar la confidencialidad de las comunicaciones y se demostrará cómo el cifrado protege la información de ser interceptada.
Asegúrate de tener instalado Python en tu sistema. Puedes descargarlo desde python.
Se recomienda utilizar un entorno virtual para evitar conflictos con las dependencias. Puedes crear un entorno virtual con el siguiente comando:
python3 -m venv venv
Luego, activa el entorno virtual:
- En Windows:
venv\Scripts\activate
- En macOS y Linux:
source venv/bin/activate
Instala las dependencias necesarias ejecutando el siguiente comando:
pip install -r requirements.txt
Para generar una nueva clave privada RSA cifrada con AES-256, ejecuta el siguiente comando:
openssl genpkey -algorithm RSA -out server-key.key -aes256
Este comando generará una clave privada cifrada y la guardará en un archivo llamado server-key.key
. Asegúrate de recordar la contraseña que establezcas.
Crea una nueva Solicitud de Firma de Certificado (CSR) utilizando la clave privada RSA generada:
openssl req -new -key server-key.key -out server.csr
La CSR se guardará en un archivo llamado server.csr
.
Genera un certificado autofirmado basado en la CSR:
openssl x509 -req -days 365 -in server.csr -signkey server-key.key -out server-cert.pem
Este comando generará un certificado válido por un año y lo guardará en un archivo llamado server-cert.pem
.
Si decides eliminar la contraseña de la clave privada para simplificar la automatización, ejecuta el siguiente comando:
openssl rsa -in server-key.key -out server-key.key
Este paso es opcional y se realiza para facilitar la automatización en entornos donde ingresar una contraseña manualmente no es práctico. Sin embargo, ten en cuenta que al eliminar la contraseña, la clave privada se vuelve más vulnerable al acceso no autorizado. Asegúrate de entender las implicaciones antes de realizar este paso.
Ejecuta el servidor utilizando el siguiente comando:
python3 server.py
El servidor estará escuchando en el puerto especificado (por defecto, el puerto 1234).
Ejecuta el cliente utilizando el siguiente comando:
python3 client.py
Se abrirá una ventana de chat donde puedes ingresar tu nombre y conectarte al servidor.