UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução...

59
UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIA BACHARELADO EM SISTEMAS DE INFORMAÇÃO PAULO ROBERTO SANTOS RODRIGUES VICTOR CARVALHO BINDA INTRODUÇÃO AO USO DE BIBLIOTECAS PYTHON VOLTADAS PARA CRIPTOGRAFIA DE DADOS BELÉM 2019

Transcript of UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução...

Page 1: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIA

BACHARELADO EM SISTEMAS DE INFORMAÇÃO

PAULO ROBERTO SANTOS RODRIGUES

VICTOR CARVALHO BINDA

INTRODUÇÃO AO USO DE BIBLIOTECAS PYTHON VOLTADAS PARA

CRIPTOGRAFIA DE DADOS

BELÉM

2019

Page 2: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

PAULO ROBERTO SANTOS RODRIGUES

VICTOR CARVALHO BINDA

INTRODUÇÃO AO USO DE BIBLIOTECAS PYTHON VOLTADAS PARA

CRIPTOGRAFIA DE DADOS

TRABALHO DE CONCLUSÃO DE CURSO PARA

OBTENÇÃO DO TÍTULO DE BACHAREL EM

SISTEMAS DE INFORMAÇÃO PELA

UNIVERSIDADE FEDERAL DA AMAZÔNIA -

UFRA.

BELÉM

2019

Page 3: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

Rodrigues, Paulo Roberto Santos

Introdução ao uso de bibliotecas Python voltadas para criptografia de dados / Paulo Roberto Santos Rodrigues, Victor Carvalho Binda. - Belém, 2019.

58 f.

Trabalho de Conclusão de Curso (Bacharelado em Sistemas de Informação) – Universidade Federal Rural da Amazônia, 2019. Orientador: Dr. Licinius Dimitri

Sá de Alcantara

1. Criptografia 2. Segurança da informação 3. Python I. Título. II.

Binda, Victor Carvalho III. Alcantara, Licinius Sá de (orient.)

CDD – 005.82

Page 4: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

PAULO ROBERTO SANTOS RODRIGUES

VICTOR CARVALHO BINDA

TRABALHO DE CONCLUSÃO DE CURSO PARA

OBTENÇÃO DO TÍTULO DE BACHAREL EM

SISTEMAS DE INFORMAÇÃO PELA

UNIVERSIDADE FEDERAL DA AMAZÔNIA -

UFRA.

Orientador: Prof. Dr. Licinius Dimitri Sá de Alcantara

A banca examinadora dos Trabalhos de Conclusão, em sessão pública

realizada em _____/_____/_____, considerou os candidatos:

1) Examinadora: MSc. Decíola Fernandes de Sousa

2) Examinador: Dr. Fábio de Lima Bezerra

3) Orientador: Dr. Licinius Dimitri Sá de Alcantara

Page 5: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

AGRADECIMENTOS

Em primeiro lugar eu gostaria de agradecer a Deus por ter posto pessoas boas

em minha vida e por me guiar até aqui, com forças suficientes para que eu não desistisse em

situações difíceis. Gostaria de agradecer principalmente aos meus pais, Paulo R. Souza

Rodrigues e Maria S. dos Santos, por serem um apoio crucial durante minha vida acadêmica.

Aos meus amigos, de classe e de estágio que me proporcionaram momentos

inesquecíveis e que favoreceram o meu aprimoramento como pessoa. Aos meus queridos

supervisores de estágio, Durvalino de Souza Brito, gerente da Divisão de Patrimônio desta

universidade, e André Luiz Bizerra, gerente da Gerência de Tecnologia da Informação, da

Agência de defesa Agropecuária do Pará - ADEPARÁ, que mais que mentores e conselheiros

referente às tarefas diárias que um profissional deve encarar, se tornaram bons amigos e

puderam contribuir de diversas maneiras com este trabalho. Daniele Cardoso, minha namorada,

que esteve sendo meu suporte para transpor essa caminhada de forma mais tranquila e suave.

Ao meu parceiro deste trabalho e amigo, Victor Carvalho Binda, que esteve

próximo neste percurso desde os primeiros semestres do curso, e que somado a este trabalho,

participou de numerosos outros, também com muito empenho e dedicação. Agradeço também

a sua companheira, Naiara Bissi, que nos manteve sempre focados e atentos aos nossos deveres,

e por se doar a esta tarefa muito além do que lhe era preciso.

E por fim e não menos importante ao nosso orientador Prof. Dr. Licinius

Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e nos auxiliou a desenvolver

este trabalho pacientemente e nos guiando com o método adequado. E a todos os nossos

professores e professoras que investiram tempo e esforço para nos aperfeiçoar como

profissionais éticos e responsáveis para com a sociedade.

Paulo Roberto Santo Rodrigues

Page 6: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

Primeiramente gostaria de agradecer a Sra. Maria Dalva S. Carvalho, minha avó,

a qual dedico este trabalho e agradeço todos os dias, pelo exemplo de perseverança,

honra e dignidade, que esteve ao meu lado este tempo inteiro me dando apoio, conselhos

com todo amor do mundo.

Aos meus pais, Giselle Carvalho e Pedro Moreira, que sempre me deram

suporte e todas as condições possíveis para que este dia chegasse, investindo e

acreditando na minha educação. Aos meus familiares, Miríades Magrinelli, Roberto

Magrinelli, Paulo Carvalho, Paula Carvalho, Cindy Magrinelli, Luiggi Magrinelli,

Kamilly Carvalho e Ana Laura Carvalho. Todos vocês são parte desta vitória, sem vocês

isso jamais seria possível. A minha família de Araruna, a qual me deu incentivo a

continuar em frente, aos meus avós Ligia Binda, Sady Binda e todos tios, primos e

parentes meu muito obrigado.

A minha namorada, a pessoa que mais se dedicou a aprender sobre

criptografia nos últimos meses, Naiara Bissi, que não tenho palavras para agradecer por

todo o apoio incondicional, se não fosse por você este trabalho talvez não estivesse

assim, ouvindo nossos lamentos de cansaço em meio a rotina corrida, outros problemas,

mudanças, que resistiu a tudo junto comigo, passando incansáveis horas de leitura e

estudo, a qual ouviu todos os minhas reclamações (que não foram poucas). Obrigado

por tudo, hoje e sempre.

Aos meus amigos, que puderam me ensinar tanto, só tenho a agradecer a todos

que percorreram essa caminhada até aqui. Amanda Viveiros, Arthur Sampaio, Athos

Sampaio, Augusto Sobral, Bruno Porpino, Cassia Mendes, Dayvison Portal, Felipe

Hage, Felipe Salgado, Fernanda Porpino, Fernando Silva, Helder Bitar, Higo Cardoso,

Jamir Palheta, Karoline Dieckmann, Lanna Lacerda, Leticia Miziara, Marcos Jorge,

Nathalia Luz, Nohan Gonzales, Paulo Godinho, Pedro Cardoso, Raphael Lucena, Samir

Fraiha, Tania Raiol, Tarik Coelho, Thabata Ferreira, Tiago Maia, Yuri Silva e a toda

familia Animazon.

E por último e não menos importante as pessoas que ajudaram a realizar este

trabalho, meu amigo e companheiro de equipe Paulo Rodrigues e o nosso orientador

Licinius Alcântara, que aceitou este desafio, nos auxiliando com toda paciência para

que pudéssemos concluir de forma satisfatória as etapas. A todos os professores da

universidade que sempre nos incentivaram e nos ajudaram a buscar nosso melhor. Muito

obrigado.

Victor Carvalho Binda

Page 7: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

RESUMO

Este trabalho se propõe a realizar o estudo da história da criptografia, bem

como alguns de seus principais tipos, assim como apresentar técnicas para introdução ao uso

do software Python e algumas bibliotecas de criptografia criadas para o desenvolvimento e o

aprimoramento das ferramentas de segurança da informação. O intuito do mesmo é facilitar o

acesso ao conhecimento e a utilização aos usuários iniciantes em criptografia, reconhecer

problemáticas, bem como trazer novas perspectivas aos que já estão habituados a outras

linguagens. Exemplificaremos desde sua instalação, assim como possíveis falhas, formas de

utilização e aplicações.

Palavras chaves: criptografia; segurança da informação; python.

Page 8: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

ABSTRACT

This work proposes to perform a study of the history of cryptography,

describe some of its main types and present an introduction to techniques for using Python

software and some cryptographic libraries, created for the development and improvement of

information security tools. The purpose of this work is to facilitate the access to the knowledge

and use for beginners in cryptography, recognize problems, and to bring new perspectives for

those who are already used to other languages as well. We will exemplify from its installation,

as well as possible failures, ways of use and applications.

Keywords: cryptography; data security; Python.

Page 9: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

LISTA DE SIGLAS, SÍMBOLOS E ABREVIATURAS

AAAC

AES

ASCII

CBC

CMD

CWI

DES

EFF

FBI

FIPS

HMAC

IBM

IDE

INC

NBS

NEMA

NIST

NSA

ONG

PGP

SO

UTF-8

XOR

Associação Americana de Avanços da Ciência

Advanced Encryption Standard

American Standard Code for Information Interchange

Cipher-block chaining

Command Prompt

Centrum Wiskunde & Informatica

Data Encryption Standard

Eletronic Frontier Foundation

Federal Bureau of Investigation

Federal Information Processing Standard

Hash-based Message Authentication Code

International Business Machines

Integrated Development Environment

Instituto Nacional de Criminalística

National Bureau of Standards

NEue MAschine (“New Machine”)

National Institute of Standards and Technology

National Security Agency

Organização Não Governamental

Pretty Good Privacy

Sistema Operacional (“Operating System”)

8-bit Unicode Transformation Format

Exclusive Or

Page 10: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

LISTA DE FIGURAS

Figura 1. Dados de interesse por cada linguagem de programação de 2014 a 2018. ..............

Figura 2. Dados das buscas pelo período de 2014 a 2018 por cada linguagem (...). ............

Figura 3. Mapeamento global de buscas por linguagens de programação de 2014 a 2018.

Figura 4. Gráfico de crescimento das principais linguagens de programação. .....................

Figura 5. Texto apresentado ao final dos chats iniciados no aplicativo de mensagens (...).

Figura 6. Cifrar (ou codificar) significa transformar uma informação comum em (...). .......

Figura 7. Exemplo da cifra de César, também conhecida como cifra de troca (...). .............

Figura 8. Exemplo da cifra de Bacon e sua representação binária. .......................................

Figura 9. Comparativo dos resultados das somas dos números binários. .............................

Figura 10. Relação entre letras e símbolos do código Braille. ..............................................

Figura 11. Alfabeto Morse. ...................................................................................................

Figura 12. Uma das máquinas Enigma. .................................................................................

Figura 13. Esquema de funcionamento da máquina Enigma. ...............................................

Figura 14. Esquema de funcionamento da estrutura do algoritmo DES. ...............................

Figura 15. Sistema de substituição da cifra de feistel. ...........................................................

Figura 16. Demonstração dos bits de distribuição dentro das S-Boxes. ...............................

Figura 17. Exemplificação de uma sequência de agrupamento de bits de uma S-Box. ........

Figura 18. Matriz de 16 bits (4X4), padrão do processo de encriptação AES. .....................

Figura 19. Demonstração da tabela verdade do XOR. ..........................................................

Figura 20. Demonstração do processo de aplicação do XOR nas matrizes de entrada (...).

Figura 21. Processo de mixagem para se gerar novas chaves a partir da chave inicial (...).

Figura 22. Exemplificação do processo de aplicação do XOR na última coluna. ................

Figura 23. xOR da primeira coluna da chave anterior com a última coluna da chave atual.

Figura 24. Processo de Confusão - S-Box para substituição dos dados da matriz. ...............

Figura 25. Processo de difusão em “empurrar” os bits para fazer a mistura de bits da (...).

Figura 26. Exemplo do layout do TrueCrypt. ........................................................................

Figura 27. Instalação da biblioteca Cryptography em Windows. ..........................................

