Confiabilidade de Sistemas Distribuídos
Objetivos
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 conceçã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;
- Conhecer os princípios, modelos, fundamentos, paradigmas e garantias de confiabilidade de plataformas Blockchain e seus diversos planos de serviços de suporte
- Técnicas para combinação de propriedades de segurança, privacidade, 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 métodos, algoritmos, ferramentas e construções criptográficas para soluções de engenharia de sistemas com preservação de privacidade de dados e computações distribuídas.
- Domínio de soluções para suporte de computação confiável e isolamento seguro de computações críticas com base em plataformas, dispositivos e ambientes de execução baseados em 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 com garantias de fiabilidade, segurança e tolerância a falhas e intrusões
- Saber utilizar métodos práticos, protocolos e ferramentas de análise e avaliação experimental de mecanismos e serviços de confiabilidade para sistemas distribuídos;
- Dominar os princípios práticos e os suportes de programação na utilização de plataformas Blockchain
- Saber como utilizar e desenvolver soluções práticas baseadas em construções criptográficas e protocolos para preservação de privacidade de dados e de computações em sistemas distribuídos e bases de confiança descentralizadas
- Programação e desenvolvimento prático de projetos de sistemas distribuídos com propriedades de confiabilidade, envolvendo a integração de plataformas Blockchain, nuvens de computação, armazenamento e análise de dados como serviços e sistemas distribuídos em contínuos IoT-Edge-Cloud
Caracterização geral
Código
11555
Créditos
6.0
Professor responsável
Henrique João Lopes Domingos
Horas
Semanais - 4
Totais - 52
Idioma de ensino
Inglês
Pré-requisitos
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)
Bibliografia
- 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
- M. Correia, P. Sousa, Segurança no Software, FCA Ed. 2017
- R. Anderson, A Guide to Building Dependable Distributed Systems, Wiley, 2020
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
Método de ensino
Dependendo do número de turmas e alunos, as aulas podem ser leccionadas em português ou em inglês. Os materiais e a bibliografia estão dipsoníveis em língua inglesa.
No funcionamento da unidade curricular as aulas teóricas são enquadradas para transmissão e discussão de conceitos fundamentais e leituras sugeridas, abrangendo os tópicos do programa. As aulas práticas são desenvolvidas em ambiente laboratorial para realização de exercícios "hands-on" e trabalhos práticos com respetiva análise e avaliação experimental, incluindo o desenvolvimento ou demonstrações de trabalhos de avaliação obrigatória.
Nas aulas práticas decorrem também apresentações ou demonstrações tutoriais, com enquadramento teórico-prático ou de demonstração de técnicas, ferramentas e operação de algoritmos, podendo estes serem motivados por exercícios de verificação e correção. Na fase de desenvolvimento de trabalhos práticos de avaliação a realizar pelos alunos as aulas práticas enquadram ainda o esclarecimento de dúvidas ou suporte ao desenvolvimento desses trabalhos.
Componentes de avaliação
- Testes de frequência: 2 testes de frequência com avaliação individual (T1, T2)
- Os testes avaliam os conhecimentos teóricos cobrindo os tópicos do programa leccionado nas aulas teóricas e leituras recomendadas para preparação dos testes.
- Os testes são realizados presencialmente na FCT/UNL.
- Os testes são individuais e podem conter questões para resposta com e sem consulta (em partes diferenciadas). Para a parte com cosulta os alunso podem usar materiais impressos e para uso individual, não sendo permitido o uso de dispositivos eletrónicos.
- Avaliação prática para obtenção de frequência
- Avaliação de dois projetos de implementação obrigatórios realizados em grupo (com 2 alunos/grupo), com parte de avaliação individualizada
- Avaliação contínua opcional (cobrindo desenvolvimentos, participação individual e realização de objetivos nas aulas)
Condições de Aprovação e Critérios de Avaliação
As condições de obtenção de frequência bem como as regras de avaliação e condições de aprovação estão definidos na secção "Métodos de Avaliação".
Método de avaliação
Componentes de avaliação:
- T1, T2: 2 testes de frequência com duas partes: sem consulta (PSC) e com consulta (PCC)
- Parte com consulta: apenas podem ser usados materiais individuais impressos em papel
- Parte sem consulta pode conter questões sobre o desnvolvimento prático dos projetos
- P1, P2: 2 projectos com realização e entrega obrigatória nos prazos que forem definidos
- Projetos desenvolvidos em grupo (ref. 2 alunos/grupo)
- E: Exame final de recurso
- Todos os elementos de avaliação são avaliados na escala de 0-20 valores, com classificação arredondada à décima de valor.
Regras de avaliação dos testes (T1 e T2):
- Nota de cada teste (NT) é avaliada da seguinte forma:
- NT = max (45% PSC + 55% PCC; 55% PSC + 45% PCC)
Regras de avaliação dos projetos (P1 e P2):
- Avaliação de cada projeto (P):
- P = 75% G + 25% I
- G: avaliação do trabalho de grupo
- I: componente de avaliação individualizada decorrente de demostração, conhecimento individual demonstrado (10%), contribuição para o desenvolvimento no trabalho do grupo (10%) e autoavaliação interna do grupo (5%)
Avaliação e obtenção de frequência (F):
- Classificação da frequência (F):
- F = 50% P1 + 50% P2
- Condições de obtenção de frequência
- F deve ser maior que 7,5 em escala de 0-20 valores
- A avaliação de qualquer um dos projetos deve ser maior que 7,5 em escala de 0-20 valores
Obtenção de aprovação com avaliação de frequência (AF)
- O cálculo da avaliação de frequência (AF) faz-se do seguinte modo:
- AF = 45% F + 25% T1 + 30% T2
- Condições conjugadas para aprovação com frequência:
- AF maior ou igual a 9,5/20
- T1 maior ou igual a 7,5/20
- T2 maior ou igual a 7,5/20
Obtenção de aprovação com exame final (EF)
- Avaliação com exame final (AEF):
- AEF = 45% AF + 55% EF
- Para obtenção de aprovação é necessário que se verifiquem todas as seguintes condições:
- EF maior ou igual a 7,5/20
- F maior ou igual a 7,5/20
- AEF maior ou igual a 9,5/20
Conteúdo
Programa resumido
- Introdução
- Canais para comunicação fiável e segura
- 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, deteção e recuperação de intrusões
- Plataformas Blockchain
- Preservação de privacidade
- Ambientes de computação confiável e computação confidencial
Programa detalhado:
1. Introdução
- Conceitos, propriedades, atributos e métricas para sistemas confiáveis
- Modelos de falha e modelos de adversário
- Modelação e representação para sistemas distribuídos confiáveis
- Descentralização de bases de confiança
- Pilhas de software, mecanismos e serviços para sistemas confiáveis
- Descentralização, Web3 e descentralização em Blockchains
2. Canais para comunicação fiável e segura
- Comunicação ponto a ponto, multiponto e por difusão
- Técnicas criptográficas relevantes
- Protocolos e padrões de segurança para canais de comunicação
- Túneis de comunicação segura extremo-a-extremo
- Canais de difusão fiável e segura de mensagens
- Abstrações e primitivas para canais de comunicação fiável
- Estudo de casos: pilhas de protocolos e algoritmos para comunicação fiável e segura
3. Técnicas e mecanismos para sistemas distribuídos confiáveis
- Logging e checkpointing
- Recuperação de estado com técnicas rollback e rollforward
- Registos de escrita e leitura
- Quóruns
- Replicação de máquinas de estado
- Consistência e durabilidade
- Soluções com diversidade
- Aleatoriedade confiável
- Isolamento ou confinamento e ambientes de computação confiável
4. Tolerância a falhas bizantinas e tolerância a intrusões
- Quóruns e quóruns bizantinos
- Consenso. Impossibilidade FLP e técnicas de contorno do problema
- Consenso síncrono
- Consenso assíncrono
- Consenso com tolerância a falhas bizantinas
- Ataques sibilinos e sua proteção
- Concepção e estudo de implementações práticas:
- RAFT and Byzantine-RAFT; Minisec, BFT-SMaRt
- Consenso probabilístico e consenso com aleatoriedade
- Consenso com diversidade
- Estudo de casos
5. Prevenção e deteção de intrusões
- Técnicas e meios de defesa de perímetro.
- Sistemas de prevenção de intrusões
- Sistemas de deteção de intrusões
- HIDS, NIDS, HIDS, Honeypots e Honeynets
- Plataformas SIEM
- Recuperação reativa e proativa de intrusões
- Técnicas com diversidade e exemplos de aproximações
- Pilhas de software com diversidade
- Programação com versionamento (N-Versioing)
- Solução com nuvens de nuvens
- Ataques de negação de serviço (DoS, DDoS, Botnets) e contramedidas
6. Plataformas e tecnologias Blockchain
- Origens e tipologias de plataformas Blockchain e suas aplicações
- Casos de estudo: Bitcoin, Ethereum, HLF e CORDA
- Bitcoin scripts e programação com smartcontracts
- Planos de serviços e componentes numa plataforma Blockchain
- Consensos com tolerância a falhas bizantinas e soluções de consenso para Blockchains
- Métricas de desempenho em Blockchains
- Noção de finalidade e latência da finalidade
- Modelos e mecanismos de consenso: PoW, PoS, PBFT, PoET, PoH, PoB e outras soluções
- Limitações em plataformas Blockchain e desafios para soluções melhoradas de escalabilidade, operação sustentavel e desempenho
- 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 à privacidade
- Operações com dados cifrados: técnicas security-at-the-rest e criptografia homomórfica
- Criptografia pesquisável
- Criptografia funcional
- Cifras baseadas em propriedades e cifras por atributos
- Outras técnicas:
- Anonimização de dados
- Privacidade diferencial
- Ténicas de partilha de segredos
- Criptografia de limiar
- Privacidade de computações multiparticipante
- Comunicação, memória e armazenamento com esquecimento
- Fragmentação com códigos de apagamento
- Técnicas para comunicação anonimizada e privada
- Estudo de casos:
- Rede Tor e Mixnets
- Soluções de privacidade para bases de dados
- Blockchains com privacidade
8. Computação confiável e confidencial
- Hardware criptográfico, 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