Buscar

Portfolio 5

Prévia do material em texto

RESUMO OBJETIVO DO PROBLEMA:
Depois do uso do algoritmo “força bruta”, que levou aproximadamente uma hora para quebrar a senha, foi descoberto que todas as senhas dos funcionários, pacientes e terceiros foram divulgadas por um grupo hacker, resultando na redução das ações do hospital. 
Por causa disso Horácio foi promovido à chefe de uma equipe formado por ele mesmo. Ele então resolveu criar um algoritmo para criptografar senhas e mandar para os IDs junto com uma chave para descriptografa-los. 
OBJETIVOS:
· Entender cifragem e decifragem.
· Analisar o código apresentado.
· Compreender como é feita a modularização de um código.
· Discutir sobre a segurança de dados.
TERMOS DESCONHECIDOS:
· Quad-core: É um processador que apresenta 4 núcleos; são quatro vias de comunicação independentes tornando a velocidade muito superior à de um Dual-Core8. 
· DDR3: Do inglês Doble-Data-Rate, significa taxa dupla de transferência. É, basicamente, um tipo de memória RAM, só que com uma taxa de clock mais elevado, e consequentemente, maior velocidade de transferência de dados. A DDR3 é o padrão mais recente das memórias do tipo DDR, possuem 204 contatos e podem trabalhar com um clock de até 2.800 MHz5.
· UTF – 8: É um UNICODE, que, atualmente, é a codificação de caracteres mais comum na web, que abrange qualquer sistema de escrita existente. O UTF-8 é um tipo de codificação UNICODE de byte variável, pode utilizar de 1 até 4 bytes. 1 Byte é compatível com tabela ASCII (128); 2 Bytes é suficiente para caracteres latinos, grego, hebraico, sírio, armênico, etc; 3 Bytes já incluem um plano multilingual básico (Chinês, Japonês, Coreano); e 4 Bytes abrange alguns outros caracteres como símbolos3. 
· Cifra invertida: É o sistema inverso de cifragem, no qual ao invés da pessoa criptografar a mensagem com sua chave pública, ela faz isso com sua chave privada. O que acaba gerando uma “assinatura” no sitema, pois a única pessoa que poderia ter criptografado uma mensagem uma chave própria é ela mesma6. 
· Cifra com chave: É um número que definirá como o programa realizará o trabalho, ou seja, se não houver uma chave correta, não será possível decifrar o dado. Para ter uma informação segura, é preciso cifrá-la e manter a chave em sigilo9.
· Cifragem / Decifragem: A cifragem é o processo pelo qual se oculta ou se codifica uma informação e serão utilizados uma sequência de números para protegê-la, também conhecido como criptografia. Já para descobrir a informação original, utilizamos a decifragem. Nesses processos, são utilizados uma chave e um algoritmo9.
· Teste de mesa (programação): É a execução passo a passo de um algoritmo para teste, como se ele estivesse sendo executado em um computador. Esse teste é um recurso importante na construção e aprendizado de algoritmos, ele possui algumas características, como: facilitar o entendimento do fluxo de execução, identificar erros lógicos na construção e verificar a evolução do conteúdo das variáveis10.
QUESTÕES:
1- Existe mais de um modelo de cifra, quais são as mais utilizadas?
Hipótese: Sim, existe. Cifra com chave e a cifra invertida.
Resposta: A cifragem é uma criptografia, e por conta disso ela possui algumas ramificações, entre elas estão a chave simétrica, que é onde o emissor e o receptor fazem uso da mesma chave, isto é, uma única chave é usada na codificação e na decodificação da informação; chave assimétrica, também conhecida como "chave pública", ela trabalha com duas chaves: uma denominada privada e outra denominada pública, neste método, um emissor deve criar uma chave de codificação e enviá-la ao receptor, essa é a chave pública, depois uma outra chave deve ser criada para a decodificação, que é a chave privada.
Os algoritmos mais utilizados da criptografia de chave simétrica são: DES (Data Encryption Standard – resistente a ataques de “força bruta”), o IDEA (International Data Encryption Algorithm – parecido com o DES) e o RC (Ron’s Code ou Rivest Cipher – muito usado em e-mails). Já os mais utilizados de chave assimétrica são: RSA (Rivest, Shamir and Adleman – utilizando a multiplicação de dois números primos, os multiplicados são a chave privada e o valor obtido é a chave pública) e o ElGamal (usado em assinaturas digitais)1,4.
Validação da hipótese: A hipótese apresentada durante a tutoria está errada.
2- Qual a diferença entre a codificação ASCII e o UTF – 8?
Hipótese: UTF – 8 abrange mais símbolos que o ASCII.
Resposta: Os primeiros computadores surgiram nos Estados Unidos, portanto suas configurações foram criadas em inglês; uma dessas configurações foi a tabela ASCII (Código Padrão Americano para Intercâmbio de Informações) que foi a primeira tabela utilizada em larga escala. Porém existia uma limitação para a maioria das línguas no mundo, já que essa tabela não permitia acentuação, além disso, era um código de 7 bits, e não 8. Para reverter o problema foi criada uma tabela que atendesse a todos os requisitos, de qualquer língua, essa tabela, chamada de Unicode, pode suportar em torno de um milhão de caracteres. 
A tabela Unicode possui três variações que são elas a UTF-8, UTF-16 e UTF-32. A principal diferença entre as três são suas codificações de tamanho, enquanto a primeira pode utilizar de um até quatro bytes, a segunda só utiliza dois ou quatro e a última, chamada de tamanho de bytes fixo, utiliza sempre quatro bytes2,3.
Validação da hipótese: A hipótese apresentada durante a tutoria está correta.
3- Entender como modularizar os programas em funções apropriadas.
Hipótese: Pesquisar.
Resposta: A modularização em python serve, de forma simples de dizer, para simplificar um programa que utiliza diversas funções. Isso acontece quando é necessário que um mesmo programa cadastre nome usuários, produtos, vendas etc. Para que não aconteça de o código apresentar 3.000 linhas, tornando-o muito suscetível a erro, foi criado a modularização.
A modularização é feita separando as funções de um só código e guardando em um arquivo com a extensão final .py (ex: modulo.py). Quando é feito isso o código diminui consideravelmente seu tamanho. Porém, para que as funções continuem funcionando dentro do programa será necessário usar um comando para “chamar” as funções que foram guardadas, este comando se chama import(), onde dentro do parênteses será usado o nome do arquivo (ex: import(modulo) ); e além disso é necessário, ao longo do código onde irá aparecer as funções, acrescentar o nome do arquivo seguido da função (ex: modulo.fatorial). 
Desse modo o programa fica mais curto, e se houver algum problema é mais fácil de localiza-lo nos arquivos do em milhares de linhas7. 
Figura 1: Exemplo simples de um código sem modularização.
Figura 2: Exemplo do mesmo código após ser modularizado. Note que suas funções foram guardadas em um arquivo com nome de uteis e foi utilizado o nome do arquivo antes de cada função.
Validação da Hipótese: Não foi desenvolvido uma hipótese, durante a tutoria, para ser validada.
4- Identifique, no código apresentado, se os algoritmos são de cifragem ou decifragem. 
Hipótese: Ao longo do código será apresentado os dois algoritmos. O algoritmo decifragem é o translated ; print(translated); pyperclip.copy (translated). E o cifragem é o ID.
Resposta: O algoritmo criado por Horácio é de cifragem com chave para decifragem. O estagiário pensou em criar senhas que pudessem ser criptografadas e mandadas para os usuários com uma chave para que eles descriptografem. 
Por isso no próprio programa ele cria uma uma variável mode (linha 13 do programa 2) onde ela pode assumir o código encrypt ou descrypt. Se essa variável assumir o código encrypt, o código virá com sua criptografia e mais uma chave. Se caso código vier com descrypt ele virá sem chave. 
Validação da Hipótese: A hipótese apresentada durante a tutoria está incorreta.
5- Cite um exemplo de teste de mesa.
Hipótese: Pesquisar.
Resposta: Como um teste de mesa simula a execução de um algoritmo sem utilizar o computador, geralmente ele acaba sendo feito no papel, isso tudo para testar se a lógica básicadele está certa. O teste normalmente é feito em forma de tabela, onde cada tinha pode ser um passo a ser executado e cada coluna representando uma função ou uma variável. 
Não necessariamente esta é a ordem correta de um teste, pois como o algoritmo não tem uma estrutura fixa, seus testes também não possuem uma fórmula.
Um exemplo simples de um teste de mesa seria um algoritmo para ler dois números e, a partir desses dois números, efetuar as 4 operações existentes entre eles11. 
Segue abaixo uma foto do algoritmo (a esquerda) com uma tabela ao lado (a direita) exemplificando como seria feito o teste de mesa:
Validação da hipótese: Não foi desenvolvido uma hipótese, durante a tutoria, para ser validada.
MAPA CONCEITUAL:
RESUMO CRÍTICO:
Aparentemente o problema ainda esta longe de ser resolvido, pois mesmo que as senhas possam ser conferidas por todos os ID, ainda possui o problema da divulgação dos dados feitas pelo grupo hacker. 
Neste caso, o que resta ao hospital é deixar o trabalho para a polícia, pois até mesmo Horácio, que é famoso “faz tudo” de TI do hospital não possui permissão para investigação.
REFERÊNCIAS BIBLIOGRÁFICAS:
[1] Daniela González. Conheça os tipos de criptografia digital mais utilizados: Técnicas vêm sendo criadas para promover maneiras mais seguras de comunicação digital. Disponível em < https://pcworld.com.br/idgnoticia2007-10-040383475254/ >. Acessado em: 12/11/19 às 17:35. 
[2] Diego Eis. Charsets e Encodes – Tabelas de caracteres: Entenda como funciona a tabela de caracteres e encodes no HTML. Disponível em < https://tableless.com.br/charsets-e-encodes-tabelas-de-caracteres/ >. Acessado em: 12/11/19 às 19:00. 
[3] Douglas V. Pasqua. Unicode: Os segredos da Codificação de Caracteres. Disponível em < http://www.douglaspasqua.com/slides/unicode.pdf >. Acessado em: 11/11/19 às 20:56. 
[4] Emerson Alecrim. Publicado em 12_08_2005 - Atualizado em 11_07_2009. Criptografia. Disponível em < https://www.infowester.com/criptografia.php >. Acessado em: 12/11/19 às 15:56. 
[5] Fabio Jordão. Tecmundo. O que é memória DDR? Disponível em < https://m.tecmundo.com.br/hardware/1775-o-que-e-ddr-.htm >. Acessado em: 11/11/19 às 18:54. 
[6] Guimarães, Carla. R. Criptografia para a segurança de dados. Uberlândia, dezembro, 2001. Centro Universitário do Triângulo – Unit. Disponível em < http://webcache.googleusercontent.com/search?q=cache:http://www.computacao.unitri.edu.br/downloads/monografia/79431146079328.pdf >. Acessado em: 11/11/19 às 22:43. 
[7] Gustavo Guanabara. Professor do canal Curso em Vídeo. Disponível em < https://www.youtube.com/watch?v=s3r8_Aug4y8 >. Acessado em: 13/11/19 às 21:59. 
[8] JULIO MONTEIRO, TechTudo. O que é Quad Core? Disponível em < https://www.techtudo.com.br/artigos/noticia/2012/04/o-que-e-quad-core.html>. Acessado em: 11/11/19 às 18:24. 
[9] KERDNA Produção Editorial LTDA. Criptografia. Disponível em < http://assinatura-digital.info/criptografia.html >. Acessado em: 11/11/19 às 21:13. 
[10] Okuyama,Fabio. Y; Miletto, Evandro. M; Nicolao, Mariano. Desenvolvimento de Software I - Conceitos Básicos - Série Tekne. 1. ed. Brasil: Grupo A Educação com o IFRS, 2013. 236.p. 
[11] Prof. Dr. Edson Pimentel. Centro de Matemática, Computação e Cognição. Teste de Mesa. Disponível em < https://pt.slideshare.net/henriquecarmona/aula-4-teste-de-mesa >. Acessado em: 12/11/19 às 21:38.

Continue navegando