Figura 28. Erro para atualização do pip. ...............................................................................

Figura 29. Sucesso ao atualizar o pip. ...................................................................................

Figura 30. Erro ao instalar o PyCrypto no Windows. ...........................................................

Figura 31. Atualização do pip por meio do cmd. ..................................................................

13

14

14

15

16

16

18

19

19

20

21

22

23

27

28

28

29

34

35

35

35

36

36

37

37

39

42

42

42

42

43

Page 11: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

Figura 32. Instalação do cryptodome em Windows. .............................................................

Figura 33. Janela da área de configurações de instalação. ...................................................

Figura 34. Janela de instalação nova ou reutilizada. ............................................................

Figura 35. Área inicial do PyCharm. ....................................................................................

Figura 36. Tela de criação de novo projeto. .........................................................................

Figura 37. Tela para nomeação de um novo projeto. ...........................................................

Figura 38. Tela do local de pacotes instalados no momento. ...............................................

Figura 39. Tela de instalação de pacotes e suas versões. ......................................................

Figura 40. Aviso de instalação bem sucedida. ......................................................................

43

44

45

45

46

46

47

47

48

Page 12: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

LISTA DE TABELAS

Tabela 1. Escalonamento de possibilidades por bits. .............................................................

Tabela 2. Demonstração de uma estrutura de um código Fernet. ...........................................

Tabela 3. Resultados obtidos do código Fernet. ....................................................................

Tabela 4. Código gerado por PyCrypto por meio do PyCharm em plataforma Linux. ..........

40

49

50

52

Page 13: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

SUMÁRIO

1. METODOLOGIA ..................................................................................................

2. OBJETIVO .............................................................................................................

3. CRIPTOGRAFIA ..................................................................................................

3.1. Criptografia e seu contexto histórico ................................................................

3.1.1. Criptografia Manual ...............................................................................

3.1.2. Criptografia por Máquina .......................................................................

3.1.3. Criptografia por Software .......................................................................

3.1.3.1. Data Encryption Standard (DES) ...............................................

3.1.3.1.1. Análise do Algoritmo .....................................................

3.1.3.2. Advanced Encryption Standard (AES) .......................................

3.1.3.2.1. Análise do Algoritmo .....................................................

3.1.3.2.2. Aplicações ......................................................................

4. PYTHON CRYPTOGRAPHY ..............................................................................

4.1. História ..............................................................................................................

4.2. Instalação ...........................................................................................................

4.2.1. Instalação Via CMD ...............................................................................

4.2.2. Instalação Via PyCharm .........................................................................

4.3. Exemplo de Criptografia Utilizada pelo Python Cryptography .........................

4.4. Exemplo de Criptografia Utilizada pelo Python PyCrypto ...............................

5. CONSIDERAÇÕES FINAIS .................................................................................

6. REFERÊNCIAS .....................................................................................................

12

13

16

17

18

21

25

25

27

32

35

39

41

41

41

42

44

48

51

54

55

Page 14: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

INTRODUÇÃO

A todo momento são desenvolvidas ferramentas que visam a proteção no

mundo digital. Em contrapartida, são criados métodos que contornam essas medidas de

segurança. Essa rotina se faz presente desde tempos remotos - onde a cítala grega era usada

para transferir mensagens em uma cinta que precisava ser enrolada em um bastão de

determinada espessura para ser escrita e depois ser decifrada pelo destinatário através de outro

bastão de mesma espessura1 -, até os dias de hoje - onde o incrível poder de um computador

quântico, tecnologia ainda nos seus primeiros passos, coloca em risco de quebra todos os

mecanismos criptográficos mais atuais.2 “Para a criptografia de chave pública, os danos

causados por computadores quânticos serão catastróficos.”2 (CHEN; Lily, 2017. Encontro

anual da AAAC - Associação Americana de Avanços da Ciência.).3

Embora a humanidade já tenha experimentado diversas metodologias de

segurança aplicadas nos mais diversos âmbitos da vida, com o advento da internet torna-se cada

vez mais uma tarefa crucial manter informações em um ambiente controlado e seguro. O

usuário comum - consumidor final destes serviços - está frequentemente exposto a ataques

cibernéticos, exigindo uma resposta rápida de sistemas de segurança. A Gartner, Inc., empresa

de consultoria fundada em 1979 por Gideon Gartner, previu que em 2017 mais de 8,4 bilhões

dos mais diversos tipos de dispositivos estariam conectados e em uso ao mesmo tempo por todo

o mundo e afirma que estes números chegarão a 20,4 bilhões em 2020.4

Dessa forma, o trabalho pretende contribuir no aprimoramento do

conhecimento dos usuários iniciantes em criptografia de dados, auxiliando no desenvolvimento

e na implementação de novas aplicações com foco na linguagem de programação Python,

utilizando sua biblioteca para encriptação: Python Cryptography e PyCrypto.

1 ALVARENGA, Luiz Gonzaga de. Criptografia Clássica e Moderna. p. 17 2 Microsoft News Center Brasil. O futuro é quântico: Microsoft libera preview gratuito do Kit de Desenvolvimento

Quântico. 2017. Disponível em: <https://news.microsoft.com/pt-br/o-futuro-e-quantico-microsoft-libera-preview-

gratuito-kit-de-desenvolvimento-quantico/>. Acesso em: 29 de janeiro de 2019. 3 VAMOSI, Robert. Artigo. Mind The Gap - How Quantum Computers May Leave Today's Online Services

Vulnerable. 2018. Disponível em: <https://www.forbes.com/sites/robertvamosi/2018/02/27/mind-the-gap-how-

quantum-computers-may-leave-todays-online-services-vulnerable/#4574e35852ce>. Acesso em: novembro,

2018. 4 PWC. Uncovering the potential of the Internet of Things. 2017. Disponível em: <

https://www.pwc.com/gx/en/issues/assets/pwc-GSISS-2017-uncovering-the-potential-of-iot.pdf>. Acesso em:

novembro, 2018.

Page 15: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

12

1. METODOLOGIA

O papel deste trabalho de pesquisa é ser um ponto de partida para

pesquisadores da área de criptografia, tendo em vista a escassez de material específico de

linguagem acessível sobre o assunto em nosso idioma e de forma ampla. Com este objetivo,

desenvolvemos uma pesquisa descritiva que poderá ser vista como um manual básico de

criptografia, no qual será possível encontrar sua história, a descrição de tipos de algoritmos,

aplicações e exemplos na linguagem de programação.

Buscaremos compreender de forma qualitativa a evolução da criptografia, as

motivações de sua criação e desenvolvimento ao longo do progresso humano e tecnológico e,

assim, trazer este conhecimento para o usuário contemporâneo de forma simplificada. Para tal,

realizamos uma análise bibliográfica aprofundada sobre os tópicos que seriam abordados, de

forma a selecionar os fatos relevantes e entrar em um consenso sobre os fundamentos históricos

apresentados.

Paralelamente, buscamos a exploração do tema a partir do conteúdo

disponível nos mais diversos sites, sendo eles em forma de vídeos didáticos, artigos acadêmicos

e até mesmo explicações realizadas por meio de artes e desenhos em quadrinhos. Abordaremos

o assunto de forma prática, aplicando os conceitos estudados em testes-exemplos realizados no

python - objeto de estudo por ser uma das linguagens de programação mais promissoras do

momento.

Os principais autores que serviram como referência para este trabalho foram:

Bruce Schneier, Claude Shannon, Joan Daermen, Vicent Rijrmen e Viktoria Ktokz.

Page 16: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

13

2. OBJETIVO

Este trabalho se deu origem ao perceber a formação de uma mudança em

relação a muitos alunos dos cursos de Bacharelado em Sistemas de Informação e Licenciatura

em Computação na Universidade Federal Rural da Amazônia estarem optando por Python ao

invés do tradicional Java, que é lecionado e utilizado como parte das avaliações semestrais.

Embora Python não fosse parte obrigatória das disciplinas, quando era permitido, os discentes

a utilizavam por considerarem de mais simples entendimento e desenvolvimento em suas

atividades, o que é uma verdade, visto que Python é utilizada para iniciar crianças e jovens à

prática da programação.

Ademais, não é à toa que de acordo com o Google Trends (fevereiro de 2014

- janeiro de 2019), no Brasil nos últimos anos as buscas pela linguagem de programação Java

vêm decaindo, conforme mostra a Figura 1, e relativamente se equiparam às pesquisas de outras

linguagens, como Python, PHP, JavaScript e C, naturalmente estas são as linguagens de

programação mais requisitadas no mercado.5

Figura 1: Dados de interesse por cada linguagem de programação de 2014 a 2018. Fonte: Google

Trends.

Em contrapartida as pesquisas em âmbito global, apresentam um

crescimento maior nas buscas por Python em países tecnologicamente desenvolvidos.6

5 DEVMIDIA. .Artigo Top 10 linguagens de programação mais usadas no mercado. Disponível em: I

<https://www.devmedia.com.br/top-10-linguagens-de-programacao-mais-usadas-no-mercado/39635> . Acesso

em: 29 de janeiro de 2019. 6 KUHNEN, Matheus. Top10 linguagens de programação mais usadas no mercado. 2018. Disponível em:

<https://www.devmedia.com.br/top-10-linguagens-de-programacao-mais-usadas-no-mercado/39635>. Acesso

em: 30 de janeiro de 2019.

Page 17: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

14

Figura 2: Dados das buscas pelo período de 2014 a 2018 por cada linguagem de programação. Fonte:

Google Trends.

Figura 3: Mapeamento global das buscas por linguagens de programação realizadas no Google entre

2014 a 2018. Fonte: Google Trends.

Em 2017 o Stack Overflow7 realizou uma pesquisa em países considerados

ricos de acordo o Banco Mundial, essa pesquisa consiste em medir a tendência em que tais

países visitam diferentes conjuntos de tecnologias em relação ao resto do mundo. Python se

destaca pelo seu crescimento em país de alta renda, esta percepção é mais evidente do que em

pesquisas realizadas em outros rankings que mensuram e consideram o desenvolvimento de

software.

7 ROBSON, David. The Incredible Growth of Python. Disponível em:

<https://stackoverflow.blog/2017/09/06/incredible-growth-python/>. Acesso em: 30 de janeiro de 2019.

Page 18: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

15

O estudo inicia discorrendo sobre dados de visualizações em Python no final

de 2011 e, no período de 2011 a 2017, podemos perceber a evolução da linguagem Python em

relação a outras cinco principais linguagens de programação. O gráfico da Figura 4 possui seis

das dez buscas mais visitadas no Stack Overflow em países de alta renda.

Figura 4: Gráfico de crescimento das principais linguagens de programação. Fonte: Medium.

Disponível em: < https://stackoverflow.blog/2017/09/06/incredible-growth-python/>. Acesso em: 28 de janeiro

de 2019.

Page 19: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

16

3. CRIPTOGRAFIA

A criptografia nada mais é que um conjunto de princípios e técnicas

utilizadas para cifrar uma determinada escrita, tornando-a ininteligível para terceiros que não

tenham acesso e, assim, criando um meio de comunicação segura.8 “Cripto” vem da palavra

grega kryptos, significando “oculto; secreto; obscuro” e “grafia”, por sua vez, vem da palavra

grega graphein, que significa “escrever”. Criptografia, portanto, significa etimologicamente:

escrita escondida; escrita oculta.9

Sendo pouco conhecida e até mesmo erroneamente confundida com práticas

espíritas como a psicografia, poucos se dão conta de como a criptografia está extremamente

presente e vinculada ao funcionamento prático da vida moderna, protegendo nossas

informações e mantendo em sigilo dados confidenciais. Discretamente presente desde

mensagens de aplicativos de mensagens privadas até senhas de cartões de crédito, QR Codes,

transações bancárias ou de criptomoedas, telefones celulares, computadores, (…), a criptografia

é uma peça fundamental para assegurar segredo, autenticidade e garantir privacidade aos

usuários.

