Labs SD >

Criptografia

Objectivos

No laboratório:

Resumos:

Exemplos:

    Para executar apenas o teste da cifra simétrica, escrever:
    mvn test -Dtest=SymCrypto*#testSymCrypto*
 
    Para executar apenas o teste do código de autenticação de mensagem, escrever:
    mvn test -Dtest=MessageAuth*#testMAC*
 

 

Exercício

Kerberos simplificado

O objetivo deste exercício é fazer uma autenticação no Kerberos e depois usar a chave de sessão para proteger dados.

Comece por se familiarizar com o Kerberos simplificado, tal como apresentado nas aulas teóricas.

 

Instalação dos módulos

Descarregar e descompactar o ficheiro kerby.zip ZIP

Para compilar e instalar os módulos, fazer:
cd kerby
mvn clean install -DskipTests

O servidor Kerberos a utilizar está disponível no seguinte endereço: http://sec.sd.rnl.tecnico.ulisboa.pt:8888/kerby.

Cada grupo já tem um conjunto de utilizadores criados à partida. As senhas de utilizadores foram distribuídas no ficheiro CXX-secrets.txt colocado no repositório GitHub do grupo. Os utilizadores existentes são: alice@CXX.binas.org, binas@CXX.binas.org, charlie@CXX.binas.org e eve@CXX.binas.org.
O utilizador binas@CXX.binas.org é a identidade do Web Service binas-ws.

 

Vamos então experimentar o Kerberos simplificado.

O módulo kerby-experiment deve ser usado para testar a biblioteca e usar o servidor Kerberos a correr na RNL.
A dependência kerby-lib vai trazer consigo todas as bibliotecas necessárias, como se pode ver:
cd kerby-experiment
mvn dependency:tree

A classe KerbyExperiment é executável:
mvn clean package exec:java

Será necessário agora fazer o código correspondente ao papel do "cliente" no protocolo, e depois o "servidor".
O código deve ser feito gradualmente, passo a passo, compilando e executando regularmente para testar o funcionamento.

A ideia é que, antes de se tentar implementar um sistema cliente-servidor realmente distribuído e que recorra à autenticação via Kerby, vamos começar por construir um programa meramente local que implementa os principais passos da autenticação Kerberos mas sem trocar mensagens. Este programa permitir-nos-á aprender e dominar as técnicas bases, antes de depois as aplicarmos num sistema efetivamente distribuído (em que cliente e servidor são processos distintos que trocam mensagens segundo o protocolo de autenticação).

Esse programa simplificado encontra-se esboçado no método main da classe KerbyExperiment do módulo kerby-experiment. No entanto, o código que fornecemos para este método está incompleto. Pretende-se neste exercício completá-lo. Como resultado final, o programa criado permitirá testar a biblioteca kerby-lib e usar o servidor Kerberos a correr na RNL.

Parte "cliente".

  1. O cliente autentica-se e recebe chave de sessão e ticket.
  2. Deve abrir a chave de sessão (Kcs) com a sua chave (Kc).
  3. Depois deve guardar o ticket, para mais tarde "enviar" para o servidor.
  4. Deve criar um autenticador também para enviar.

A classe RequestTicketIT.java nos testes de kerby-lib exemplifica como interagir com o Kerberos.

Parte "servidor"

  1. O servidor abre o ticket com a sua chave (Ks) e deve validá-lo.
  2. Depois deve abrir o autenticador com a chave de sessão (Kcs) e validá-lo.
  3. O servidor "responde" ao cliente com uma instância da classe RequestTime (da kerby-lib).

 

O que falta fazer?

Este código permite experimentar a biblioteca e o servidor Kerberos, para implementar as partes "cliente" e "servidor" do protocolo sem que exista real comunicação entre os dois (tudo se passa no mesmo processo, para já).

A chave de sessão, Kcs, deve ser usada para proteger a integridade de uma "mensagem".

 

Continuação no próximo laboratório

O passo seguinte será incorporar o protocolo de segurança nas mensagens SOAP trocadas entre binas-ws-cli e binas-ws. Para isso, será necessário utilizar JAX-WS SOAP Handlers, como veremos no próximo laboratório.

 

Bom trabalho!


© Docentes de Sistemas Distribuídos, Dep. Eng. Informática, Técnico Lisboa