Trabalho de Conclusão de Curso (TCC) do curso de Ciência da Computação
Este repositório contém o Trabalho de Conclusão de Curso desenvolvido como requisito para a obtenção do grau de Bacharel em Ciência da Computação. O trabalho aborda o desenvolvimento de um sistema de comunicação digital que utiliza criptografia de ponta a ponta (E2EE) para garantir a privacidade e a segurança das mensagens trocadas entre os usuários.
Desenvolvimento de um Sistema de Comunicação com Criptografia de Ponta a Ponta
Em um cenário marcado por crescentes preocupações com a proteção de dados pessoais e a vigilância digital, soluções que asseguram a confidencialidade das comunicações tornam-se cada vez mais relevantes. Este projeto apresenta uma solução prática e acessível para comunicação segura, utilizando técnicas modernas de criptografia.
Com o crescimento vertiginoso das interações online e o aumento de crimes cibernéticos, vazamentos de dados e fraudes, surge a necessidade de sistemas que priorizem a segurança e privacidade do usuário final. O projeto foi motivado por:
- Vulnerabilidades cibernéticas: Ataques como "Man-in-the-Middle" têm comprometido dados de milhões de usuários
- Importância da privacidade: A comunicação digital precisa garantir confidencialidade e autenticidade
- Software livre: Possibilitar que qualquer pessoa audite o código-fonte e verifique a segurança da aplicação
Objetivo Principal: Desenvolver um sistema de comunicação de software livre, utilizando um modelo híbrido de criptografia simétrica e assimétrica para assegurar a privacidade na troca de mensagens, além da implementação do não repúdio, garantindo a autenticidade da comunicação.
Objetivos Específicos:
- Implementar criptografia híbrida utilizando algoritmos RSA (assimétrica) e AES (simétrica)
- Desenvolver arquitetura cliente-servidor com protocolo WebSocket para comunicação em tempo real
- Implementar o conceito de Perfect Forward Secrecy (PFS) para garantir sigilo efêmero
- Criar interface amigável ao usuário
- Realizar testes de segurança e usabilidade
O sistema foi desenvolvido utilizando tecnologias modernas e amplamente adotadas:
- Linguagem: Python
- Protocolo de Comunicação: WebSocket (comunicação bidirecional em tempo real)
- Criptografia:
- RSA para troca segura de chaves
- AES (256 bits) para criptografia de mensagens
- Perfect Forward Secrecy (PFS) para sigilo efêmero
- Princiapis Bibliotecas: Cryptography, Typer, FastAPI
- Frontend: HTML, CSS, JavaScript
O projeto alcançou resultados significativos:
- Sistema funcional: Plataforma operacional de troca de mensagens com criptografia E2EE
- Segurança robusta: Implementação de PFS garante que chaves comprometidas não afetam sessões anteriores
- Arquitetura eficiente: Servidor intermediário apenas roteia mensagens, sem acesso ao conteúdo descriptografado
- Código aberto: Todo o código-fonte disponível para auditoria e contribuições
- Documentação completa: Trabalho acadêmico detalhando fundamentos teóricos e práticos
Principais contribuições:
- Disseminação do conhecimento sobre criptografia aplicada
- Demonstração prática de que é possível construir plataformas seguras mesmo com recursos limitados
- Reforço da importância da proteção da privacidade em sistemas de comunicação
- Material de referência para estudos futuros em segurança da informação
- Emanuel Chagas Pinheiro Mattos
- Henrique Sebastião Silva Rosa
- Lucas Souza de Deus
- Valério Gonçalves Vieira Junior
- Wanderson Amorim Pinheiro
Comunicação, Criptografia, Privacidade, Segurança, Desenvolvimento de Software, Python, E2EE, Perfect Forward Secrecy, WebSocket.
Este repositório contém todo o código LaTeX necessário para compilar o documento do TCC em PDF. Abaixo, você encontrará informações sobre as ferramentas e pacotes utilizados.
Ferramentas e Geradores:
- Gerador de Tabelas - Crie tabelas LaTeX facilmente
- Mathpix Snip - Converta equações de imagens para LaTeX
- Detexify - Encontre símbolos LaTeX desenhando-os
- LaTeX Equation Editor - Editor visual de equações
Documentação e Tutoriais:
- Fórum TEX - Comunidade para dúvidas sobre LaTeX
- Documentação do Overleaf - Tutoriais completos e exemplos
- Guia de LaTeX - Tutorial passo a passo
- CTAN - Comprehensive TeX Archive Network - Repositório oficial de pacotes LaTeX
- LaTeX Wikibook - Guia completo e colaborativo
Templates e Referências:
- Template TCC FGA-UnB - Template de referência
- AbnTeX2 - Documentação sobre normas ABNT em LaTeX
- Gallery Overleaf - Galeria de templates
Instalação e Configuração:
- Vídeo de como instalar o LaTeX no Windows
- TeX Live - Distribuição LaTeX multiplataforma
- MiKTeX - Distribuição LaTeX para Windows
Abaixo está uma explicação dos principais pacotes LaTeX utilizados no documento e links para suas documentações oficiais:
Configuração de Idioma e Codificação:
- babel - Define o idioma do documento (português brasileiro)
- inputenc - Codificação do documento (conversão automática de acentos)
- fontspec - Permite utilizar fontes customizadas do sistema (requer XeLaTeX ou LuaLaTeX)
Formatação de Texto:
- microtype - Melhorias tipográficas e justificação do texto
- indentfirst - Indenta o primeiro parágrafo de cada seção
- setspace - Define o espaçamento entre linhas
- hyphenat - Controla a hifenização automática de palavras
- csquotes - Formatação correta de aspas e citações
Layout e Estrutura:
- geometry - Ajusta o layout do documento e dimensões das margens
- changepage - Permite alterar margens em partes específicas do texto
- sectsty - Define estilos para títulos de seções
- titlesec - Personaliza tamanho de fonte e espaçamento de títulos e subtítulos
Sumário e Listas:
- tocloft - Personaliza a aparência do sumário
- tocbibind - Adiciona referências e outros elementos ao sumário
- enumitem - Controla formatação de listas e remove indentação
- etaremune - Cria listas enumeradas em ordem decrescente
Referências e Citações (ABNT):
- abntex2cite - Formata citações e referências de acordo com as normas ABNT
Recursos Adicionais:
- hyperref - Cria links clicáveis no documento (referências internas e URLs)
- glossaries - Gerencia glossário de termos técnicos
- acronym - Gera lista de acrônimos e siglas
Nota: Para visualizar a lista completa de pacotes e suas configurações, consulte o arquivo
tcc.clsno repositório.
GNU Make - Utilizaremos o make para automatizar comandos grandes que podem nos ajudar em alguns momento como formatar o código e remover arquivos desnecessários. Veja os exemplos abaixo.
make format- formata o código.make lint- verifica se o código está formatado mas não aplica mudanças.make clean- apaga arquivos desnecessários gerados durante o build do PDF.
Para formatar o código LaTeX vamos utilizar o tex-fmt, ele nos ajudará a manter a sanidade do código, corrigindo identação e quebrando linhas muito compridas.
O arquivo tex-fmt.toml na raíz do projeto é o arquivo de configuração dessa ferramenta.
Para executar o formatador basta executar o comando abaixo, ele irá procurar e formatar todos os arquivos .tex, .bib, .cls e .sty do projeto.
make formatNote
Sempre antes de realizar um commit é import executar o formatador para garantir que está tudo certo, pois ao realizar um pull request para a branch principal, um workflow será executado para verificar se o código está formatado e caso não esteja, o check do workflow irá falhar.
Vamos utilizar a extensão LaTeX Workshop no VS Code para diversas coisas como geração automática do PDF, sugestão de código e umpouco mais.
Important
Como vamos gerar um PDF com fontes customizadas pela extensão no VS Code, precisamos configurar a variável latex-workshop.latex.recipes no arquivo JSON de configuração do VS Code para usar o compilador compatível com fontes customizadas, como no seguinte exemplo:
"latex-workshop.latex.tools": [
{
"name": "latexmk",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdfxe",
"-outdir=%OUTDIR%",
"%DOC%"
],
"env": {}
},
],
"latex-workshop.latex.recipes": [
{
"name": "latexmk (xelatex)",
"tools": [
"latexmk"
]
},
],