Figura 5: Texto apresentado ao final dos chats iniciados no aplicativo de mensagens instantâneas para

smartphones conhecido como Whatsapp, tendo um bilhão usuários ativos por dia espalhados por todo o mundo.10

Fonte: acervo próprio.

Qualquer informação pode ser criptografada - seja ela escrita, áudio ou

imagem. Resumidamente, códigos protegem informações, substituindo-as por códigos pré-

8 MORENO, E.; PEREIRA, F.; CHIARAMONTE, R. Criptografia em Software e Hardware. Novatec Editora,

2005, p. 21. 9 Dicio, Dicionário Online de Português. Disponível em: <https://www.dicio.com.br/criptografia/>. Acesso em:

novembro de 2018. 10 G1, Globo. WhatsApp atinge marca de 1 bilhão de usuários ativos por dia. Disponível em:

<https://g1.globo.com/tecnologia/noticia/whatsapp-atinge-marca-de-1-bilhao-de-usuarios-ativos-por-dia.ghtml>.

Acesso em: novembro de 2018.

Page 20: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

17

definidos os quais somente o remetente e o destinatário deverão possuir a chave de acesso para

a descriptografar.

Figura 6: Cifrar (ou codificar) significa transformar uma informação comum em um texto secreto.

Decodificar, por sua vez, é a operação inversa: transformar o texto secreto cifrado de volta à informação original.

Fonte: acervo próprio.

Devido à este caráter sigiloso e enigmático, até recentemente a criptografia

e a criptoanálise eram consideradas uma arte - dominada somente por gênios da matemática ou

especialistas da área de informática. Foi somente à cerca de vinte anos que o estudo de ambas

ganhou o nome de criptologia e passou a ser considerada uma ciência.11

3.1. Criptografia e seu contexto histórico

A criptologia como ciência está apenas saindo da adolescência e, por esse

exato motivo, é comum se pensar que a criptografia é algo recente. Todavia, esta prática é

provavelmente tão antiga quanto a própria escrita, se fazendo presente desde o sistema de

escrita hieroglífica dos egípcios. Segundo Kahn (1967)12 - um dos papas da história da

comunicação secreta -, a primeira referência de escrita criptográfica data de 1900 a.C., da vila

egípcia Menet Khufu, próxima ao rio Nilo, onde o escriba responsável por registrar as

informações das construções realizadas pelo arquiteto Khnumhotep II para o faraó Amenemhet

II decidiu substituir - por sigilo ou talvez apenas por estética - palavras e trechos de seus textos

por hieróglifos distintos dos usuais, de forma que somente quem possuísse este conhecimento

poderia compreender as mensagens. “Caso o documento fosse roubado, o ladrão não

11 TKOTZ, Viktoria. Criptografia. Segredos Embalados para Viagem. Novatec Editora, 2003, p. 16. 12 MORENO, E.; PEREIRA, F.; CHIARAMONTE, R. Criptografia em Software e Hardware. Novatec Editora,

2005, p. 22.

Page 21: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

18

encontraria o caminho que o levaria ao tesouro e morreria de fome perdido nas catacumbas da

pirâmide.” (MORENO; PEREIRA; CHIARAMONTE, 2005).

Mesmo que os hieróglifos não tenham sido usados propriamente como forma

de esconder segredos, essa substituição de símbolos pode ser considerada o primeiro contato

com a criptografia conhecido na história - tendo o tempo sido responsável pelo esquecimento e

ocultação dos significados. Muitos anos depois, foi por meio da criptoanálise do francês

Champollion que estes hieróglifos puderam ser desvendados.

Os hieróglifos surgem como um tipo de criptografia feita manualmente, por

substituição, evoluindo a partir daí para métodos cada vez mais complexos. BORGES (2005)13

divide a história da criptografia em três fases distintas: a criptografia manual, a criptografia por

máquinas e a criptografia em rede.

3.1.1. Criptografia Manual

A criptografia manual abrange todos os métodos anteriores à Segunda

Guerra Mundial. Estas técnicas se caracterizam por utilizar lápis e papel e podem ser decifradas

da mesma forma, tendo caído em desuso com o advento dos computadores por se tornarem

extremamente fáceis de desvendar. O primeiro registro que se tem da criptografia manual data

de impressionantes 1500 a.C., na Mesopotâmia. Escrita com caracteres cuneiformes (feitas a

partir de objetos em formato de cunha) num pequeno tablete de argila, esta cifra contém a

primeira fórmula conhecida pelo homem, contendo explicações de como fabricar esmalte para

louças.

O exemplo mais comum desse tipo de criptografia data de 50 a.C., quando

Júlio César usou a cifra de substituição com o objetivo de proteger e assegurar o sigilo

comunicações governamentais. Para realizar sua cifra César alterou letras do alfabeto as

substituindo pela terceira letra que viria após a letra escolhida. Dessa forma, A se tornaria D,

que se tornaria H, que se tornaria L e assim por diante. Como reforço, também substituía as

letras latinas por gregas. Este método, criado na antiguidade e descrito pelo escritor romano

Suetônio, ainda é utilizado até hoje, como em sistemas como o ROT13.14

13 BORGES, Waldizar. Criptografia. Universidade Católica de Brasília, 2014, p. 6. 14 ROT 13. Disponível em: <http://www.dantas.com/rot13/> Acesso em: 29 de novembro de 2018.

Page 22: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

19

Figura 7: Exemplo da cifra de César, também conhecida como cifra de troca, código de César ou troca de

César. Fonte: Wikiwand <http://www.wikiwand.com/pt/Cifra_de_C%C3%A9sar>.

Nos dias atuais, o código de César se refere a qualquer cifra em que cada

letra da mensagem original é substituída por um outra através da deslocação de um número fixo

qualquer de posições. Levando em conta que o alfabeto romano possui 26 letras, há 26

possibilidades de códigos de César - os quais uma simples criptoanálise estatística será capaz

de decifrar.

Outro exemplo bastante conhecido entre as cifras manuais é a cifra de Bacon,

criada em meados do século XVI. O filósofo, escritor, político inglês, considerado o fundador

da ciência moderna, Francis Bacon, criou seu sistema de substituição utilizando um sistema

binário. Diferentemente de César, utilizou um alfabeto de 24 letras, atribuindo para cada um

grupo de 5 caracteres compostos somente pelas letras “a” e “b”. Como os grupos são formados

por 5 letras e cada caractere possui duas possibilidades (a ou b), pode-se gerar 25grupos,

representando 32 letras distintas. Uma outra forma de escrever a cifra de Bacon é associando

as letra a “0” e “1”:

Figura 8: Exemplo da cifra de Bacon e sua representação binária. Fonte: BORGES, Waldizar. Criptografia.

Universidade Católica de Brasília, 2014, p. 3.

Page 23: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

20

No nosso sistema de numeração, temos os números de 0 a 9. Quando

passamos desse valor, 9+1, colocamos o 1 na frente seguido por um 0, reiniciando o processo.

No sistema binário, no entanto, utilizamos somente 0 e 1, de forma que para somar 1 + 1

colocamos 1 e 0, ficando com 10. Seguindo o mesmo pensamento, 3 será 10 + 1 = 11, enquanto

4 será 11+1 = 100. Dessa forma:

Figura 9: Comparativo dos resultados das somas dos números binários. Fonte: CAMPOS, Alexandre. Cifra

de Bacon, 2012. Disponível em: <http://www.alexandrecampos.com/2012/03/cifra-de-bacon.html>. Acesso em:

19 de dezembro de 2018.

Como este código pode vir a se tornar de fácil dedução por ser bastante

perceptível como código, pode-se utilizar outros padrões em conjunto para o tornar mais

complexo, como a associação de letras maiúsculas e minúsculas, ou alternância entre negrito e

itálico.

Outro exemplo de criptografia manual, bastante presente ainda nos dias

atuais, é o código de Braille, criado por Louis Braille (1809-1852) em seus 15 anos. Este código

se trata de um sistema de símbolos onde cada caractere é formado por uma matriz de 6 pontos

táteis posicionados de formas distintas. Existem diversos dispositivos para este tipo de escrita,

como teclados especiais, uso de voz artificial, máquinas de escrever, etc.

Page 24: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

21

Figura 10: Relação entre letras e símbolos do código Braille. Fonte: BORGES, Waldizar. Criptografia.

Universidade Católica de Brasília, 2014, p. 4.

3.1.2. Criptografia por Máquinas

A criptografia por máquina por sua vez surge durante o período da Segunda

Guerra Mundial, correspondendo a todos os sistemas que se utilizam de um operador de

máquinas que, por meio de uma tabela, pode enviar mensagens criptografadas para pessoas

distantes.

O mais conhecido destes códigos é, sem dúvidas, o código Morse, criado por

Samuel Morse (1791-1872) em 183515. Para a criação deste código, originalmente, Morse

propôs realizar a enumeração de todas as palavras da língua de forma que estes números

pudessem ser transmitidos através de um telégrafo16 para um determinado receptor, que as

decifraria se utilizando de um enorme dicionário.

Posteriormente, o código foi definido como conjuntos de pontos e traços que

teriam como significado cada uma das letras do alfabeto. Estes pontos e traços poderiam ser

transmitidos por meio de escrita, sons ou até mesmo sinais luminosos. Utilizando-se do

telégrafo, uma espécie de lápis de ferro movido por uma bobina marcava instantaneamente os

sinais recebidos em um papel por meio de sons curtos (os chamados “DIT”) e longos (os

chamados “DAH”), sendo os "DAH" três vezes mais longos que os sons curtos. Considerando-

se a média de pausas geradas pela formação do código, através desse método é possível

transmitir dez palavras por minuto.

15 TodaMatéria, O que é Código Morse? Disponível em: <https://www.todamateria.com.br/o-que-e-codigo-

morse/>. Acesso em: 04 de janeiro de 2018. 16 Dispositivo que utiliza correntes elétricas para controlar eletroímãs que atuam na emissão e na recepção de

sinais. Morse Code & the Telegraph. Disponível em: <https://www.history.com/topics/inventions/telegraph>

Page 25: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

22

Figura 11: Alfabeto Morse. Fonte: TodaMatéria, O que é Código Morse? Disponível em:

<https://www.todamateria.com.br/o-que-e-codigo-morse/>. Acesso em: 04 de janeiro de 2018.

Para a marcação da passagem de letras tempos precisos eram utilizados: uma

pausa curta equivalente a três “DIT”. Enquanto isso, uma pausa maior, equivalente a sete

“DIT”, serviria para sinalizar a finalização da palavra. O Código Morse teve sua versão final

definida em 1851, se tornando então a primeira forma de se comunicar a distância em tempo

real, revolucionando as comunicações marítimas e terrestres e trazendo para a criptologia um

novo desafio: a comunicação secreta em rede aberta.

Com o início da Segunda Guerra Mundial, o desafio da criptografia se tornou

ainda maior, uma vez que o desenvolvimento de tecnologias para fins militares se tornou peça

fundamental. Armamentos especiais, aviões, submarinos, dispositivos de comunicação e

transmissão como rádios e radares. Todos estes dispositivos viriam a requerir um sistema

cifrante que garantisse o sigilo das informações compartilhadas. Dessa forma, máquinas

produtoras de códigos combinatórios passaram a ser criadas, equipadas com rotores

criptográficos - e dentre as mais famosas e significativas delas estão as máquinas Enigma - um

teclado conectado a uma unidade codificadora -, incorporadas às forças alemãs nos anos 20.17

O primeiro modelo da máquina Enigma foi desenvolvida em 1915 pelo

holandês Hugo Alexander Koch, tendo sido patenteada três anos depois por Arthur Scherbius,

empresário alemão que a comercializou para bancos, empresas e, em 1926, após muitas

melhorias, para a própria marinha alemã. O exército veio a se interessar em 1928 e as forças

aéreas somente em 1935.18

17 Brasil Escola, Máquina Enigma. Disponível em: <https://brasilescola.uol.com.br/historiag/maquina-

