- 106906 - Diogo José Ribeiro e Ribeiro
- 107285 - Carolina Silva Martins
- 107329 - Filipa Cangueiro Gonçalves
Estes devem ser colocados na diretoria guioes, dentro da semana correspondente (S3, S4, etc.).
O trabalho prático (trabalho-pratico/) consiste num sistema de chat cliente-servidor com End-to-End Encryption (E2EE), desenvolvido em Python com a biblioteca cryptography, conforme o enunciado.
O relatório completo, com a descrição da arquitetura, do modelo de segurança e das primitivas criptográficas utilizadas, está em trabalho-pratico/relatorio.md.
- Mensagens privadas cliente-a-cliente cifradas de ponta a ponta (o servidor nunca acede ao conteúdo).
- Autoridade de Certificação (CA) própria, com o servidor a emitir certificados X.509 para cada utilizador registado.
- Canal peer-to-peer direto entre clientes, negociado via servidor, com rotação periódica de chave.
- Mensagens de grupo com gestão de admin/sub-admin e rekey da chave de grupo.
- Entrega de mensagens offline quando o destinatário não está ligado.
- Forward secrecy a vários níveis (sessão cliente-servidor, canal P2P, mensagens 1:1 e chave de grupo).
- Histórico de conversas cifrado, guardado localmente por utilizador.
trabalho-pratico/
├── server/ # servidor TCP, CA e persistência de utilizadores/grupos
├── client/ # cliente interativo (linha de comandos)
├── common/ # utilitários criptográficos e de P2P partilhados
└── relatorio.md # relatório do projeto
Requisitos: Python 3.10+.
-
Criar e ativar um ambiente virtual na raiz do
trabalho-pratico/, e instalar a bibliotecacryptography(necessária tanto para o servidor como para o cliente):cd trabalho-pratico python3 -m venv venv source venv/bin/activate pip install cryptography
-
Iniciar o servidor (pede uma passphrase para proteger a chave da CA e o ficheiro de utilizadores):
cd server python3 server.py -
Iniciar um ou mais clientes, cada um numa consola diferente (repetir
source venv/bin/activatenessa consola), a app pede para escolher entre Login ou Registo:cd client python3 client.py -
Dentro do cliente, usar
/ajudapara ver a lista de comandos disponíveis (/falar,/p2p,/create_group,/historico, etc.).