Esta fase do trabalho estende a anterior, possibilitando os mecanismos de segurança, tais como: MACs, comunicação com um protocolo seguro (TLS –Transport Layer Security) e gestão básica de certificados.
A envolvente do trabalho continua a ser a mesma, ou seja, a concretização de um sistema simplificado de armazenamento de ficheiros, designado por myCloud, onde o utilizador usa um servidor central para armazenar os seus ficheiros.
Iremos assumir no trabalho que existe um adversário que pretende comprometer o correto funcionamento do sistema. O adversário terá um conjunto de capacidades que poderão ser empregues na realização das suas ações maliciosas.
Torna-se assim necessário dotar o sistema dos mecanismos de proteção que lhe possibilitem manter um funcionamento correto ainda que se encontre sob ataque.
O trabalho consiste no desenvolvimento de dois programas:
- O servidor myCloudServer
- A aplicação cliente myCloud que acede ao servidor via sockets TCP
A aplicação é distribuída de forma que o servidor fica numa máquina e o utilizador pode usar clientes em máquinas diferentes na Internet.
O servidor mantém um ficheiro (designado por passwords) com os utilizadores do sistema e respetivas informações.
Este ficheiro deve ser um ficheiro de texto. Cada linha tem um username e a respetiva password (com o salt):
Por exemplo:
admin;ut4Ic9BfJNfFL2fJ+4IXGQ==;yn9ZU+vkUK/mtt+vuRU7az3yb4vWEPmoyXXRaI8nxIc=
maria;w9CfDqX9Li5krpdJZgg/Qh;A46KPmM+bClnR5D8URnVAzG9heNbvxop5eQq1leAcuk=
alice;dbqPTW49yNLmOJK4RC;MAOgRGmbTqpwNdI5yIjZJICRG7CvKlRNOozCKx0QsyY=
A opção -au será utilizada para criar utilizadores
myCloud -a <serverAddress> -au <username> <password> <certificado>
1ºPasso: Ir para a pasta src/
2ºPasso: Correr o servidor
java myCloudServer 'PortNumber'
3ºPasso: Correr o cliente
java myCloud -a 'HOST':'PortNumber' -u <username> -p <password> {-c||-s||-e||-g} {<filenames>}+
java myCloud -a 'HOST':'PortNumber' -u <username> -p <password> -d <username de destinatário> {-c||-s||-e} {<filenames>}+
-a 'HOST':'PortNumber'
Identifica o servidor (hostname ou endereço IP e porto; por exemplo 127.0.0.1:23456).
-c filenames+
O cliente cifra um ou mais ficheiros e envia-os para o servidor.
Caso algum dos ficheiros já exista no servidor ou caso algum dos ficheiros não exista localmente, apresenta uma mensagem de erro aoutilizador e continua para os seguintes ficheiros.
O cliente usa cifras híbridas. Assim, a chave usada para cifrar cada ficheiro é cifrada no cliente e enviada para o servidor. Cada uma destas chaves pode ser guardada num ficheiro cujo nome deve ser o nome do ficheiro original com extensão chave_secreta.
Os ficheiros cifrados são guardados no servidor com extensão cifrado.
Exemplo:
java myCloud -a 127.0.0.1:23456 -u maria -p ut12?!WE -c trab1.pdf aulas.doc
-s filenames+
O cliente assina um ou mais ficheiros e envia-os para o servidor.
Caso algum dos ficheiros já exista no servidor ou caso algum dos ficheiros não exista localmente, apresenta uma mensagem de erro ao
utilizador e continua para os seguintes.
As assinaturas devem são guardadas separadamente em ficheiros com extensão assinatura. Os ficheiros assinados são guardados no servidor com extensão
assinado.
Exemplo:
java myCloud -a 127.0.0.1:23456 -u maria -p ut12?!WE -s trab1.pdf aulas.doc
-e filenames+
O cliente assina e cifra um ou mais ficheiros e envia-os para o servidor.
Caso algum dos ficheiros já exista no servidor ou caso algum dos ficheiros não exista localmente, apresenta uma mensagem de
erro ao utilizador e continua para os seguintes.
O cliente usa envelopes seguros portanto os ficheiros são guardados no servidor com extensão seguro.
Exemplo:
java myCloud -a 127.0.0.1:23456 -u maria -p ut12?!WE -e trab1.pdf aulas.doc
-g filenames+
O cliente recebe um ou mais ficheiros.
Caso algum dos ficheiros já exista localmente ou caso algum dos ficheiros não exista no servidor, apresenta uma mensagem de erro ao utilizador e continua para os seguintes.
O cliente decifra os ficheiros que tenham sido cifrados.
O cliente verifica a assinatura dos ficheiros que tenham sido assinados.
Exemplo:
java myCloud -a 127.0.0.1:23456 -u maria -p ut12?!WE -g trab1.pdf aulas.doc
-d dest user
O sistema deve permitir enviar ficheiros para o servidor para outros utilizadores.
Exemplo:
java myCloud -a 10.101.21.22 -u maria -p ut12?!WE -d alice -c aa.pdf bb.txt
Toda criptografia assimétrica no trabalho é com RSA com chaves de 2048 bits.
A criptografia simétrica é efetuada com AES e chaves de 128 bits.
Os utilizadores do myCloud têm de ter um par de chaves na keystore designada por keystore.??Cloud
Para mais detalhes, ler enunciado.pdf