enigma.htm> Acesso em: 05 de janeiro de 2019. 18 ELLIS, Claire. Exploring the Enigma. Disponível em

<http://plus.maths.org/content/os/issue34/features/ellis/index>. Acesso em: 05 de janeiro de 2019

Page 26: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

23

Figura 12: Uma das máquinas Enigma. Fonte: REUVERS, Paul; SIMONS, Marc. Enigma Cipher Machine (em

inglês). Disponível em <http://www.cryptomuseum.com/crypto/enigma/>. Acesso em: 05 de janeiro de 2019.

O segredo da máquina Enigma estava em seus rotores. Possuindo 5 opções

destes discos rotativos equipados com 26 possibilidades de letras cada, o operador deve escolher

três e os instalar cada um na máquina em uma das suas possíveis 26 posições. Após cada tecla

digitada da mensagem no teclado QWERTY, um rotor seria utilizado e mudaria uma posição

passando para o próximo. Ao passar uma vez por cada rotor, o Enigma refletiria a ordem,

voltando entre os rotores, de forma que o sinal de cada letra passaria duas vezes por cada rotor.

Esse sistema por si só garantia que cada letra possuísse um alfabeto distinto de substituição e,

com três rotores, 26 x 26 x 26 = 17567 possibilidades de posições iniciais ou “chaves”. No

entanto, além dos rotores, o Enigma ainda permitia que letras fossem trocadas através de 6

cabos que poderiam ser conectados a um painel de plugues, o que resultaria no final em 10

quintilhões de possibilidades de combinações. Após este processo ser finalizado, a letra

criptografada resultante apareceria acesa em um painel luminoso.

Page 27: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

24

Figura 13: Esquema de funcionamento da máquina Enigma. Fonte: STILL, Albert. Understanding the Enigma

machine with 30 lines of Ruby. Star of the 2014 film ‘The Imitation Game’ (em inglês). Disponível em:

<https://blog.red-badger.com/2015/02/23/understanding-the-enigma-machine-with-30-lines-of-ruby-star-of-the-

2014-film-the-imitation-game>. Acesso em: 05 de janeiro de 2019.

Estima-se que cerca de 100.000 máquinas Enigma tenham sido produzidas,

sofrendo sucessivos refinamentos e reparos objetivando manter seu caráter sigiloso devido às

constantes tentativas de desvendar seu funcionamento. Em 1939 uma operação foi criada por

poloneses e britânicos reunindo os mais diversos perfis (matemáticos, codebreakers, campeões

de xadrez, especialistas em palavras cruzadas, …) para conseguir realizar esta façanha19.

Ficando conhecida como “Projeto Ultra”, foi um de seus integrantes, o matemático inglês Alan

Turing, o principal responsável pela criação da calculadora eletromecânica Bomb, que tornou

possível a decifração dos códigos da Enigma. Turing posteriormente utilizou a própria Bomb

como inspiração para criar o primeiro computador - batizado de “Colossus” - se tornando,

assim, o pai da computação.

Após o final da Segunda Guerra, as máquinas Enigma se tornaram base para

a criação de muitas outras máquinas de criptografia, como o NEMA suíço, o KL7-ADONIS

americano e o M-125 russo, caindo, assim em desuso. Com o advento da computação e,

principalmente, o surgimento da internet, a criptografia ganhou nova relevância, sendo

aprofundada ainda mais.

19 DAVIES, Norman. A Europa em Guerra (1939-1945). Lisboa: Edições 70, 2008. pg. 55

Page 28: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

25

3.1.3. Criptografia por Software

Até princípios do século XX, os sistemas clássicos de criptografia foram

profusa e efetivamente utilizados em diversos setores da vida cotidiana. No entanto, com os

avanços tecnológicos, a demanda por proteção e sigilo foi se tornando cada dia maior. Senhas

de bancos, comércio eletrônico, e-mails… A segurança da informação nunca foi tão essencial.

Dessa forma, interessados em suprir esta necessidade, empresas passaram a desenvolver

projetos em busca de algoritmos criptográficos eficientes.

3.1.3.1. Data Encryption Standard (DES)

Em 1972, após concluir um estudo formal sobre as necessidades de

segurança do governo norte-americano, a NBS (National Bureau of Standards), atualmente

chamada de NIST (National Institute of Standards and Technology) - órgão de padrões do

governo americano - solicitou uma proposta de algoritmo que atendesse à seus critérios

rigorosos. Após uma segunda solicitação subsequente, Horst Feistel, um funcionário alemão da

IBM (International Business Machines, em Nova Iorque) enviou um algoritmo desenvolvido

com sua equipe que foi finalmente aceito: o algoritmo Lucifer.20

Lucifer foi originalmente criado em 1971. Feistel a princípio o nomeou

Dataseal. A IBM, no entanto, passou a usar o termo "Demonstration Cipher" para se referir a

ele, o que o fez ganhar o apelido de "Demon" - demônio, em inglês. Por esse mesmo motivo, o

nome definitivo foi modificado para Lucifer que, de acordo com Feistel, mantinha o "atmosfera

diabólica" do apelido. DSD-1, cifra de Feistel e rede de Feistel também foram outros nomes

pelos quais ficou conhecido.21

Sendo considerado a primeira cifra de relevância na história dos softwares

de segurança da informação, Lucifer se tratava de uma estrutura simétrica usada na construção

de cifras em blocos: suas operações de cifragem e decifragem eram muito semelhantes - até

mesmo idênticas em alguns casos -, de forma que apenas tinham como requisito a utilização

das mesmas chaves na ordem inversa (criptografia simétrica).

Chegando a ser utilizado pelo Lloyds Bank of London, segundo maior banco

do Reino Unido, e pela NSA (National Security Agency), agência de segurança nacional dos

20 SCHNEIER, Bruce. Applied Cryptography, Protocols, Algorithms, and Source Code in C. Segunda Edição.

John Wiley and Sons, New York (1996) p. 257 21 BAUER, Craig P. Secret History: The Story of Cryptology. Boca Raton, FL: CRC Press, 2013. p. 360.

Page 29: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

26

Estados Unidos e uma das precursoras de pesquisa no campo da criptografia, a cifra de Feistel

sofreu diversas melhorias e modificações, chegando ao padrão de 64 bits de leitura, com a

aplicação de uma chave com 56 bits à mensagem. Este novo algoritmo foi denominado como

DES (Data Encryption Standard). Esta versão foi aprovada pelo governo como padrão em

novembro de 1976, sendo publicada no Diário Oficial do Governo Federal dos Estados Unidos

da América como FIPS padrão FIPS PUB22 46 em 15 de julho 1977.

Sendo considerada a cifra de bloco mais popular da história, o DES foi

massivamente utilizada durante mais de 20 anos. Apesar de mostrar sinais de envelhecimento,

o algoritmo teve grande relevância para a história da segurança da informação, tendo uma

geração inteira passado anos de suas vidas analisando e buscando formas de o quebrar. Nas

palavras de Bruce Schneier (1996)23: “O DES fez mais pelo campo da criptoanálise do que

qualquer outro. Agora há um algoritmo para estudar.” Isto se deu em grande parte pela

autorização da IBM para a publicação gratuita do algoritmo em domínios públicos - o que não

impediu que dinheiro fosse feito por outras empresas que se apropriaram do sistema,

implementando-o.

Para melhor compreendermos o DES, faz-se necessário a análise de sua

estrutura, que é formada por um um algoritmo simétrico (ou seja, que usa a mesma chave tanto

para encriptação quanto para desencriptação) composto pela junção de dois blocos (conjunto

de dígitos da chave) da criptografia - técnicas conhecidas como substituição e permutação. Na

verdade, todas as técnicas criptográficas convencionais são derivadas deste mesmo sistema,

sendo substituição o nome dado ao processo no qual há a troca simples de um dos dígitos ou

de um bloco de dígitos por outros e a permutação o nome dado à troca da posição dos blocos

em pares ordenados ou processos de arranjo.

Também se faz necessário conhecer duas técnicas de informações ocultas

derivadas dos conceitos de Claude Shannon24 em sua teoria de informação secreta (que

objetivava frustrar a criptoanálise estatística), publicadas em 1949: a confusão e a difusão. Na

confusão, parte da informação é modificada, de forma que os bits de saída não possuem relação

óbvia com os bits de entrada. Já na difusão, tenta-se propagar os efeitos de um bit de texto

simples para outros bits no texto cifrado. O elemento mais comum para alcançar a confusão é

a substituição; já o elemento mais comum de difusão simples é a permutação de bits.

22 Publicação oficial na Federal Information Processing Standards. 23 SCHNEIER, Bruce. Applied Cryptography, Protocols, Algorithms, and Source Code in C. Segunda Edição.

John Wiley and Sons, New York (1996) p. 267 24 SHANNON, Claude. Communication theory of secrecy systems. Bell Systems Technical Journal 28 (1949),

pg. 656 a 715.

Page 30: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

27

Resumidamente, as substituições são as responsáveis por promover a confusão; enquanto as

permutações - também chamadas de transposições -, promovem a difusão.25

De acordo com SALEVANE e GADIS (2001)26, a estrutura de

funcionamento do algoritmo DES pode ser dividida em três partes: permutação inicial,

cifragens com operações de chave e permutação final. A permutação inicial e a permutação

final se tratam de processos de transposição de blocos de entrada, sendo a leitura executada da

esquerda para a direita. Por sua vez, a cifragem com operações de chave é executada havendo

16 repetições da mesma operação. O bloco de entrada e a chave são divididos em duas metades

de tamanhos iguais, sendo então executada a permutação, a transformação e a expansão de

chave. Após cada bloco executado, uma chave nova é gerada. Por sua vez, a desencriptação

poderá ser executada no mesmo algoritmo de entrada - apenas alterando para a ordem inversa

da operação. “Mesmo não sendo uma técnica criptográfica, as chaves são de extrema eficiência

no ato de barrar a quebra do arquivo cifrado. As chaves são agregadas ao código, buscando

manter a mesma distribuição de freqüência encontrada das letras dentro do texto.” SALEVANE

e GADIS (2001).

3.1.3.1.1. Análise do Algoritmo

A encriptação do DES é formada pelo conjunto de cifras em blocos de 64

bits. O processo depende de uma chave contendo 56 bits com o adicional de 8 bits de paridade

para verificação de autenticidade, sendo assim todo 8º bit é um bit de paridade e, por isso, são

removidos na primeira permutação com seleção ou permutação de chave - ou seja, os bits das

posições 8, 16, 24, 32, 40, 48, 56 e 64 não são usados. A eficiência do DES é obtida mediante

o uso destas técnicas de forma repetida e intercalada até um total de 16 ciclos, como pode-se

observar na imagem abaixo:

25 TIMOFIECSYK, Sabrina. Criptografia. Disponível em:

<http://www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=1384> Acesso em: 10 de janeiro de

2019. 26 SALEVANE, Leandro; GADIS, Vinícius. Um Estudo Comparativo entre algoritmos de criptografia DES –

Lucifer (1977) e AES – Rijndael (2000). Universidade Luterana do Brasil, 2001.

Page 31: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

28

Figura 14: Esquema de funcionamento da estrutura do algoritmo DES. Fonte: Acervo próprio.

Uma das propriedades do DES no qual o código de 64 bits logo na primeira

permutação quando assume que são 32 bits, ou seja, a quantidade de bits originalmente será

dividida originando uma nova ordem de separação L0 (Left 0 - em português Esquerda 0) e R0

(Rigth 0 - em português Direita 0) além uma chave K. Assim como na Cifra de Feistel, esta

propriedade também é utilizada nos algoritmos Blowfish, RC5, Twofish, 3DES, dentre outros.

No DES ainda há uma troca no final, chamada “SWAP” onde consiste em voltar a ordem correta

dos bits, caracterizados anteriormente por L0 e R0 para Li e Ri para então efetuar sua permutação

final e ter como saída o texto criptografado.

Page 32: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

29

Figura 15: Sistema de substituição da cifra de feistel. Disponível em:

<http://www.ic.unicamp.br/~rdahab/cursos/mo421-mc889/2014-1s/Welcome_files/SlidesPaarPelzl-Portugues-

pdfs/ch03-DES-slides-pt.pdf > Acesso em: 16 de janeiro de 2019

As S-Boxes (Caixas S - caixas de substituição) seriam as substituições no

DES. São existentes em 8 tabelas nas quais temos blocos de 6 bits de entrada e 4 bits de saída,

sendo o primeiro e o último bit tomados como se fossem um número de 2 bits, formando assim

as linhas das tabelas das caixas S. Os bits 2 a 5 agrupados formam um vetor de 0 a 15.

Figura 16: Demonstração dos bits de distribuição dentro das S-Boxes. Fonte: acervo próprio.

Temos então uma matriz 4 x 16 onde a primeira linha é formada por números

hexadecimais que são representados por 4 bits que estão posicionados no meio dos 4 bits de

entrada e a primeira coluna é formada por números decimais que possam ser representados em

2 bits que estão nas extremidades para complemento dos 6 bits de entrada.

Page 33: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

30

Figura 17: Exemplificação de uma sequência de agrupamento de bits de uma S-Box. Fonte:

<http://www.ic.unicamp.br/~rdahab/cursos/mo421-mc889/2014-1s/Welcome_files/SlidesPaarPelzl-Portugues-

pdfs/ch03-DES-slides-pt.pdf > Acesso: 17 de janeiro de 2019.

Apesar de complexo, o DES é um algoritmo bastante repetitivo, o que é

favorável para sua implementação em chips de propósito único (mecanismos com somente uma

função). Todavia, o algoritmo possui fraquezas conhecidas - que não necessariamente limitam

sua efetividade de uso. Durante anos, diversos estudos sobre segurança foram realizados para

descobrir tais fraquezas. De forma a tornar possível reconhecer suas falhas.

Durante a década de 80, os cientistas Eli Biham e Adi Shamir foram

responsáveis pela publicação de alguns desses estudos. O método mais utilizado até então para

descriptografia era o brute force. Todavia, sabendo-se que a chave do DES contém 56 bits, com

8 bits de paridade, nos deparamos com um total de 2⁵⁶ chaves possíveis, o que significa

aproximadamente 72 quatrilhões de possibilidades. Sendo o poder computacional da época

incompatível com a quantidade de dados a serem verificados, Biham e Shamir buscaram um

método de quebra que fosse mais eficiente. Outro estudo de relevância foi o método de chaves

de Diffie-Hellman27, realizado pelos cientistas Whitfield Diffie e Martin Hellman, que também

se tornaram responsáveis por reforçar o desenvolvimento da criptoanálise diferencial,

permitindo a averiguação e constituição de uma lista de chaves que foram classificadas como

“fracas” ou “pseudo-fracas”.

Após realizarem diversos estudos de comparação de textos cifrados em pares

de “texto original” e “texto cifrado” - conhecidos como criptoanálise diferencial -, Biham e

Shamir coletaram dois textos originais aleatoriamente e realizaram diversas simulações para

que pudessem encontrar requisitos ou padrões na decodificação. Mediante isso, puderam

constatar que a estrutura dos “textos originais” tinham alta probabilidade de se mostrar

semelhantes aos pares de “textos cifrados”, formando um padrão ao longo da criptoanálise. A

27 KOCHER, Paul C., Timing Attacks on Implement at ions of Diffie-Hellman, RSA, DSS, and Other Systems.

Stanford, CA 94309, USA. 1996.

Page 34: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

31

análise estatística se mostrava eficaz na maioria dos casos verificados, além de ser eficaz contra

códigos semelhantes ao DES e também contra os que usavam as S-Boxes no código.

Com a rápida evolução da criptoanálise e aumento do poder computacional,

na década de 90, o algoritmo DES foi se tornando obsoleto, o que botou em risco a segurança

de quem o utilizava. Da mesma forma, a relação de confiabilidade de empresas como a IBM e

NSA foi posta em questionamento, tendo sido até mesmo acusadas de terem gerado um

backdoor28. Por conseguinte, objetivando a proteção dos usuários do DES, o código foi

considerado por todos como carente de modificações e atualizações. Pelo tamanho de sua

popularidade, uma nova onda de testes de análise criptográfica foram exaustivamente feitos por

estudantes e especialistas, buscando constatar a real credibilidade do algoritmo.

A gota d’água para o fim da credibilidade do DES se deu quando este foi

facilmente quebrado pela máquina da Electronic Frontier Foundation (EFF), a EFF DES

Cracker, que violou a segurança proposta pela RSA Laboratory no DES Challenge II, em um

desafio que oferecia um prêmio de US$ 10.000 ao vencedor. Não tão somente quebrar, mas a

EFF DES Cracker conseguiu violar o segredo em apenas três dias, enquanto o último bem

sucedido havia conseguido em custosos 39 dias se utilizando de uma rede composta por

milhares de computadores. O prêmio não custeou a empreitada da E F Foundation - seu projeto

custou cerca de US$ 250.000 -, mas o dinheiro não era o objetivo da ONG.

A iniciativa de desenvolver o projeto da DES Cracker surgiu como uma

forma de afrontar à alegação do governo americano de que os governos não poderiam

descriptografar quaisquer mensagens sob a proteção do DES e, caso conseguissem, não seria

sem altíssimos custos e meses para o fazer. "A EFF provou o que tem sido discutido por

cientistas há vinte anos, que o DES pode ser quebrado rapidamente e de forma barata.”29,

afirmou J. Gilmore, co-fundador e gerente do projeto, em uma de suas entrevistas para a

imprensa.

O objetivo era simples: revelar ao público que o DES não era mais tão

seguro quanto o governo afirmava, em vista de que se uma ONG pode violar tal segurança,

qualquer um poderia fazer o mesmo. Por meio disso, criou-se uma consciência comum da

responsabilidade de não se comprar produtos que prometem a verdadeira privacidade, como o

DES. Também se refutou de uma vez por todas para a comunidade acadêmica a ideia pregada

28 Método de acesso a sistemas (software, plataformas, dispositivos etc.) não documentado, podendo ser usado

de forma legítima ou ilegítima por fabricantes para obter admissões. 29 Press Release. EFF DES Cracker Machine brings honesty to crypto debate. Disponível em:

<ttps://www.eff.org/press/releases/eff-des-cracker-machine-brings-honesty-crypto-debate> Acesso em: 17 de

janeiro de 2019.

Page 35: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

32

pelo governo de que era impossível criar mecanismos como o EFF DES Cracker de forma

simples, com baixo custo e alta eficiência.

Apesar de tudo isso, o DES durou mais do que o previsto. Seu prazo

presumido de utilização era de até metade dos anos 80. Todavia, em 1983 o algoritmo foi

reafirmado como padrão, sendo revisado em 1988 e aprovado pelo governo americano como

FIPS-46-1. Em 1993 foi publicado novamente na FIPS-46-2 e, pela última vez, em 1999 como

FIPS-46-3 - ficando também conhecida como “Triple DES” ou “3DES”.30

3.1.3.2. Advanced Encryption Standard (AES)

Em janeiro de 1997, o NIST (National Institute of Standards and

Technology), percebendo que o tempo de utilização do DES e suas variações estava em seu

limite, chegou à conclusão que, a partir daquele momento, havia surgido a necessidade da

criação de um novo algoritmo que tivesse as qualidades necessárias para se tornar o novo padrão

FIPS, trazendo melhor segurança e otimização sem a utilização de padrões antigos como o

3DES. Dessa forma, criaram um concurso público que fomentasse a elaboração de um novo

algoritmo que viria a ser chamado de AES.

Os preparativos para a escolha desse novo algoritmo foram iniciados pouco

mais de seis meses depois - tempo suficiente para a convocação dos participantes e da

comunidade criptográfica. O NIST, no entanto, não realizaria nenhum dos testes, fossem eles

testes de ataque ou criptoanálise diferencial: esta responsabilidade seria da própria comunidade,

sendo esta a mais capaz de medir sua própria segurança e qualidade.

Com a convocação oficial dos candidatos os pré-requisitos foram

estabelecidos: os algoritmos deveriam ser melhor otimizados do que o seu antecessor (o DES)

e suas variações, podendo ser implementados em softwares e hardwares simétricos com suporte

a blocos de 128 bits e chaves de 128, 192 e 256 bits. Além disso, todos os algoritmos submetidos

deveriam ter consentimento para serem divulgados publicamente, livres de direitos autorais.

No ano seguinte, entre os dias 20 e 22 de agosto de 1998, os organizadores

selecionaram 15 algoritmos dentre os concorrentes. Foram eles (em ordem alfabética): CAST-

256, CRYPTON, DEAL, DFC, E2, FROG, HPC, LOKI97, MAGENTA, MARS, RC6,

Rijndael, SAFER+, Serpent e Twofish. Todos passaram por uma seleção prévia onde foram

30 DATA ENCRYPTION STANDARD (DES). Dados disponíveis em:

<https://csrc.nist.gov/CSRC/media/Publications/fips/46/3/archive/1999-10-25/documents/fips46-3.pdf>.

Page 36: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

33

classificados por sua segurança, eficiência computacional, adequação aos hardwares,

adequação aos softwares e por sua simplicidade. Como poucos competidores apresentaram

design teórico de falhas de seus algoritmos, não foi possível determinar quais seriam suas

possíveis fraquezas, o que os levou a realização de novos testes de eficiência dos algoritmos

em diferentes plataformas.

Uma segunda reunião de seleção foi realizada em março de 1999, em Roma

- fato curioso, uma vez que uma cidade européia foi escolhida pelo governo americano para

sediar uma discussão de escolha de um padrão de segurança americano. A cidade foi escolhida

para combinar a data da conferência com o evento anual do “Software Encryption Workshop”,

facilitando o acesso do público alvo: especialistas para os testes.

Levando também em conta os resultados obtidos na primeira reunião,

algumas conclusões importantes foram definidas. Os algoritmos DEAL, FROG, HPC, LOKI97

e Magenta não ofereciam os requisitos de segurança. Da mesma forma, o DEAL, o FROG, o

Magenta, o SAFER + e o Serpent foram considerados lentos. Nos testes de microcontroladores

de 8 bits e smart cards, o algoritmo Rijndael teve uma notória vantagem sobre os outros

algoritmos, se mostrando o mais adequado para esse tipo de plataforma. O Serpent, apesar do

desempenho baixo nos testes de velocidade, compensou devido a sua alta performance de

segurança. O CAST-256 tinha um custo elevado quando comparado aos demais. O Crypton foi

comparado ao Rijndael e Twofish mas nitidamente possuía uma segurança inferior. O DFC foi

classificado como de baixa segurança e baixo desempenho em processadores de 64bits. E, por

fim, o E2 foi comparado ao Rijndael e ao Twofish em estrutura, mas obteve baixo rendimento

em segurança, além de seu alto custo de implementação. Dentre os 15 algoritmos analisados,

foram selecionados apenas 5 para passarem para a próxima etapa. Foram eles: MARS, RC6,

Rijndael, Serpent e Twofish.

A terceira conferência se daria em abril de 2000, na cidade de Nova York.

No entanto, pouco tempo depois da segunda reunião, com as avaliações cada vez mais críticas

sendo efetuados pela comunidade criptográfica, iniciou-se o processo de ajustes e testes de

desempenho no qual a NSA foi uma das principais responsáveis pelos resultados de simulações

relevantes obtidos. No âmbito de ataques não houveram grandes avanços. Notavelmente, os

códigos ali apresentados eram extremamente complexos e procuraram ao máximo não se expor

à falhas, fazendo com que a confiabilidade de qualquer um fosse aceita rapidamente. Dessa

forma, a comunidade voltou seu foco para a realização de testes de desempenho, implementação

e custos.

Page 37: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

34

Os primeiros resultados obtidos foram favoráveis ao Serpent, ganhando este

o elogio de “performance excelente” em jornais e revistas especializadas da época. O Rijndael

e o Twofish também se saíram bem, conquistando elogios quanto à sua adequação à

implementação em hardware. Já o RC6 e o MARS acabaram caindo no conceito devido ao seu

custo de implementação.

No dia 2 de outubro de 2000, após todos os testes, deliberações, respostas às

críticas e a coleta de todas as informações possíveis, o NIST finalmente anunciou o grande

vencedor: o algoritmo Rijndael, escolhido por sua alta performance e por sua facilidade de

implementação, que eram os principais objetivos naquele momento. No relatório final, o NIST

declara que a comunidade foi motivada por sua segurança, consistência em sua implementação

por ter uma boa performance tanto em software quanto em hardware, pelo tempo de

configuração da chave, agilidade e também pelo fato de que nas demonstrações dos ataques não

obtiveram grandes mudanças de desempenho, mostrando uma significativa economia de

memória ao sistema.

Dessa forma, o Rijndael se tornou o padrão FIPS PUB 197 - o eleito “AES”.

Desenvolvido pelos pesquisadores Vincent Rijmen e Joan Daemen - sendo o nome do código

a junção do início de seus sobrenomes -, sua utilização começou em 26 de maio de 2002 com a

assinatura do Secretário de Comércio Donald L. Evans, que oficializava e permitia seu uso. Em

julho de 2005 o algoritmo obteve sua primeira aprovação na norma ISO/IEC 18033-331, sendo

reafirmada em 2016 pelos padrões adotados. Alguns outros algoritmos também são aprovadas

por esta mesma ISO. São eles o: TDEA, MISTY1, CAST-128 e HIGHT, de 64 bits; e o AES,

Camellia e SEED, de 128 bits.

31ISO/IEC 18033-3:2005. Information technology -- Security techniques -- Encryption algorithms -- Part 3: Block

ciphers. Disponível em: <https://www.iso.org/standard/37972.htm> Acesso em: 24 de janeiro de 2019.

Page 38: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

35

3.1.3.2.1. Análise do Algoritmo

O algoritmo AES inicia seu processo de encriptação carregando os dados

inseridos em uma matriz 4x4 (ou seja, de 16 bits) - matriz característica de todos os processos

deste algoritmo.

Figura 18: Matriz de 16 bits (4X4), padrão do processo de encriptação AES. Fonte: Acervo próprio.

Para a primeira rodada da encriptação, o AES aplicará o processo conhecido

como XOR (Exclusive Or32) em cada byte de entrada correspondente ao byte da primeira rodada

da matriz 4x4 da chave gerada. O XOR se trata de um processo lógico de comparação de bytes

que filtra o processo por artifício de uma tabela “verdade”, na qual o resultado somente será

positivo se os bytes forem ímpares. Seu uso é indicado por ser uma forma barata e eficiente de

acelerar o processo de encriptação, diminuindo seu tempo significativamente. Isto se dá por

utilizar um mínimo do hardware e poder ser feito como um processo paralelo, já que nenhum

bit desnecessário será carregado.

Figura 19: Demonstração da tabela verdade do XOR. Fonte: Acervo próprio.

32 Chamado de “Ou exclusivo” em português.

Page 39: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

36

Figura 20: Demonstração do processo de aplicação do XOR nas matrizes de entrada e da chave. Fonte: Acervo

próprio.

Pelo seu design simples e repetitivo, o AES necessitará de diversas chaves

ao longo de seu processo de criptografia. Estas serão geradas a partir derivação da chave inicial

mediante um método simples de mixagem: pega-se a última coluna da chave da rodada anterior

e move-se o bit do topo para o final. Cada bit será então passado por procedimento uma caixa

de substituição que o mapeará em um bit diferente.

Figura 21: Processo de mixagem para se gerar novas chaves a partir da chave inicial: primeiro move-se o

primeiro bit e, após, passa-se cada um por um box de substituição. Fonte: Acervo próprio.

Logo após, esta coluna passará por um processo de XOR com uma “rodada

constante” que será diferente em cada rodada.

Page 40: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

37

Figura 22: Exemplificação do processo de aplicação do XOR na última coluna. Fonte: Acervo próprio.

Por fim, esta coluna será passada pelo processo de XOR conjuntamente com

a primeira coluna da chave da rodada anterior de forma a gerar uma completamente nova

primeira coluna.

Figura 23: XOR da primeira coluna da chave anterior com a última coluna da chave atual. Fonte: Acervo

próprio.

As demais colunas passam por um processo mais simplificado uma vez que

apenas serão passadas pelo processo de XOR com a mesma coluna da chave da rodada anterior.

Posteriormente, dá-se início as rodadas intermediárias, sendo “rodada” chamada cada série de

passos que serão repetidos n vezes, sendo esta quantidade definida de acordo com o tamanho

da chave: 10 vezes para chaves de 128 bits; 12 vezes para chaves de 192 bits; 14 vezes para

chaves de 256 bits. A margem mínima de segurança do algoritmo foi definida como sendo 10

repetições uma vez que conseguiram criar um atalho para cifras geradas com apenas 6 rodadas.

Na próxima etapa da criptografia do AES serão aplicados as técnicas de

confusão e difusão, já explanados anteriormente. Primeiramente será gerada a confusão por

recurso do uso de uma caixa de substituição (S-Box) que irá mapear cada bit em um bit

Page 41: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

38

diferente, de forma a nublar a relação entre eles. Em seguida, aplicar-se-á a confusão mediante

a troca da posição das linhas da esquerda com as linhas da direita.

Figura 24: Processo de Confusão - S-Box para substituição dos dados da matriz. Fonte: Acervo próprio.

Figura 25: Processo de difusão em “empurrar” os bits para fazer a mistura de bits da matriz.

Fonte: Acervo próprio.

Posteriormente, há uma mistura dos bits de cada coluna e, ao final de cada

uma destas rodadas, ainda será aplicada uma nova rodada de chave após as passar pelo processo

de XOR. Na rodada final da encriptação pelo AES, será pulado o passo em que se mistura os

bits das colunas, uma vez que isto não aumentaria a segurança (não haveria próxima rodada

para proveito da difusão gerada), apenas desacelerando o processo. Apesar de ter uma estrutura

simples, o AES garante sua segurança mediante acúmulo de confusões e difusões gerados

através da repetição de todas estas rodadas explicadas anteriormente - de forma que, quantas

mais, melhor. Para descriptografar, deve-se “apenas” fazer o caminho reverso.

Page 42: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

39

3.1.3.2.2. Aplicação

Um dos exemplos mais interessante da aplicação prática da criptografia AES

pode observado no contexto da Operação Satiagraha, em 2008 - operação cujo nome foi dado

como referência ao termo Satyagraha33, usado por Mahatma Gandhi em suas campanhas pela

independência do Estado indiano.

Satiagraha foi uma operação realizada pela Polícia Federal contra a

corrupção, focada em expor desvios de verba pública e lavagens de dinheiro. Iniciada em 2004,

culminou com a prisão de diversas figuras importantes no cenário nacional, como empresários,

diretores de bancos, investidores e políticos - e, dentre eles, esteve Daniel Dantas, empresário

e membro de uma das mais tradicionais famílias da Bahia.

Dantas foi preso em junho de 2008 com 6 discos rígidos e um computador

portátil, somando um potencial de armazenamento de 2,08 terabytes cujos dados poderiam

provar seu envolvimento em esquemas de corrupção. Todavia, estavam criptografadas pelo

AES 256 bits, um dos mais sofisticados no mercado até então.

Após meses de tentativas de quebrar o código, o INC (Instituto Nacional de

Criminalística) pediu, em 2009, ajuda para o FBI (Federal Bureau of Investigation) unidade do

Departamento de Justiça dos Estados Unidos responsável pelo serviço de inteligência do país.

Em junho de 2010 os aparelhos foram devolvidos ao Brasil, sem sucesso na decodificação. Uma

vez que o governo brasileiro não possuía nenhum tipo de argumento jurídico para obrigar

Dantas a ceder acesso ao código, o banqueiro foi solto e liberado de sua pena de 10 anos. O

banqueiro desde então declarou, por meio de sua assessoria, que foi alvo de armações e

espionagens, e que o Satiagraha foi feito apenas para atender a interesses privados.34

Os programas utilizados para esta inquebrável criptografia foram o PGP e o

Truecrypt, disponível gratuitamente. Bastante conhecido e relevantes na comunidade de

segurança da informação, o TrueCrypt foi desenvolvido em 2004 e se tratava de uma plataforma

de criptografia on-the-fly (em tempo real) capaz de criptografar discos rígidos inteiros, partições

ou discos virtuais.

33 Satyagraha é um termo hindi (सत्याग्रह) composto por duas palavras: satya, que significa “verdade”; e graha, que

significa “firmeza”. Traduz-se como “o caminho da verdade”, se tratando de uma filosofia de não-agressão, de

não-violência. Disponível em: <https://pt.wikipedia.org/wiki/Satyagraha>. Acesso em: 27 de janeiro de 2019. 34 G1. Nem FBI consegue decifrar arquivos de Daniel Dantas, diz jornal. Disponível em:

<http://g1.globo.com/politica/noticia/2010/06/nem-fbi-consegue-decifrar-arquivos-de-daniel-dantas-diz-jornal.ht

ml>. Acesso em: 27 de janeiro de 2019.

Page 43: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

40

Figura 26: Exemplo do layout do TrueCrypt. Fonte: <https://www.lifewire.com/truecrypt-review-2619179>.

Acesso em: 27 de janeiro de 2019.

No auge de sua fama35, não existiam formas de o violar sem o uso de brute

force. Dependendo do número de bits utilizados, suas combinações se tornam incrivelmente

grandes - o suficiente para qualquer uma das melhores máquinas do mundo passassem meses

na tentativa de encontrar a chave de criptografia.

TABELA 1:: Tabela de demonstração do escalonamento de possibilidades por bits. Fonte: acervo próprio.

35 EDSTRÖM, Björn. TrueCrypt Explained. 2008. Disponível em: <http://blog.bjrn.se/2008/01/truecrypt-

explained.html>. Acesso em: 30 de janeiro de 2019.

Tamanho da

Key

Combinações

possíveis

Tamanho da

Key

Combinações

possíveis

