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:
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.
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.