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

Cursos

Cursos onde a unidade curricular é leccionada: