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 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.
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
Portuguê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
- R. Anderson, A Guide to Building Dependable Distributed Systems, Wiley, 2020
- 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.
- W. Stallings, L. Brown, Computer Security - Principles and Practice, Prent. Hall, 2014
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
Obs) Nas aulas são enquadradas as leitiras especificas para estudo na bibliografia indicada, bem como artigos complementares. Materias de orientação para atividades em laboratório e para suporte de trabalhos práticos serão disponibilizados durante as aulas
Método de ensino
As aulas e materiais estão preparados para serem leccionadas 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 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 (T1, T2)
- Os testes avaliam os conhecimentos teóricos cobrindo os tópicos do programa (de acordo com as aulas teóricas
- Dados os constrangimentos (Covid 19) os testes são feitos à distância com plataforma própria, contendo parte de questões com resposta rápida mas cronometrada e parte de questões abertas de desenvolvimento. Os testes são individuais e as questões são dispersas por um leque alargado de questões que evitam sobreposição em diferentes enunciados personalizados
- Avaliação prática e experimental
- A avaliação é composta por avaliação de trabalhos desenvolvidos em grupo (3 alunos no máximo), com base na desmonstração remota a partir da plataforma GitHub e ambientes de desenvolvimento que podem incluir o uso de ferramentas (Plataforma Jupyter/Notes, servidores dedicados em ambiente Cloud e ambientes de teste disponibilizados para uso e demonstração por parte dos alunos através de videoconferência)
- Avaliação contínua: 5 trabalhos (WA1-WA5) desenvolvidos evolutivamente nos primeiros 6 laboratórios (6 semanas)
- Avaliação final: projeto final
Condições de Aprovação e Critérios de Avaliação
As condições de obtenção de frequência bem como as condições de aprovação e critérios de avaliação estão detalhadamenet definidos na secção "Métodos de Avaliação".
Método de avaliação
Componentes de avaliação
- Dois testes de frequência presenciais (T1 T2)
- Avaliação individual de conhecimentos teóricos
- Cada teste cobrirá partes do programa com base nas aulas, materiais de aulas e bibliografia indicada.
- Cada teste tem duas partes: uma parte sem consulta e uma parte com consulta.
- Parte sem consulta: não pode ser usado qualquer elemento de consulta
- Parte com conculta: os estudantes podem utilizar informação pessoal impressa (não sendo permitido utilizar computadores ou quaisquer dispositivos computorizados ou de comunicação)
- Dois trabalhos práticos (TP1, TP2)
- Trabalhos desenvolvidos como mini-projetos, em grupos de 2 alunos
- A avaliação dos trabalhos envolve a sua realização, entrega nos prazos estabelecidos e de acordo com regras de penalizaçao estabelecidas, tendo dois componentes de avaliação:
- Componente de avaliação em grupo (que pode envolver apersentação/demonstração e discussão): 75% da nota do trabalho
- Componente de avaliação individualizada por teste de demonstração do domínio da prática de realização do trabalho: 25% da nota do trabalho.
Regras de obtenção de frequência (F)
- Calculada da seguinte forma: F = 40% (TP1) + 60% (TP2)
- Condição de frequência individual: F maior ou igual a 9,5/20
Condições de aprovação com frequência (AF)
- Cumprimento da condição de obtenção de frequência (F)
- Condições para aprovação com avaliação de frequência (AF):
- AF = 20% (T1) + 30% (T2) + 50% F
- Condições para aprovação:
- T1 e T2 maiores ou iguais a 7,5/20 e AF maior ou igual a 9,5/20
Condições de aprovação com exame de recurso (AER)
- Cumprimento da condição de obtenção de frequência (F)
- Realização de exame de recurso presencial (ER)
- Condições para aprovação com exame de recurso (AER):
- AER = 50% (ER) + 50% (F)
- Condição de aprovação: ER maior ou igual a 7,5/20 e AER maior ou igual a 9,5/20
Observações complementares
- A obtenção de frequência em 2021/2022 é válida aplicando-se as regras de avaliação desse ano letivo
- Todas as notas de compnentes de avaliação são avaliadas na escala de 0-20 valores, com arredondamento com uma casa decimal
- Todos os testes e exames são presenciais
- Discussões e demonstrações de trabalhos serão escalonadas como atividades presenciais.
Conteúdo
- Introdução
- Modelos, técnicas, mecanismos e serviços para Sistemas Distribuidos Confiáveis
- Canais para comunicação segura e confiável
- Prevenção, detecção, recuperação e tolerância a intrusões
- Tolerância a falhas bizantinas e tolerância a intrusões
- Plataformas Blockchain: planos de serviços, mecanismos e estudo de casos
- Preservação de privacidade
- Computação confiável e computação confidencial
- Introdução
- Sistemas distribuídos confiáveis: conceitos, modelos, propriedades, tipologias e técnicas de concepção e implementação.
- Propriedades, atributos e métricas de confiabilidade
- Modelos de falha e definição de modelos de adversário
- Mecanismos para sistemas distribuídos confiáveis
- Canais para comunicação segura e confiável
- Comunicação segura e fiável ponto a ponto e fim-a-fim
- Comunicação fiável por dufusão e comunicação segura em grupo
- Canais seguros com tolerância a falhas e mecanismos de segruança
- Modelação de canais para sistemas distribuídos confiáveis
- Técnicas, mecanismos e ferramentas para Sistemas Distribuidos Confiáveis
- Logging e Checkpointing
- Recuperação de estado com técnicas rollback e rollforward
- Modelos com replicação
- Quorums
- Replicação de máquinas de estado
- Consenso com tolerância a falhas bizantinas e garantias para tolerância a intrusões
- Byzntine quorums
- Consenso. Resultado de impossibilidade FLP e técnicas de contorno do problema
- Consenso com tolerância a falhas bizantinas
- Protocolos: PAXOS, Multipaxos, RAFT, Variantes PAXOS e PBFT
- Consenso probabilístico
- Consenso com aleatoriedade e diversidade
- 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, Honeypots e Honeynets)
- Recuperação de intrusões com técnicas reativas e pró-ativas
- Plataformas Blockchain
- Origens, tipologias de plataformas Blockchain e aplicações
- Planos de serviços e componentes numa plataforma Blockchain
- Programação com contratos inteligentes
- Consensos com tolerância a falhas bizantinas e soluções de consenso para blockchains
- Mecanismos: PBFT; PoW, PoS, PoET e outros modelos
- Soluções desafios para blockchains abertas ou sem permissões
- Escala
- Desempenho e consistência
- Segurança
- Equidade e sustentabilidade
- Preservação de anonimato e privacidade
- Descentralização da base de confiança
- Composicionalidade de blockchains
- Independência entre os planos de serviços de sistema e aplciações
- Aspetos de sustentabilidade e equidade
- Estudo de casos
- Preservação de privacidade
- Técnicas avançadas de criptografia aplicada para privacidade de dados e computações
- Operações com dados cifrados: técnicas security-at-the-rest e criptografia homomórfica
- Técnicas e soluções com criptografia pesquisável
- Outras técnicas: anonimização de dados e privacidade diferencial
- Ténicas para comunicação anonimizada
- Casos de estudo
- Computação Confiável e Computação confidencial
- Técnicas, mecanismos e ambientes para computação confiável
- Confiabilidade com atestação de software
- Tecnologias e ambientes de execução confiável
- Programação com ambientes de computação confiável com plataformas HW
- Estudo de casos: IntelSGX, TrustZone
- Virtualização com isolamento em Hardware
- Computação confidencial