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
  • Conhecer técnicas, paradigmas e protocolos para soluções de armazenamento de dados, comunicação e processamnto de informação para sistemas distribuídos de grande escala da geração Web3
  • 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 emergentes 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 quer em software, quer e 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

Português

Pré-requisitos

Apontam-se os seguintes requisitos como aspectos a serem considerados pelos alunos que pretendam frequentar com sucesso 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: 
    • PSC: parte sem consulta (PSC) 
    • PCC: parte com consulta (PCC) 
    • For tests the use of any communication or computer device is not allowed
  • P1, P2: 2 projectos com realização e entrega obrigatória nos prazos que forem definidos
    • Projetos desenvolvidos em grupo (ref. 2 alunos/grupo)
  • CPQ: Participação nas aulas (presença ativa e respostas a questões de aula)
  • 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%)

Condições para obtenção de frequência (F):

  • Classificação da frequência (F):
    • F = 85% ( 50% P1 + 50% P2 ) + 15% (CPQ)
  • Condições de obtenção de frequência
    • F maior ou igual a 7,5 em escala de 0-20 valores
    • P1 maior ou igial a 7,5 em escala de 0-20 valores
    • P2 maior ou igial a 7,5 em escala de 0-20 valores

Obtenção de aprovação com avaliação de frequência (AF)

  • A aprovação requer as seguites condições:
    • Obtenção da frequência
    • Cálculo da avaliação com frequência (AF) :
      • AF = 50% F + 25% T1 + 25% T2 
  • Condições 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)

  • Nota de avaliação com exame final (AEF):
    • AEF = 50% AF + 50% EF
  • Para 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

=============================

AVISO MUITO IMPORTANTE

Durante uma prova de avaliação, um estudante não pode ter junto a si dispositivos electrónicos com capacidade de acesso à internet ou ligação bluetooth (e.g. smartphones, smartwatches, smartglasses, tablets, laptops, etc), ainda que desligados. A violação desta regra implica a reprovação liminar na unidade curricular por exclusão e será comunicada à Comissão Científica do respectivo Curso.

Na sequência de deliberação do Departamento de Informática (FCT/UNL), a partir de agora, em todas as Unidades Curriculares da responsabilidade do Departamento de Informática, aplicar-se-á a seguinte regra:

  • Durante uma prova de avaliação, um estudante não pode ter junto a si dispositivos electrónicos com capacidade de acesso à internet ou ligação bluetooth (e.g. smartphones, smartwatches, smartglasses, tablets, laptops, etc), ainda que desligados. 
  • A violação desta regra implica a reprovação liminar na unidade curricular por exclusão e será comunicada à Comissão Científica do respectivo Curso. 
  • É responsabilidade de cada aluno garantir que não tem junto a si um destes dispositivos, não os trazendo para a sala da prova, ou deixando-os, desligados, afastados do lugar na sala em que realizam provas de testes de frequência ou de exame, por exemplo junto ao quadro nas salas de aula em que se realizam essa provas.

==============================


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
    • Planos de serviços e componentes numa plataforma Blockchain
  • Consensos com tolerância a falhas bizantinas e soluções de consenso para Blockchains
  • Diferentes modelos e mecanismos de consenso em Blockchains: PoW, PoS, PBFT, PoET, PoH, PoB e outras soluções
  • Métricas de desempenho em Blockchains
  • Noção de finalidade e otimização de critérios de débito e latência de operações
  • Limitações em plataformas Blockchain e desafios para soluções melhoradas de escalabilidade, operação sustentavel e desempenho 
  • Arquiteturas, mecanismos e serviços para ambientes Web3
  • Suporte e programação com smart-contracts
  • 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: