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 de funcionamento,
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

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:// www.dwheeler.com/secureprograms/.

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