Trabalho relacionado a disciplina de Redes II

Universidade Federal do Paraná

Bacharelado em Ciência da Computação

Alunos: Brendon e Marllon

GRRs: 20170203 e 20170149


Prof: Elias P. Duarte Jr.

Link para o projeto disponibilizado no Github

Estabelecimento de Chave Secreta com Diffie-Hellman




No trabalho do semestre corrente o objetivo era escrever um client-server TCP/IP aplicando Diffie-Hellman para o estabelecimento de uma chave secreta compartilhada entre ambos. Implementamos o que foi solicitado, a seguir vamos detalhar como ocorre a troca de mensagens entre cliente e servidor:



Com essa chave privada compartilhada em mãos, utilizamos o algoritmo de criptografia Data Encryption Standart (DES) do lado do cliente para criptografar a mensagem. Este algoritmo funciona basicamente realizando deslocamento e substituição de bits. A chave privada compartilhada dita como este processo ocorre, como o processo de manipulação de bits ocorre repetidas vezes e de maneira não linear o resultado criptografado não pode ser revertido a entrada original sem o uso da chave exata que foi utilizada para o processo de criptografia.

A seguir uma imagem ilustrando a troca de mensagens entre cliente e servidor:

Fluxo de comunicação entre cliente e servidor implementados
Fluxo de troca de mensagens entre cliente-servidor aplicando Diffie-Hellman

Para o desenvolvimento do trabalho, foi necessário tomar algumas decisões que não foram informadas na especificação do trabalho. Para a troca de mensagens sempre logamos as mensagens criptografadas e descriptografadas que o servidor recebe do cliente e o cliente recebe do servidor, quando forçado a ter a chave compartilhada privada errada no servidor o mesmo não consegue descriptografar os dados da mensagem recebida, entretanto tomamos a decisão de fazer com que o servidor sempre retorne a mensagem recebida da mesma forma para o cliente para que o mesmo consiga descriptograr, mostrando que nenhum dado foi perdido. Outra característica importante do nosso trabalho é que o mesmo foi arquitetado de forma com que o servidor atenda somente um cliente por vez.


Por último, gostariamos de ressaltar que como não foi especificado definimos de forma estática o host como localhost e a porta como 10000 do servidor.


Como executar o projeto


Para executar o projeto é necessário clonar o repositório do github pelo link desta página, instalar as dependências do projeto utilizado o comando pip install requirements.txt , colocar em execução o servidor executando o código server.py presente no diretório src/ e após isso em outro terminal executar o client.py presente no mesmo diretório.