Confiabilidade de Sistemas Distribuídos

Objectivos

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 e discutidas as partes especificas de estudo na bibliografia indicada, bem como artigos de investigação. Materias de orientação para atividades em laboratório e para suporte de trabalhos práticos de avaliação serão disponibilizados como materiais de laboratório

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 (T1 T2), com avaliação individual
    • Os testes avaliam os conhecimentos teóricos, cobrindo partes do programa com base na bibliografia e leituras sugeridas para cada teste. 
    • Foi comunicado que a partir de 19/Abril não existirão os constrangimentos atuais da situação de isolamento profilático para as atividades no ensino superior. Estando as avaliações previstas para terem datas posteriores a 19/Abril, os testes estão previstos serem realizados PRESENCIALMENTE, a não ser que exista retrocesso da situação ou nos casos de situações especificamente autorizadas
    • cada teste tem duas partes: uma parte sem consulta e uma parte com consulta em que os estudantes podem apenas utilizar informação pessoal impressa, (ou seja, não podem utilizar computadores ou outras formas de comunicação eletrónica)
  • 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 (com penalizações por incumprimento), resultados obtidos em equipa, com parte da avaliação individualizada por teste de demonstração do domínio da prática de realização do trabalho, valendo 25% da nota de cada trabalho.

Obtenção de frequência (F)

  • Calculada da seguinte forma: F = 40% (TP1) + 60% (TP2)
  • Condição de frequência individual: F >  9,5/20

Condições de aprovação com frequência (AF)

  • Cumprimento da condição de obtenção de frequência (F)
  • Cálculo da avaliação e condições para aprovação em frequência (AF):
    • AF = 20% (T1) + 30% (T2) + 50% F
    • Condiçõe: T1 > 7,5/20, T2>7,5/20 e AF >= 9,5/20

Condições de aprovação com exame de recurso (AR, ER)

  • Cumprimento da condição de obtenção de frequência (F)
  • Cálculo da avaliação e condições para aprovação em recurso (AR):
    • AR = 50% (ER) + 50% (F) 
    • É necessário obter no exame (ER) nota superior a 7,5/20 
    • É necessário que a avaliação AR seja superior a 9,5/20

Observações complementares

  • A obtenção de frequência em 2019/2020 é válida para a edição 2020/2021
  • A avaliação dos trabalhos práticos integra como referência as seguintes apreciações:
    • Concepção com refinamento/completamento de especificações, implementação e demonstração com defesa do trabalho (no caso de convocatória dos grupos para este efeito): 60%
    • Relatório/documentação/comprovações de avaliação experimental bem como de outros elementos a reportar indicados no enunciado: 15%
    • Componente de avaliação individual no grupo / teste de comprovação: 15%
    • Componente de avaliação individual entre os elementos do grupo: 10%

Conteúdo

Programa resumido:
  • Introdução
  • Canais para comunicação segura e confiável
  • Modelos, técnicas, mecanismos e serviços para Sistemas Distribuidos Confiáveis
  • Consenso em sistemas 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: 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
    • Conceitos sobre confiabilidade em sistemas distribuídos: modelos, propriedades, tipologias de suporte, 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
    • Modelação de 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 e mecanismos para Sistemas Distribuidos Confiáveis
    • Logging
    • Logging e Checkpointing
    • Recuperação com técnicas rollback
    • Recuperação com técnicas roolforward e transferência de estado
    • Modelos com replicação
    • Quorums  e quorums bizantinos
    • Protocolos com replicação de máquinas de estado
  4. Consenso em sistemas confiáveis: tolerância a falhas bizantinas e tolerância a intrusões
    • Consenso, impossibilidade FLP e abordagem de modelos, protocolos e algoritmos
    • Consenso com tolerância a falhas bizantinas
    • Estudo de casos: PAXOS, Multipaxos, RAFT, Variantes PAXOS e PBFT
    • Protocolos com criptografia e aleatoriedade
  5. Prevenção, detecção, recuperação e tolerância a intrusões
    • Sistemas de prevenção de intrusões
    • Sistemas de detecção de intrusões (HIDS, NIDS, HIDS, Honeypots/Honeynets)
    • Recuperação de intrusões: técnicas reativas e pró-ativas
    • Mecanismos, técnicas e serviços para tolerância a falhas e tolerância a intrusões
    • Técnicas e mecanismos com diversidade
  6. Plataformas Blockchain
    • Tipologias de plataformas Blockchain e suas aplicações
    • Planos de serviços e componentes numa arquitetura Blockchain
    • Programação com contratos inteligentes 
    • Modelos de provas de consenso: PoW, PoS, PoET e outros modelos
    • Suporte de requisitos de escala
    • Aspetos de sustentabilidade
    • Estudo de casos de plataformas Blockchain com modelos "permissionless" e "permissioned"
  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
      • Gestão de dados com privacidade: bases de dados SQL, repositórios NoSQL e soluções com nuvens de armazenamento
      • Comunicação com anonimização: caso da rede ToR e seus mecanismos
  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: