Disciplinas

Criptografia (Biomédica)

CSSI

Outras

Avisos

13/07: Disponíveis notas de GSI/PSC (secção de Avaliação).

15/06: Disponíveis notas finais do módulo de SSI (secção de Avaliação).

03/03: Disponíveis notas finais do módulo de CSI.

07/02: Data/Hora do teste de CSSI -- 10/02/2009 às 16:00.

12/01: As apresentações de PI de 3ª (13/01) terão início às 14:30.

12/01: Disponível avaliação prática de CSI.

19/12: As entregas/apresentações dos segundos projectos de PI ficam marcadas para o dia 13 de Janeiro pelas 14:00.

19/12: As aulas de reposição do módulo de SSI serão no dia 6 de Janeiro às 14:00.

10/11: Nova versão dos slides de técnicas criptográficas.

21/10: Já está disponível a primeira parte dos apontamentos do módulo de técnicas criptográficas.

05/10: A aula de TC no dia 07/10 começa somente às 10:00.

Conceitos de Sistemas Criptográficos (TP) - Sumários

MI-CSSI (2008/2009)


Aula 1 - 30/09/2008, 16:00 - 18:00

Ambiente de Desenvolvimento

O objectivo principal desta aula é o de escolher/instalar o ambiente de desenvolvimento Java que será utilizado durante o curso.

Como actividade de programação (para experimentar o ambiente escolhido), deve desenvolver uma pequena aplicação que leia um ficheiro de texto (nome do ficheiro passado como argumento), e escreva para stdout o seu conteúdo com todas as letras maiúsculas.


Aula 2 - 07/10/2008, 16:00 - 18:00

Cifra de ficheiro utilizando JCA/JCE

Pretende-se cifrar o conteudo de um ficheiro. Para tal far-se-á uso da funcionalidade oferecida pela JCA/JCE, em particular a implementação de cifras simétricas.

O objectivo é então o de definir um pequeno programa Java que permita cifrar/decifrar um ficheiro utilizando uma cifra simétrica (e.g. AES no modo CBC). A sua forma de utilização pode ser análoga a:

      prog -genkey <keyfile>
      prog -enc <keyfile> <infile> <outfile>
      prog -dec <keyfile> <infile> <outfile>

Sugestões:

  • Para simplificar, pode começar por utilizar uma cifra mais simples (e.g. RC4) e uma chave secreta fixa definida no código na forma de um array de bytes (i.e. implementar somente as opções -enc e -dec). Nesse caso, deverá utilizar a classe SecretKeySpec para a converter para o formato adequado.
  • Um segundo passo deverá consistir na implementação da opção -genkey. Aí surge o problema de guardar a chave no sistema de ficheiros: vamos começar por adoptar a solução mais simples (e insegura) - guardar a chave directamente num ficheiro.
  • Por último, iremos guardar a chave num contentor apropriado (protegido por uma password). Para tal devemos utilizar uma KeyStore disponibilizada pela JCA que permita o armazenamento de chaves secretas (tipo "JCEKS" ou "PKCS12").

Algumas classes relevantes:


Aula 3 - 14/10/2008, 16:00 - 18:00

Aplicação de Cifra

Pretende-se adaptar a aplicação desenvolvida para responder aos seguintes requisitos:

  • O objectivo é fazer uso da aplicação para cifrar um conjunto de ficheiros (potencialmente grandes);
  • A chave utilizada nessas operações de cifra deve estar devidamente protegida;
  • Se algum dos ficheiros cifrados for manipulado (alterado), o programa deverá detectar essa ocorrência ao decifrar.


Aula 4 - 21/10/2008, 16:00 - 18:00

Acordo de Chaves

As classes Cliente, Servidor e TServidor implementam uma aplicação que permite a um número arbitrário de clientes comunicar com um servidor que escuta num dado port (e.g. 4567). O servidor atribui um número de ordem a cada cliente, e simplesmente faz o dump do texto enviado por cada cliente (prefixando cada linha com o respectivo número de ordem). Quando um cliente fecha a ligação, o servidor assinala o facto (e.g. imprimindo [n], onde n é o número do cliente).

Exemplo da execução do servidor (que comunica com 3 clientes):

$ java Servidor
1 : daskj djdhs slfghfjs askj
1 : asdkdh fdhss
1 : sjd
2 : iidhs
2 : asdjhf sdga
2 : sadjjd d dhhsj
3 : djsh
1 : sh dh d   d
3 : jdhd kasjdh as
2 : dsaj dasjh
3 : asdj dhdhsjsh
[3]
2 : sjdh
1 : dhgd ss
[1]
2 : djdj
[2]

Pretende-se:

  1. Modificar as respectivas classes por forma a garantir a confidencialidade nas comunicações estabelecidas. Para o efeito, deverá considerar a cifra/modo que considerar mais apropriado.
  2. Estabelecer o segredo através da execução do protocolo de acordo de chaves Diffie-Hellman. Para o efeito deverá utilizar:
    • Classe AlgorithmParameterGenerator para gerar os parâmetros P e G do algoritmo;
    • Classe KeyPairGenerator para gerar os pares de chaves ( (x, g^x) e (y,_g^y_) para cada um dos intervenientes);
    • Classe KeyAgreement que implementa o protocolo propriamente dito.

(obs.: No JCA Reference Guide está disponível um exemplo com a codificação do protocolo Diffie-Hellman.)

Algumas classes relevantes:


Aula 5 - 28/10/2008, 16:00 - 18:00

Protocolo Sation to Station

Pretende-se complementar o programa com o acordo de chaves Diffie-Hellman para incluir a funcionalidade análoga à do protocolo Station to Station. Recorde que nesse protocolo é adicionado uma troca de assinaturas:

  1. Alice -> Bob : g^x
  2. Alice <- Bob : g^y, SB(g^x, g^y)
  3. Alice -> Bob : SA(g^x, g^y)

Um requisito adicional neste protocolo é a manipulação de pares de chaves de cifras assimétricas (e.g. RSA). Para tal deve produzir um pequeno programa que gere os pares de chaves para cada um dos intervenientes e os guarde em ficheiros que serão lidos pela aplicação Cliente/Servidor.

Novas Classes:


r8 - 07 Dec 2008 - 22:56:31 - JoseBacelarAlmeida
This site is powered by the TWiki collaboration platform Copyright © by the contributing authors. Ideas, requests, problems? Send feedback.
Syndicate this site RSSATOM