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

Programa resumido:
  • 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


Programa mais detalhado:
  1. 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
  2. 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
  3. 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
  4. 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
  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, Honeypots e Honeynets)
    • Recuperação de intrusões com técnicas reativas e pró-ativas
  6. 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 
  7. 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
  8. 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

Cursos

Cursos onde a unidade curricular é leccionada: