Sistemas Distribuídos e Criptografia


Criptografia e Segurança da Informação (Sem. 1)

Objectivos de aprendizagem

- Compreender que a noção de segurança de um sistema é relativa a um modelo de segurança e a dicotomia
objectivo de segurança/modelo do atacante.
- Explicar as dimensões fundamentais da segurança da informação, relacionar essas dimensões fundamentais
com requisitos de segurança concretos e reconhecer as primitivas criptográficas que lhes estão associadas.
- Identificar e seleccionar protocolos criptográficos relevantes à segurança da informação em sistemas
concretos.
- Discutir o conceito de problema difícil no contexto da criptografia e teoria de números computacional
modernas; explicar o conceito deprova/redução de segurança.
- Explicar o funcionamento interno das técnicas criptográficas mais relevantes e discutir os modelos de
segurança teóricos aceites para cada técnica criptográfica.

Conteúdos programáticos

- Introdução às dimensões fundamentais da confidencialidade, integridade, autenticidade e não repúdio;
funcionalidade versus garantias de segurança.
- Problemas difíceis que servem como pressupostos de segurança e definição de tamanhos de chaves
criptográficas.
- Esquemas criptográficos: modelos e provas de segurança.
- Criptografia simétrica, cifras simétricas sequenciais, cifras simétricas por blocos, modos 
 funcionamento,
de
segurança teórica, funções de hash e MACs.
- Criptografia de chave pública, cifras assimétricas, assinaturas digitais, acordos de chave 

autenticados.
- Identificação, mecanismos de desafio-resposta, provas de conhecimento nulo.

Metodologias de ensino e avaliação

Exposição de conceitos e análise de casos de estudo. Trabalho de grupo em exercícios e pequenos estudos de
caso, em certos casos com recurso a ferramentas informáticas específicas. Trabalho de projecto em grupo
com orientação directa da equipa docente afecta à UC.
A avaliação basear-se-á num projecto prático (40% da nota final) e um exame escrito (60% da nota final). Em
ambas as componentes será exigida uma nota mínima de 50%.

Bibliografia

Introduction to Modern Cryptography, Katz-Lindell, CRC Press, 2007
Handbook of Applied Cryptography, Menezes-Oorschot-Vanstone, CRC Press 2001.

Sistemas Distribuídos Confiáveis (Sem. 2)

Objectivos de aprendizagem

Reconhecer e explicar a relevância da distribuição na escalabilidade e confiabilidade de sistemas informáticos.
Reconhecer, distinguir e caracterizar desafios em sistemas distribuidos em termos de problemas e modelos
abstractos.
Identificar e discutir o papel de algoritmos distribuídos (DHT, gossip, consensus) na solução de problemas de
escala e confiabilidade.
Planear, implementar e avaliar sistemas distribuídos que resolvem problemas de escala e confiabilidade.

Conteúdos programáticos

Fundamentos de sistemas distribuídos: modelação, tempo lógico e observação global, acordo e detecção de
faltas.
Sistemas distribuídos de grande escala: comunicação epidémica, comunicação por publicação/subscrição,
arquitecturas peer-to-peer, gestão de dados com coerência eventual.
Sistemas distribuídos tolerantes a faltas: transacções distribuídas, comunicação em grupo, replicação com
coerência forte.

Metodologias de ensino e avaliação

Exposição de conceitos e análise de casos de estudo. Trabalho de grupo em exercícios e pequenos estudos de
caso, em certos casos com recurso a ferramentas informáticas específicas. Trabalho de projecto em grupo
com orientação directa da equipa docente afecta à UC.
A avaliação basear-se-á num projecto prático (40% da nota final) e um exame escrito (60% da nota final). Em
ambas as componentes será exigida uma nota mínima de 50%

Bibliografia

Distributed Systems for System Architects, Paulo Veríssimo e Luís Rodrigues, Kluwer Academic
Handbook of Peer-to-Peer Networking, Shen, X.; Yu, H.; Buford, J.; Akon, M. (Eds.), Springer
Optimistic Replication, Yasushi Saito e Marc Shapiro, Journal ACM Computing Surveys
Reliable Distributed Systems, Kenneth Birman, Springer
Replication: theory and practice, B. Charron-Bost, F. Pedone, A. Schiper (Eds), 

