Este projeto implementa uma arquitetura Cliente-Servidor via sockets TCP em Python, focada em comunicação segura. O tráfego de dados é protegido por criptografia de ponta a ponta, implementada do zero (código autoral), sem o uso de bibliotecas criptográficas externas.
Projeto desenvolvido para a disciplina de Redes/Segurança como requisito de avaliação (N2).
- Comunicação TCP/IP: Estabelecimento de conexão confiável entre cliente (Alice) e servidor (Bob).
- Troca de Chaves de Diffie-Hellman: Algoritmo implementado nativamente para acordar uma chave simétrica secreta em um canal inseguro.
- Validação de Números Primos: Algoritmo customizado de alta performance para validar as raízes matemáticas do Diffie-Hellman.
- Criptografia Simétrica (Cifra de César): Algoritmo de ofuscação adaptado para a tabela ASCII, suportando caracteres especiais e espaços.
- Parametrização via CLI: Uso de
sys.argvpara injeção dinâmica de IP e Porta via linha de comando.
A comunicação segue as seguintes etapas matemáticas e lógicas:
- Setup Público: Cliente e Servidor concordam previamente com um número primo
Pe uma baseG. - Geração de Chaves Privadas: Cada lado gera um fator aleatório privado (
apara o cliente,bpara o servidor). - Cálculo das Chaves Públicas: - Cliente calcula:
A = (G^a) mod P- Servidor calcula:
B = (G^b) mod P
- Servidor calcula:
- Troca e Segredo Compartilhado: Eles trocam
AeBpela rede. Em seguida, calculam a chave simétrica finalSde forma independente. - Criptografia: A chave simétrica
Sresultante atua como o fator de deslocamento (shift) dinâmico para a Cifra de César, garantindo que o texto seja cifrado antes do envio pelo socket.
Pré-requisitos: Python 3.x instalado.
O projeto foi construído para ser executado via terminal. Para testar a comunicação, abra duas instâncias do terminal (podem ser na mesma máquina usando o localhost ou em máquinas distintas na mesma rede).
1. Iniciando o Servidor (Bob):
No primeiro terminal, inicie o servidor passando a porta desejada como argumento.
python3 simple_tcp_server.py 13002. Iniciando o Cliente (Alice):
No segundo terminal, inicie o cliente passando o IP do servidor e a mesma porta. (Use 127.0.0.1 se estiver testando localmente). Bash
python3 simple_tcp_client.py 127.0.0.1 13003. Interação:
Digite a mensagem no terminal do Cliente. O Servidor receberá a mensagem cifrada, irá decifrá-la, transformá-la em maiúsculas (processamento), re-cifrá-la e devolvê-la ao Cliente.
Conforme os requisitos da Etapa 1, a comunicação foi submetida à análise de pacotes utilizando o Wireshark.
Ao escutar a interface de rede (filtrando por tcp.port == 1300), o recurso Follow TCP Stream comprova a eficácia da implementação:
- Sem a Criptografia: O tráfego de payload flui em plaintext, permitindo que qualquer interceptador leia a mensagem.
- Com a Criptografia Ativada: O payload capturado na camada de aplicação exibe apenas caracteres ilegíveis e bytes ofuscados, mitigando ataques de interceptação simples (Eavesdropping).