- 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 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.
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
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
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:// ww.dwheeler.com/securew programs/.