Confiabilidade de Sistemas DistribuÃdos (2017/2018) - Departamento de Informática
Esta cadeira de especialização visa adquirir conhecimentos na área das soluções de confiabilidade para sistemas distribuídos de grande escala tendo em vista a concepção, desenvolvimento e operação de aplciações e sistemas críticos. A cadeira tem um pendor acentuado na conjugação de mecanismos e técnicas avançadas para tolerância a falhas, segurança de sistemas computacionais e ténicas e mecanismos de tolerância a intrusões. Partindo-se de uma abordagem dos fundamentos e formalismos teóricos, objetiva-se uma forte ligação à realização prática e à análise experimental de sistemas com implementação prática.
A cadeira fornece competências para a construção de sistemas distribuídos para computação confiável em ambientes Internet bem como para processamento e gestão de dados na Cloud, ambientes com uma enorme relevância actual.
A unidade curricular (UC) visa desenvolver e especializar conhecimentos na área dos Sistemas Distribuídos Confiáveis, tendo em vista a compreensão aprofundada de técnicas avançadas usadas na concepção de sistemas críticos complexos, com propriedades de tolerância a falhas, processamento seguro e confiável, tolerância a intrusões e preservação de privacidade dos dados e computações.Objectiva-se o domínio dos fundamentos para construção e desenvolvimento de sistemas confiáveis e distribuídos em grande escala bem como das técnicas que permitem suportar a combinação daquelas propriedades.
A unidade curricular tem forte incidência no estudo de fundamentos teóricos e seus formalismos, como base consolidada para abordar a concretização e compreensão de sistemas práticos, avaliados com ensaio experimental e observação crítica das propriedades de confiabilidade suportadas.
Aquisição de competências:
Saber
-
Conceitos de base para a análise e síntese de mecanismos e serviços de confiabilidade para distribuídos, do ponto de vista da sua concepção e suporte de operação
-
Abstrações fundamentais para a construção dos mecanismos, técnicas e algoritmos para sistemas distribuídos confiáveis e sua realização
-
Técnicas para combinação de propriedades de segurança, privacudade, fiabilidade, tolerância a falhas e tolerância a intrusões para sistema distribuídos confiáveis
Fazer
-
Construção de mecanismos e serviços para suporte de sistemas distribuídos confiáveis para suporte de aplicações e sistemas críticos
-
Análise e avaliação experimental de mecanismos e serviços de confiabilidade de um sistema distribuído
-
Programação e desenvolvimento prático de sistemas distribuídos com propriedades de confiabilidade
Introdução. Noção de confiabilidade de um sistema distribuído; propriedades de um sistema confiável; modelos de confiabilidade
- Confiablidade como conjugação de propriedades de segurança e fiabilidade
- Tolerância a falhas e tolerância a intrusões
- Comunicação segura e pilha de segurança TCP/IP
- Primitivas para comunicação segura e confiável
- Métricas experimentais de caracterização e avaliação de sistemas confiáveis
Deteção, prevenção e recuperação de intrusões
- Sistemas de detecção de intrusões e suas tipologias
- Deteção distribuída de intrusões
- Sistemas de prevenção de intrusões
- Ténicas de recuperação de intrusões
-
- Mecanismos de recuperação reativa
- Mecanismos de recuperação proativa
Mecanismos e serviços para tolerância a intrusões
- Modelos e técnicas para tolerância a intrusões com disponibilidade permanente
- Replicação, modelos de replicação e modelo SMR (State Machine Replication)
- Consenso com tolerância a intrusões e falhas bizantinas
- Algoritmos de concenso com tolerância a falhas bizantinas
- Algoritmos de segurança para consenso probabilístico
- Técnicas de confiabilidade com particionamento e fragmentação de dados
- Segurança e tolerãncia a intrusões com aleatoriedade e diversidade
- Casos de estudo: Erasure Codes, DepSky e níveis de redundância em RAID
Segurança de dados e transacções com descentralização da base de confiança
- Blockchain: operação, mecanismos de suporte e garantias de confiabilidade
- Aplicações específicas e casos de estudo da tecnologia Blockchain
-
- Caso do suporte de criptomoedas (bitcoins)
- Aplicações com transacções por Smart-Contracts
- Plataformas Blockchain e suporte de programação: estudo de casos
Segurança de bases de dados
- Serviços e mecanismos de segurança em bases de dados SQL
- Bases de dados cifradas e acesso a dados cifrados
- Segurança em bases de dados analíticas
- Garantia de privacidade dos dados e operações
- Proteção com técnicas "Security on the Rest"
- Proteção com encriptação homomórfica
- Repositorios NoSQL e proteção de privacidade
- Estudo de casos
Computação confiável
- Técnicas e tecnologias para bases de computação confiável
- Módulos TPM (Trusted Platform Modules)
- TEE (Trusted Executin Environments)
- Tecnologia ARM TrustZone e Intel SGX
- Programação com ArmTrustZone e Programação para Intel SGX
Bibliografia principal
- W. Stallings, L. Brown, Computer Security - Principles and Practice, Prent. Hall, 2014
- W. Zhao, Building Dependable Distributed Systems, Wiley, 2014
- C. Cachin, R. Guerraoui, L. Rodrigues, Introduction to Reliable and Secure Distributed Programming (2nd Ed), Springer, 2011.
Referências Complementares
- W. Stallings, Nework Security Essentials, 6th Ed. Pearson, 2017
- A.S. Tanenbaum and M. Van Steen. Distributed Systems Principles and Paradigms, Prent. Hall,
2007
-
K. Birman, Reliable Distributed Computing, Springer 2005
-
M. Correia, P. Sousa, Segurança no Software, FCA Ed. 2010
Obs) Serão fornecidas nas aulas referências de leituras sugeridas (artigos e partes de livros) sobre os tópicos apresentados, bem como relacionados com os trabalhos práticos de avaliação.
Não existindo requisitos prévios para além dos que resultam da estrutura curricular do curso de Mestrado Integrado em Engenharia Informática, os seguintes aspectos devem no entanto ser considerados pelos alunos que pretendam frequentar a unidade curricular.
- É fortemente recomendada a frequência préviadas disciplinas de Sistemas Distribuídos e Segurança de Redes e Sistemas de Computadores;
- Conhecimentos de Redes de Computadores;
- É fortemente recomendado que os alunos possuam bons conhecimentos e autonomia para programação em linguagem Java, com bom domínio de algum ambiente de desenvolvimento para programação nessa linguagem (ex., Eclipse IDE ou outro);
- É fortemente recomendável que os alunos possuam boa autonomia e bons conhecimentos em sistemas operativos de base UNIX (ex., Distribuições Linux ou Mac OS X).