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, Nuno Manuel Ribeiro Preguiça
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
- 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
- Introdução
- Conceitos e noções sobre confiabilidade em sistemas distribuídos: modelos, propriedades, tipologias de suporte e técnicas de concepção e implementação
- 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 em grupo e comunicação segura em grupo
- Comunicação e garantias de ordenação de mensagens
- 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 (sistemas HIDS, NIDS e HIDS)
- 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:
- Consenso em sistemas confiáveis: tolerância a falhas bizantinas tolerância a intrusões
- Consensus, impossibilidade FLP e abordagem de protocolos probabilísticos
- Estruturação de protocolos para consensus em sistemas assíncronos
- Replicação com sistemas de quórum bizantinos
- Consenso com tolerância a falhas bizantinas
- Plataformas Blockchain
- Tipologias de plataformas Blockchain e suas aplciações
- Planos de serviços e componentes numa plataforma Blockchain: mecanismos de suporte
- Programação com contratos inteligentes
- Modelos e provas de consensus e modelos de incentivo
- Suporte de requisitos de escala e aspetos de sustentabilidade
- Estudo de casos
- Gestão confiável de dados com preservação de privacidade
- Técnicas avançadas de criptografia aplicada para privacidade de dados e computações
- Replicação e fragmentação de dados e fragmentação segura com códigos de apagamento
- Disponibilidade e replicação com confidencialidade, autenticidade e integridade dos dados
- Operações com dados cifrados: técnicas security-at-the-rest e criptografia homomórfica
- Sistemas e soluções com criptografia pesquisável
- Casos de estudo com bases de dados SQL, repositórios NoSQL e nuvens de armazenamento
- Computação confiável
- 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 e suporte para virtualização