1 bit 2 56 bits (DES 7.2 x 1016

2 bits 4 64 bits 1.8 x 1019

4 bits 16 128 bits (AES) 3.4 x 1038

8 bits 256 192 bits (AES) 6.2 x 1057

16 bis 65536 256 bits (AES) 1.1 x 1077

32 bits 4.2 x 109

Page 44: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

41

4. PYTHON CRYPTOGRAPHY

4.1. História

Foi durante seu período de estadia no CWI (Centrum Wiskunde &

Informatica), Guido Von Rossum, que ao fim dos anos 80 trabalhava no desenvolvimento da

extinta linguagem ABC. Com o encerramento do projeto, ele foi remanejado para trabalhar no

sistema operacional distribuído, Amoeba. A busca por uma linguagem de nível superior

esbarrou na necessidade da criação de utilitários de administração, porém estava tomando muito

tempo desenvolvê-los em C e sua alternativa, em Bourne Shell, não funcionaria por diversos

motivos. O principal detalhe é que as operações primitivas do Amoeba se diferenciavam muito

das operações primitivas do Shell Bourne, por serem mais refinadas, então o Python foi criado

como uma ferramenta para ser um elo de conexão entre o C e o Shell Bourne.

Tendo algum reconhecimento, o Python deu seus primeiros passos e em 1989 já havia

sido desenvolvida por Guido uma versão minimamente funcional e no ano seguinte já era mais

utilizado no CWI que a própria ABC.

4.2. Instalação

Para download do Python Cryptography é necessário o interpretador python,

que pode ser adquirido gratuitamente no site “https://www.python.org”. Quando dentro desta,

deve-se selecionar a opção “downloads” que abrirá uma página contendo a opção “Download

Windows x86-64 executable installer”.

A versão baixada tem em torno de 25.5MB, possuindo o nome de “python-

3.7.1.exe”. Durante a instalação, a única alteração necessária foi assinalar a opção de “add

python 3.7 to PATH” depois a opção “Install Now”.

Page 45: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

42

4.2.1. Instalação Via CMD

A instalação do módulo do Python Cryptography pode ser efetuada também

pelo prompt de comando (CMD) por meio da instrução “pip install”, com a qual se torna

possível baixar e automaticamente instalar várias bibliotecas e ferramentas para o Python de

forma simplificada. A seguir, apresentaremos um tutorial base para a instalação.

Para dar início, deve-se abrir o prompt de comando (CMD) como

administrador e digitar inserir o comando “pip install cryptography” e o “pip install

pycryptodome”36, assim como demonstrado na imagem abaixo:

Figura 27: Instalação da biblioteca Cryptography em windows. Fonte: acervo próprio.

Em busca de uma alternativa para instalação, encontramos o PyCrypto, ainda

sim tentamos correr com a instalação normalmente pela função “pip install pycrypto” mas pela

quantidade de erros não foi possível como mostrado abaixo.

Durante o processo, acabaram ocorrendo erros de instalação:

Figura 28:Erro para atualização do pip. Fonte: acervo próprio.

python -m pip install --upgrade pip

36 Pypi. Pip install cryptography. Disponível em: <https://pypi.org/project/cryptography>. Acesso em: 30 de

janeiro de 2019.

Page 46: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

43

Figura 29: Sucesso ao atualizar o pip. Fonte: acervo próprio

Tentamos instalar o PyCrypto por meio do comando “pip install pycrypto”:

Figura 30: Erro ao instalar o Pycrypto no windows. Fonte: acervo próprio.

No site Nitratine37 (2018), é mencionado que é necessária uma versão do

Microsoft Visual C++ para a instalação:

Como o Python não vem com nada que possa criptografar arquivos,

precisaremos usar um módulo de terceiros. O PyCrypto é bastante popular,

mas como ele não oferece ferramentas incorporadas, se você não tiver o

Microsoft Visual C ++ Build Tools instalado, será solicitado a instalá-lo. Em

vez de instalar ferramentas extras apenas para seu funcionamento, eu estarei

usando o módulo Cryptography”, por este motivo acabamos deixando de usar

o PyCrypto em nossas análises iniciais.

Instalação da biblioteca cryptodome em alternativa a utilização da pycrypto

por recurso do sistema operacional windows por meio do comando “pip install pycryptodome”.

37 NITRATINE. Encryption and Decryption in Phyton. 2018. Disponível em:

<https://nitratine.net/blog/post/encryption-and-decryption-in-python/>. Acesso em: novembro de 2018.

Page 47: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

44

Figura 31: Atualização do pip por meio do cmd. Fonte: acervo próprio

Figura 32: Instalação do cryptodome em windows. Fonte: acervo próprio

4.2.2. Instalação Via PyCharm

Uma IDE (Integrated Development Environment ou Ambiente de

Desenvolvimento Integrado) é uma programa de computador que sua função consiste na

integração de diversas ferramentas de desenvolvimento de software, como editores de texto,

compiladores, depuradores, modeladores, que antes trabalhavam de forma isolada.

No navegador pesquise por Pycharm, então acesse o link que vá ao endereço

jetbrains.com, ao clicar em Download será carregada a página onde estarão as opções

Profissional, que contém algumas funcionalidades a mais e é uma versão paga, e a Community

que é a voltada a comunidade educacional e científica. Escolha esta última.

Crie um atalho de acordo com a arquitetura de seu SO, perceba que usaremos

64 bit. Em Create Associations, selecione esta caixa para que ele reconheça estas extensões de

arquivos.

Page 48: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

45

Figura 33: Janela da área de configurações de instalação. Fonte: Acervo Próprio.

Figura 34: Janela de instalação nova ou reutilizada. Fonte: Acervo Próprio.

Após reiniciar, ao iniciar o PyCharm, pedirá que escolha uma pasta para

utilizar as configurações anteriores, como estamos partindo da premissa que é um primeiro

contato, esta será a primeira instalação, marque a segunda opção e prossiga com a instalação.

Page 49: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

46

Figura 35: Área inicial do Pycharm. Fonte: Acervo próprio.

Esta é área inicial do Pycharm a partir de um novo projeto (“New Project”).

Na aba arquivo (“File”) crie um novo projeto em “New Project”. Ele deverá encontrar o

interpretador previamente instalado, utilizamos o Python 3. Escolha um local de

armazenamento e dê nome ao projeto, clique no botão “Create”.

Figura 36: Tela de criação de novo projeto. Fonte: Acervo próprio.

Clique com o botão direito do mouse no nome dado ao seu projeto e surgirão

opções, vá em “New” e escolha “Python File”.

Page 50: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

47

Figura 37: Tela para nomeação de um novo projeto. Fonte: Acervo próprio.

Nomeie seu arquivo Python. Para instalar o Interpretador: na aba “Files”, vá

em “Settings”, encontre Project: ‘nome do projeto’, “Project Interpreter”. Aqui você encontrará

uma listagem contendo os interpretadores instalados e usados no seu projeto, assim como seus

pacotes:

Figura 38: Tela do local de pacotes instalados no momento. Fonte: Acervo próprio.

À direita no ícone “+” você irá adicionar o pacote contendo o Cryptography,

digitando seu nome na pesquisa. Note que existem vários pacotes disponíveis.

Page 51: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

48

Figura 39: Tela de instalação de pacotes e suas versões. Fonte: Acervo próprio.

Clique em Install Package e aguarde a confirmação de instalação.

Figura 40: Aviso de instalação bem sucedida. Fonte: Acervo próprio.

4.3. Exemplo de Criptografia Usando Python Cryptography

Para entendermos o funcionamento da biblioteca do Python Cryptography

precisamos compreender como este funciona na prática. Faremos isso por intermédio da análise

do código abaixo, criado com o intuito de demonstrar uma operação simples de criptografia por

meio do Fernet. Se trata de uma implementação de criptografia simétrica autenticada que utiliza

AES em modo CBC com uma chave de 128 bits. Ele utiliza preenchimento PLCS7 e HMAC,

usando SHA256 para autenticação e o os_urandom para gerar valores38. Para simplificar a

explicação do código, o mesmo foi dividido em 7 etapas, conforme mostrado na Tabela 1:

38 Cryptography. Fernet (symmetric encryption). Disponível em: <https://cryptography.io/en/latest/fernet/>.

Acesso em: 27 de janeiro de 2019.

Page 52: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

49

Etapa Criptografia por meio do Fernet

1

2

3

4

5

6

7

from cryptography.fernet import Fernet

key = Fernet.generate_key()

print (key)

token = Fernet(key)

print (token)

plaintext = input("Insira sua senha: ")

print (plaintext)

bytetext = plaintext.encode()

print (bytetext)

encrypt = token.encrypt(bytetext)

print (encrypt)

decrypt = token.decrypt(encrypt)

print (decrypt)

TABELA 2: Demonstração da estrutura de um código Fernet.

Fonte: acervo próprio.

Resultado da Criptografia por meio do Fernet

1

2

3

4

5

6

7

b'BCa9IOGuuSJScUS9_O2hs5rF7IqkInh3yERK-hy1aPU='

<cryptography.fernet.Fernet object at 0x03FA4070>

Insira sua senha: 123456

123456

b'123456'

b'gAAAAABcThqui2nB4LI5DB7eLQhrFU8gDxl3k0tJV-

1eoIUKTPEKGrCNia9Y3bmXocNQiw_h_HKS448zMpTQDPLnM2Q_U

gN_Og=='

b'123456'

TABELA 3: Demonstração dos resultados obtidos por etapa

Fonte: acervo próprio.

Algumas de nossas variáveis e termos que serão aqui utilizados, sendo

eles: plain text, ou texto simples, que é a mensagem a ser cifrada, no código representada pela

variável “plaintext”; cipher text, ou texto cifrado, que se trata do texto obtido após o processo

de encriptação; encryption, que se refere ao processo de encriptação; decryption, que é o

processo inverso, de desencriptação; byte text, nome dado ao texto obtido em bytes, uma vez

que para o processo ser executado precisa ser convertido em bytes no código representada pela

variável “bytetext”; e, por fim, double strength encryption, que nada mais é que o processo de

encriptar um texto já encriptado para o tornar mais seguro.

Page 53: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

50

No início do código-exemplo (Tabela 1), na etapa 1, realizou-se a

importação da biblioteca cryptography.fernet. Na etapa 2, foi gerada uma chave que foi

armazenada na variável “key” usando o método da classe “Fernet.generate_key()”, tendo como

parâmetro 32 bytes codificada em base64 que representa a codificação binária em UTF-8 (8-bit

Unicode Transformation Format) faz uso de 1 a 4 bytes (1 byte em ASCII e 4 em UNICODE)

em octetos por caractere em cada símbolo. Após este processo, obtivemos então como resultado

a string mostrada na linha 1 da Tabela 2. Apesar de parecer algo óbvio, há uma recomendação

na própria documentação da biblioteca na qual a chave deve ser guardada/escondida para não

sofrer desencriptação ou até mesmo realizar a operação de double strength encryption.

Na etapa 3, iremos gerar o código Fernet, sendo este armazenado na variável

“token” utilizando uma mensagem obtida pelo usuário (uma sequência arbitrária de bytes).

Como resultado, um código é gerado trazendo consigo um formato que não pode ser lido ou

alterado sem a chave. Obtivemos como saída o código demonstrado na linha 2 da Tabela 2.

Na etapa 4, iremos receber o texto do usuário, como é mostrado na linha 3

da Tabela 2. Para iniciarmos o processo de encriptação desse texto em caracteres, como

representado na linha 4 da Tabela 2, ele precisará ser convertido em bytes, uma vez que o

python 3 não reconhece objetos em caracteres como matrizes de bytes e não possui nenhuma

estrutura nativa para codificar. Para fazer tal conversão utilizamos o comando

“plaintext.encode()”, como representado na etapa 5 da Tabela 1, obtendo os resultados

necessários para a encriptação demonstrador na linha 5 da Tabela 2. Por fim, com todas as

etapas concluídas, iremos então encriptar o texto obtido.

O método da classe encrypt utiliza a variável “token” para fazer a

encriptação. No exemplo, foi usado o “token.encrypt (bytetext)” que será armazenado na

variável “encrypt”, obtendo como resultado o texto mostrado na linha 6 na Tabela 2 - uma string

de tamanho variável (quanto maior a mensagem, maior será o tamanho da encriptação) mas

sempre múltipla de 128 bits, correspondentes com o tamanho dos blocos utilizados no AES.

A desencriptação do código obtido somente será possível caso o usuário

possua o token que foi utilizado no processo de encriptação. Caso este seja conhecido, somente

será necessária a realização do processo inverso, no qual a mensagem encriptada, salva pela

variável “encrypt” na etapa 6 da Tabela 1, será copiada e aplicada ao “token.decrypt(encrypt)”,

que será então armazenado na variável decrypt. A desencriptação será então realizada na etapa

7 da Tabela 1 e o resultado será a mensagem inicial, como demonstrado na linha 7 da Tabela 2.

Page 54: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

51

4.4. Exemplo de criptografia utilizada pelo Python PyCrypto

Este exemplo foi desenvolvido em uma plataforma Linux pelo PyCharm, sua

instalação segue o padrão do sistema operacional, usando seu terminal, e busca pelo navegador

https://pypi.org/project/pycrypto/. Devido a plataforma usada, o erro ao instalar o pacote

advindo da necessidade do Microsoft Visual C++, não ocorre.

Linha Exemplo de código em PyCrypto

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

from Crypto.Cipher import AES

import base64

import os

def encriptacao(privateInfo):

BLOCK_SIZE = 16

PADDING = '{'

pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) *

PADDING

EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))

secreto = b'\xf9J\xa4\xd1\t\x17\xb8\xabt\xfe\x06\x96\xe3\xe8(.'

print('Chave de criptografia:', secreto)