Springer

Paradigmas de Sistemas Distribuídos (Sem. 1)

Objectivos de aprendizagem

Conhecer os principais paradigmas de programação de sistemas distribuídos.
Identificar e discutir os mecanismos distribuidos que fazem parte integrante de middleware empresarial e de
plataformas de computação em nuvem.
Relacionar as questões de distribuição com as caracteristicas marcantes destas plataformas.
Planear e implementar sistemas distribuidos, nomeadamente, através da combinação e composição de
componentes de middleware e de computação em nuvem.

Conteúdos programáticos

Paradigmas de programação de comunicação entre processos: invocação remota de procedimentos e
métodos, programação orientada às mensagens e orientada aos recursos.
Paradigmas de programação de servidores concorrentes: baseados em threads, em eventos, em actores, em
fluxo de dados, em espaços de tuplos e em memória transaccional.
Middleware para desenvolvimento de sistemas distribuídos: orientado aos objectos - CORBA e JEE, orientado
às mensagens AMQP e ZMQ, orientado aos serviços e programação na cloud - web services AWS e
AppEngine.

Metodologias de ensino e avaliação

Exposição de conceitos e análise de casos de estudo. Trabalho de grupo em exercícios e pequenos estudos de
caso, em certos casos com recurso a ferramentas informáticas específicas. Trabalho de projecto em grupo
com orientação directa da equipa docente afecta à UC.
A avaliação basear-se-á num projecto prático (40% da nota final) e um exame escrito (60% da nota final). Em
ambas as componentes será exigida uma nota mínima de 50%

Bibliografia

Distributed Systems - Principles and Paradigms, Andrew Tanenbaum e Marten van Steen, 2ª Edição, Prentice
Hall
Programming Concurrency on the JVM, Venkat Subramaniam, The Pragmatic Bookshelf

Segurança de Sistemas Informáticos (Sem. 2)

Objectivos de aprendizagem

Reconhecer as técnicas de programação responsáveis pelas mais frequentes situações de vulnerabilidade de
segurança de sistemas informáticos e aplicar boas práticas de desenvolvimento conducentes a uma maior
segurança.
Reconhecer as principais competências e boas práticas necessárias a uma eficaz administração de sistemas
no domínio da segurança.
Identificar e estimar o risco associado a potenciais vulnerabilidades das várias componentes de um sistema
informático; aplicar medidas correctivas ou mitigadoras.
Definir e implementar perímetros de segurança adequados ao risco associado às várias componentes do
sistema.
Discutir a utilização de certificados de chave pública e descrever os componentes centrais de uma Public Key
Infrastructure.
Aplicar técnicas de análise forense a situações de comprometimento da segurança de um sistema informático.

Conteúdos programáticos

Programação segura, buffer overflows, ataques e defesas contra usurpação de controlo, identificação e
exploração de vulnerabilidades, codificação segura.
Princípio do privilégio mínimo, controlo de acessos, administração de sistemas, gestão de sessões e
autenticação de utilizadores.
Modelo de segurança Web, política da origem comum, sandboxing e isolamento, segurança de aplicações Web,
cross-site scripting e SQL injection.
Certificação e infra-estruturas de chave pública, certificados X.509.
Protecção de redes, protocolos relevantes (IPSec, HTTPS, SSH, etc.), firewalls, VPNs, 

detecção de intrusões, e
testes de segurança.
Malware, vírus, spyware e key-loggers, e contramedidas.

Metodologias de ensino e avaliação

Exposição de conceitos e análise de casos de estudo. Trabalho de grupo em exercícios e pequenos estudos de
caso, em certos casos com recurso a ferramentas informáticas específicas. Trabalho de projecto em grupo
com orientação directa da equipa docente afecta à UC.
A avaliação basear-se-á num projecto prático (40% da nota final) e um exame escrito (60% da nota final). Em
ambas as componentes será exigida uma nota mínima de 50%

Bibliografia

Security Engineering, Ross Anderson, Wiley
Secure Programming for Linux and Unix HOWTO, by David Wheeler, http:// 
ww.dwheeler.com/securew
programs/.