Confiabilidade de Sistemas DistribuÃdos (2021/2022) - Departamento de Informática
Confiabilidade de Sistemas Distribuídos é uma unidade curricular do bloco de especializaçãono plano de estudos do curso de Mestrado em Engenharia Informática ma FCT/UNL. A cadeira estuda fundamentos, métodos, técnicas e mecanismos para concepção e implementação de sistemas distribuídos de grande escala, com requisitos de fiabilidade, segurança e preservação de garantias de privacidade do processamento de dados. No programa da disciplina estudam-se mecanismos associados a técnicas avançadas e propostas da investigação recente para tolerância a falhas e tolerância a intrusões, técnicas criptográficas e soluçõespara privacidade de dados e computações, bem como soluções para suporte de computação confiável com proteção e isolamento ao nível do hardware.
A unidade curricular 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 e seus componentes e serviços de software;
- Domínio de soluções para suporte de computação confiável em plataformas e dispositivos hardware.
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, envolvendo plataformas blockchain, plataformas confiáveis em núvens de computação e armazenamento de dados, mecanismos de confiabilidade para sistemas de cpmputação móvel e plataformas IoT.
Programa resumido:
- Introdução
- Canais para comunicação segura e confiável
- Técnicas, mecanismos e serviços para sistemas distribuídos confiáveis
- Tolerância a falhas bizantinas e tolerância a intrusões
- Prevenção, detecção, recuperação e tolerância a intrusões
- Plataformas Blockchain
- Preservação de privacidade
- Ambientes de computação confiável e computação confidencial
Programa mais detalhado:
1. Introdução
- Coceitos, propriedades, atributos e métricas para sistemas confiáveis
- Caracterização de sistema distribuído confiável e facetas importantes:
-
- Segurança, fiabilidade e preservação de privacidade
- Garantias de safety e liveness
- Modelos de falha e definição de modelos de adversário
- Mecanismos para sistemas distribuídos confiáveis
- Modelação e representação de sistemas distribuídos confiáveis
2. Canais para comunicação segura e confiável
- Comunicação ponto a ponto, multiponto e por difusão
- Serviços básicos de segurança:
-
-
802.1x, 802.11i, IPSec, VPNs , TLS e HTTPS
-
DNSSEC and secure routing
- Túneis de comunicação segura extremo-a-extremo
- Canais para difusão fiável e segura de mensagens
- Abstrações e primitvas para canais de comunicação fiável
3. Técnicas, mecanismos e ferramentas para sistemas distribuidos confiáveis
-
Logging e checkpointing
- Recuperação de estado com técnicasrollbackerollforward
- Registos de escrita e leitura
- Quorums
- Replicação e replicação de máquinas de estado
- Isolamento ou confinamento e ambientes de computação confiável
4. Tolerância a falhas bizantinas e tolerância a intrusões
- Quórums e quórums bizantinos
- Consenso. Impossibilidade FLP e técnicas de contorno do problema
- Consenso síncrono
- Consenso assíncrono
- Consenso com tolerância a falhas
- Protocolos: Raft, Paxos, Multipaxos, Variantes e PBFT
- Consenso probabilístico, com aleatoriedade e com diversidade
- Estudo de casos
5. Prevenção, detecção, recuperação e tolerância a intrusões
- Defesas de perímetro.
- Sistemas de prevenção de intrusões
- Sistemas de detecção de intrusões (HIDS, NIDS, HIDS,HoneypotseHoneynets)
- Recuperação de intrusões com técnicas reativas e pró-ativas
- Tolerância a intrusões e disponibilidade permanente
6. Blockchains
- Origens e tipologias de plataformasBlockchain e aplicações
- Planos de serviços e componentes numa plataformaBlockchain
- Programação com contratos inteligentes
- Consensos com tolerância a falhas bizantinas e soluções de consenso para blockchains
- Métricas de ddesempenho
- Noção de finalidade e latência da finalidade
- Modelos de consenso em blockcains: PoW, PoS, PBFT, PoET e outros modelos
-
- Soluções desafios para blockchains abertas ou sem permissões
-
- Escala, desempenho e consistência
- Segurança e modelo adversarial
- Equidade e sustentabilidade
- Preservação de anonimato e privacidade
- Descentralização da base de confiança
- Soluções arquiteturais para escalabilidade: sharding, modelos com paralelização, sidechais, e modelos híbridos
- Independência entre os planos de aplicação, consenso e disseminação P2P
-
Estudo de casos
7. Preservação de privacidade
- Técnicas de preservação de privacidade e tipologias de soluções
- Técnicas de criptografia aplicada para privacidade de dados e computações
- Operações com dados cifrados: técnicassecurity-at-the-reste criptografia homomórfica
- Técnicas e soluções com criptografia pesquisável
- Outras técnicas:
-
- Anonimização e obfuscação de dados
- Privacidade diferencial
- Partilha de segredos
- Protocolos para comunicação e armazenamento com esquecimento
- Ténicas para comunicação anonimizada e privada:
-
8.Computação confiável e computação confidencial
- Hardware criptográfco, HSMs e TPMs
- Confiabilidade com atestação de software
- Tecnologias e ambientes de execução confiável
-
Virtualização e isolamento em hardware
-
Tecnologias de referência:IntelSGX, TrustZone, AMD-SEV
- Programação com ambientes de execução confiável
- Computação confidencial
-
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
- Michel Raynal. Fault-Tolerant Message-Passing Distributed Systems: An Algorithmic Approach. Springer. 2018.
Referências complementares
-
W. Stallings, Information Privacy Engineeirng and Privacy by Design, Pearson, 2020
- W. Stallings, Cryptography and Network Security 8th Ed. Pearson, 2020
- W. Stallngs, Computer Security Principles ad Practice, 4h Ed., 2018
- M. Correia, P. Sousa, Segurança no Software, FCA Ed. 2017
Obs) Nas aulas são enquadradas leituras especificas de artigos para casos de estudo no programa. Materias de orientação para atividades em laboratório e para suporte de trabalhos práticos serão também disponibilizados durante as aulas
Não existe um sistema de precedências formal ou obrigatório no cursp de Mestrado Integrado em Engenharia Informática, para além do que resulta da estrutura curricular e adequabilidade de matérias relacionadas no plano curricular, como requisitos para os objetivos da cadeira de Confiabilidade de Sisemas Distribuídos, enquanto cadeira de especialziação no curso. Apontam-se os seguintes requisitos como aspectos a serem considerados pelos alunos que pretendam frequentar a unidade curricular de CSD:
- Conhecimentos prévios associadosà frequência das disciplinas de Redes de Computadores, Sistemas Distribuídos e Segurança de Redes e Sistemas de Computadores e Fundamentos de Sistemas Operativos
- Podem ser particularmente interessantes o domínio de conhecimentos em Algorimos de SIstemas Distribuídos e Programação de Algoritmos para Sistemas Distribuídos, incluindo conhecmentos de concorrência, com prática de programação de sistemas multi-thread em linguagens de programação anteriormente utilizadas (ex., Java)
- Muito implortante ter conhecimentos prévios de criptografia aplicada e programação com métodos e algoritmos criptográficos (ex., Java / Java JCE), programação com canais TLS (Java JSSE), desenvolvimento de serviços e endpoints REST/HTTPS)
- Conhecimentos de Redes de Computadores e domínio de protocolos da pilha TCP/IP (ex., HTTP, DNS, TCP, UDP, IP, IEEE802.1/802.11)
- Competências práticas anteriores em programação (ex., linguagens Java, Go or C#), e domínio de ambientes de desenvolvimento para programação nessas linguagems (ex., Eclipse IDE ou outro), bem como ferramentas associadas ao desenvolvimento de projetos Java, C#, Maven e interação com repsositórios de gestão de projetos, como por exemplo GitHub e respetivas ferramentas
- É bastante 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), prática e autonomia para trabalhar em ambienet shell / consola, bem como prática de instalação e uso de ambientes para virtualização (ex., plataformas VMWare, VirtualBox e instalação/setup de máquinas virtuais) ou prática inicial com contentorização de serviços e aplciações (ex., Docker, Docker Compose)