- 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.
- 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.
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%.
Introduction to Modern Cryptography, Katz-Lindell, CRC Press, 2007 Handbook of Applied Cryptography, Menezes-Oorschot-Vanstone, CRC Press 2001.
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.
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.
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%
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
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.
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.
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%
Security Engineering, Ross Anderson, Wiley Secure Programming for Linux and Unix HOWTO, by David Wheeler, http:// www.dwheeler.com/secureprograms/.
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.
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.
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%
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