print('Tipo de chave:', type(secreto))

cifra = AES.new(secreto)

encoded = EncodeAES(cifra, privateInfo)

print('Cadeia criptografada:', encoded)

print('Tipo de string criptografada:', type(encoded))

def descriptografia(encryptedString):

PADDING = '{'

DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).decode('utf-

8').rstrip(PADDING)

key = b'\xf9J\xa4\xd1\t\x17\xb8\xabt\xfe\x06\x96\xe3\xe8(.'

cifra = AES.new(key)

decoded = DecodeAES(cifra, encryptedString)

Page 55: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

52

32

33

34

35

36

print('Decodificado:', decoded)

encriptacao("As maquinas me surpreendem muito frequentemente.")

descriptografia(b'2fq4okb5+rz742C8zRg2me9GLrmRP2v9Ev4Xcrvd/uzsRMj

rh5VxErf/3TnS8gf71FCZFwrOVXCSa6iWcw4kig==')

TABELA 4: Demonstração de um código em PyCrypto. Fonte: Acervo próprio.

Para que façamos os processos necessários neste código, usaremos o módulo

base64 (linha 2), este módulo fornece funções para codificar dados binários em caracteres

ASCII imprimíveis e decodificá-los de volta para dados binários, adequados para transmissão

por via de protocolos de texto simples. Definimos a função encriptacao(privateInfo) e seu

tamanho de bloco (BLOCK_SIZE), 16 bytes (para AES o tamanho do bloco pode ser 16, 24 ou

32) , o que equivale a 128 bits, este será o tamanho da key. A variável PADDING = ‘{’ é usada

para preenchimento do plaintext de modo a garantir que o valor criptografado seja sempre um

múltiplo do BLOCK_SIZE (linha 6). Na atribuição da variável pad, esta por sua vez preenche

o texto a ser criptografado, utilizamos lambda como abstração, e definimos parâmetro s de pad

e então dois pontos, o repetimos e somamos com o resultado do cálculo entre parênteses e a

multiplicação com a variável PADDING (linha 9), sobre este cálculo, tamanho do bloco (16),

menos o resultado entre o comprimento do parâmetro s (len) dividido pelo tamanho do bloco,

note o operador % (resto ou modulus).

Na linha 12 é realizada a encriptação com AES, codificada pela biblioteca

base64, atribuída ao EncodeAES. Ao fazermos uso desta biblioteca observamos uma de suas

funções, especificamente para codificação, base64.b64encode, ele codifica o objeto s em bytes

e os retorna os bytes já codificados. Nesta etapa (linha 14) definimos o secreto (esta é a chave

de segurança privada, deve ser mantida sempre em sigilo, pois serve para converter o arquivo

criptografado, neste exemplo a fixamos), e o exibimos na linha seguinte e após ele, sua classe

por via do método type. Nas linhas 15 e 16 recebemos o output (saída) da chave secreta e do

tipo de objeto ao qual ela pertence. Na linha 17 o secreto será usado para gerar a cifra e esta

por sua vez fará parte da codificação na linha 19, a secreto, nas duas próximas linhas já será

exibida a cadeia criptografada e sua classe (tipo de string) tal qual no output anterior.

A partir da linha 22 será realizada reversão do processo, para isso é definida

a função descriptografia(encryptedString), reinserimos PADDING = ‘{’ para que cumpra

Page 56: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

53

novamente a função de preenchimento, após isso, atribuímos DecodeAES, este fará o papel de

decodificar em base AES e seu parâmetro c. Assim sendo a função base64.b64decode

decodifica o objeto usando base64 e retorna os bytes codificados, no entanto foi expressa a

codificação UTF-8 (linha 28), o detalhe é que esta codificação abrange tanto o ASCII quanto

UNICODE, logo a mensagem poderá ser lida não importando se foi codificada em qualquer um

dos dois (linha 26). Atribui-se key à chave de descriptografia e na linha abaixo, a cifra designada

AES.new(key), e por fim decoded chama Decoded já contendo a chave de descriptografia e

exibindo a mensagem na linha 31.

Nas linhas 34 e 36 fazemos as chamadas de função encriptacao e

descriptografia, definidas pr def, colocadas ao final do código, pois geraria erro ao chamar a

função caso ocorresse no início.

Page 57: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

54

5. CONSIDERAÇÕES FINAIS

Desde seus primórdios, a criptografia vem crescendo em sua relevância e

tornando-se intrínseca aos avanços tecnológicos. Da grécia antiga aos dias atuais, mensagens

secretas mudaram o curso de guerras, somado a isso, despertaram curiosidade e zelaram pela

nossa segurança e privacidade. Hoje, ela está em tudo que nos cerca: bancos, mídias sociais,

mensagens instantâneas, .... Tudo que concerne à segurança e individualidade envolve

criptografia - e a demanda pela proteção de dados e informações sensíveis fica cada dia maior.

Por esse mesmo motivo, se faz de fácil compreensão a extrema importância

do estudo e do contínuo desenvolvimento da qualidade dos algoritmos e dos softwares voltados

para a criação de sistemas de segurança. Novos programadores com novas visões sobre os fatos

se fazem gradativamente mais necessários - especialmente os focados na linguagem Python,

em razão de que está se mostra com boa tendência de crescimento no mercado atual.

Dessa forma, este trabalho possui como principal objetivo guiar estes novos

usuários por intermédio do conhecimento da história sobre os algoritmos que foram referências

em segurança pelo tempo de uso. Desde seu surgimento, passando pelo “boom” do DES,

extremamente popular até cair em desuso e ser substituído pelo 2DES (e, posteriormente, pelo

3DES), até o surgimento do AES, criado durante uma busca por um novo algoritmo que seria

tão seguro quanto e de ótimo desempenho. Isso se faz necessário especialmente pela restrição

de acesso à informações de qualidade sobre o assunto.

Acreditamos que por meio da compreensão do processo de surgimento da

criptografia, novos usuários amadores e programadores profissionais possam ter seu interesse

despertado e/ou renovado sobre a criação de soluções inéditas e linguagens que possam ser

implementadas de forma simples, segura e efetivas.

Todavia, ainda faz-se importante aprender mais, aprofundar, reconhecer e

apresentar novas soluções, de forma a expandir os horizontes, sempre buscando algoritmos

inovadores que possam oferecer constantemente mais segurança para os usuários. Assim como

a sociedade, a criptografia evolui. Da mesma forma, métodos de quebrar seus códigos de

segurança surgem, e assim sucessivamente. A necessidade de buscar e aprimorar ferramentas -

igualmente como a busca pelos melhores profissionais da área da computação voltados à

programação e segurança da informação - nunca terá um fim.

Page 58: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

55

REFERÊNCIAS

ALVARENGA, Luiz Gonzaga de. Criptografia Clássica e Moderna. 2011.

Microsoft News Center Brasil. O futuro é quântico: Microsoft libera preview gratuito do Kit

de Desenvolvimento Quântico. 2017. Disponível em: <https://news.microsoft.com/pt-br/o-

futuro-e-quantico-microsoft-libera-preview-gratuito-kit-de-desenvolvimento-quantico/>.

MANDELBAUM, Ryan. A criptografia atual está em risco com os avanços da computação

quântica. 2018. Disponível em: <https://gizmodo.uol.com.br/computacao-quantica-

criptografia/>.

PWC. Uncovering the potential of the Internet of Things. 2017. Disponível em: <

https://www.pwc.com/gx/en/issues/assets/pwc-GSISS-2017-uncovering-the-potential-of-

iot.pdf>.

DEVMIDIA. Top 10 linguagens de programação mais usadas no mercado. 2018. Disponível

em: <https://www.devmedia.com.br/top-10-linguagens-de-programacao-mais-usadas-no-

mercado/39635>.

KUHNEN, Matheus. Top 10 linguagens de programação mais usadas no mercado. 2018.

Disponível em: <https://www.devmedia.com.br/top-10-linguagens-de-programacao-mais-

usadas-no-mercado/39635>. Acesso em: 30 de janeiro de 2019.

ROBSON, David. The Incredible Growth of Python. Disponível em:

<https://stackoverflow.blog/2017/09/06/incredible-growth-python/>. Acesso em: 30 de janeiro

de 2019.

MORENO, E.; PEREIRA, F.; CHIARAMONTE, R. Criptografia em Software e Hardware.

Novatec Editora, 2005.

Dicio, Dicionário Online de Português. Disponível em:

<https://www.dicio.com.br/criptografia/>. Acesso em: novembro de 2018

BORGES, Waldizar. Criptografia. Universidade Católica de Brasília, 2014.

ROT 13. Disponível em: <http://www.dantas.com/rot13/> Acesso em: 29 de novembro de

2018.

TodaMatéria, O que é Código Morse? Disponível em: <https://www.todamateria.com.br/o-que-

e-codigo-morse/>. Acesso em: 04 de janeiro de 2018.

Brasil Escola, Máquina Enigma. Disponível em:

<https://brasilescola.uol.com.br/historiag/maquina-enigma.htm> Acesso em: 05 de janeiro de

2019.

ELLIS, Claire. Exploring the Enigma. Disponível em

<http://plus.maths.org/content/os/issue34/features/ellis/index>. Acesso em: 05 de janeiro de

2019

Page 59: UNIVERSIDADE FEDERAL RURAL DA AMAZÔNIAbdta.ufra.edu.br/jspui/bitstream/123456789/544/1/Introdução ao Us… · Dimitri Sá De Alcantara, que acolheu nosso pedido de bom grado e

56

DAVIES, Norman. A Europa em Guerra (1939-1945). Lisboa: Edições 70, 2008.

SCHNEIER, Bruce. Applied Cryptography, Protocols, Algorithms, and Source Code in C.

Segunda Edição. John Wiley and Sons, New York (1996).

AUER, Craig P. Secret History: The Story of Cryptology. Boca Raton, FL: CRC Press, 2013.

p. 360.

SHANNON, Claude. Communication theory of secrecy systems. Bell Systems Technical

Journal 28 (1949), pg. 656 a 715.

TIMOFIECSYK, Sabrina. Criptografia. Disponível em:

<http://www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=1384> Acesso

em: 10 de janeiro de 2019.

SALEVANE, Leandro; GADIS, Vinícius. Um Estudo Comparativo entre algoritmos de

criptografia DES – Lucifer (1977) e AES – Rijndael (2000). Universidade Luterana do Brasil,

2001.

KOCHER, Paul C., Timing Attacks on Implement at ions of Diffie-Hellman, RSA, DSS, and

Other Systems. Stanford, CA 94309, USA

Press Release. EFF DES Cracker Machine brings honesty to crypto debate. Disponível em:

<ttps://www.eff.org/press/releases/eff-des-cracker-machine-brings-honesty-crypto-debate>

Acesso em: 17 de janeiro de 2019.

ISO/IEC 18033-3:2005. Information technology -- Security techniques -- Encryption

algorithms -- Part 3: Block ciphers. Disponível em: <https://www.iso.org/standard/37972.htm>

Acesso em: 24 de janeiro de 2019.

G1. Nem FBI consegue decifrar arquivos de Daniel Dantas, diz jornal. Disponível em:

<http://g1.globo.com/politica/noticia/2010/06/nem-fbi-consegue-decifrar-arquivos-de-daniel-

dantas-diz-jornal.html

EDSTRÖM, Björn. TrueCrypt Explained. 2008. Disponível em:

<http://blog.bjrn.se/2008/01/truecrypt-explained.html>. Acesso em: 30 de janeiro de 2019.

Pypi. Pip install cryptography. Disponível em: < https://pypi.org/project/cryptography> Acesso

em: 30 de janeiro de 2019.

NITRATINE. Encryption and Decryption in Phyton. 2018. Disponível em:

<https://nitratine.net/blog/post/encryption-and-decryption-in-python/>. Acesso em: novembro

de 2018.

Cryptography. Fernet (symmetric encryption). Disponível em:

<https://cryptography.io/en/latest/fernet/>. Acesso em: 27 de janeiro de 2019.