Universidade Federal do Rio Grande do NorteCentro de Ciências Exatas e da Terra
Departamento de Informática e Matemática AplicadaPrograma de Pós-Graduação em Sistemas e Computação
Mestrado Acadêmico em Sistemas e Computação
Implementação do Algoritmo CriptográficoPapílio Versátil na Biblioteca OpenSSL
Luiz Ranyer de Araújo Lopes
Natal-RN
Outubro 2019
Luiz Ranyer de Araújo Lopes
Implementação do Algoritmo Criptográfico PapílioVersátil na Biblioteca OpenSSL
Dissertação de Mestrado apresentada ao Pro-grama de Pós-Graduação em Sistemas eComputação do Departamento de Informá-tica e Matemática Aplicada da UniversidadeFederal do Rio Grande do Norte como re-quisito parcial para a obtenção do grau deMestre em Sistemas e Computação.
Linha de pesquisa:Teoria da Computação
Orientador
Prof. Dr. Benjamín René Callejas Bedregal
Coorientador
Prof. Dr. Isaac de Lima Oliveira Filho
PPgSC – Programa de Pós-Graduação em Sistemas e ComputaçãoDIMAp – Departamento de Informática e Matemática Aplicada
CCET – Centro de Ciências Exatas e da TerraUFRN – Universidade Federal do Rio Grande do Norte
Natal-RN
Outubro 2019
Lopes, Luiz Ranyer de Araújo. Implementação do algoritmo criptográfico Papílio Versátil nabiblioteca OpenSSL / Luiz Ranyer de Araújo Lopes. - 2019. 88f.: il.
Dissertação (mestrado) - Universidade Federal do Rio Grandedo Norte, Centro de Ciências Exatas da Terra. Departamento deInformática e Matemática Aplicada, Programa de Pós-Graduação emSistemas e Computação. Natal, 2019. Orientador: Benjamín René Callejas Bedregal. Coorientador: Isaac de Lima Oliveira Filho.
1. Computação - Dissertação. 2. Segurança da informação -Dissertação. 3. Criptografia - Dissertação. 4. OpenSSL -Dissertação. I. Bedregal, Benjamín René Callejas. II. OliveiraFilho, Isaac de Lima. III. Título.
RN/UF/CCET CDU 004
Universidade Federal do Rio Grande do Norte - UFRNSistema de Bibliotecas - SISBI
Catalogação de Publicação na Fonte. UFRN - Biblioteca Setorial Prof. Ronaldo Xavier de Arruda - CCET
Elaborado por Joseneide Ferreira Dantas - CRB-15/324
LUIZ RANYER DE ARAÚJO LOPES
“Implementação do Algoritmo Criptográfico Papílio Versátil na Biblioteca
OpenSSL”
Esta Dissertação foi julgada adequada para a obtenção do título de mestre em
Sistemas e Computação e aprovada em sua forma final pelo Programa de Pós-
Graduação em Sistemas e Computação do Departamento de Informática e Matemática
Aplicada da Universidade Federal do Rio Grande do Norte.
______________________________________________________________________
Presidente: Dr. BENJAMÍN RENÉ CALLEJAS BEDREGAL (Orientador - UFRN)
__________________________________________________________ Profª. Drª. Anne Magaly de Paula Canuto
(Coordenadora do Programa)
Banca Examinadora
______________________________________________________________________ Examinador: Dr. AUGUSTO JOSÉ VENÂNCIO NETO
(UFRN)
______________________________________________________________________ Examinador: Dr. ISAAC DE LIMA OLIVEIRA FILHO
(UERN)
______________________________________________________________________ Examinadora: Dra. KARLA DARLENE NEPOMUCENO RAMOS
(UERN)
Outubro, 2019
Esse trabalho e dedicado a minha Esposa Liliane Ribeiro da Silva, que sempre me
deu apoio e força para conclusão sendo um exemplo de dedicação e força, acadêmica e
pessoal. Também dedico aos meus Pais e irmãos.
Agradecimentos
A Deus e todos os Guias de luz, que me protegem e me guardam.
Ao meu Orientador, Prof.Dr. Benjamin Rene Callejas Bedregal, pela oportunidade,
dedicação, paciência e motivação durante todo o processo de elaboração dessa dissertação;
Ao meu coorientador, Prof.Dr. Isaac de Lima Oliveira Filho, que antes de ser meu
coorientador é uma excelente amigo, e por muitas vezes aliviou o peso das incertezas
desta etapa, me encaminhando para a construção desta dissertação;
Ao Prof.Dr. Augusto José Venâncio Neto, que foi um excelente supervisor, me auxi-
liando e apoiando, cedendo um espaço em seu laboratório e muitas vezes me orientando,
em momentos de dúvidas, obrigado sempre, pelas palavras e amizade;
A funpec, pelo apoio parcial na etapa final deste trabalho, que foi de grande ajuda;
A minha esposa Liliane Ribeiro da Silva pelo companheirismo, amor, apoio e força.
Por ser essa mulher forte e determinada, que abriu meus olhos para coisas além do que
eu queria ver, muito obrigado pela paciência e cuidado.
Aos meus pais Regina Maria de Araújo Lopes e Luiz Otávio Vieira Lopes, pela criação
e educação e todo amor que me é proporcionado são meus heróis, aos meus irmãos Luana
Rachel de Araújo Lopes, que sempre foi um exemplo para mim, e Lucas Rafael de Araújo
Lopes que é nosso pacotinho e sobrinho Luiz Otávio Vieira Lopes Neto, que sempre é
felicidade desdo momento em que veio ao mundo. Obrigado por entender minha ausência
em alguns momentos deste período e de todo Amor retribuído, incondicional.
Aos meus amigos de Salvador do grupo “QP” Taís, Marcelo, Carol, Flávio, Bianca,
Adailton, Camila e Cason, amigos de longas caminhadas e conversas.
Meus amigos de Natal do “Hissatsus” que sempre garantiram ótimas risadas e diversão,
e muitos companheiros de profissão, Tainá, Hand, Igor, Camila, Dennel, Gabriel, Prentice,
Guilherme, Matheus e outros vários.
Aos amigos para todas as horas que considero uma família Ronildo Pinheiro e Deuziane
Cruz e ao casal de fofos tem aquele abraço aconchegante André Castro e Elisa Dias.
Aos amigos do ReginaLab@, os quais tive o prazer em compartilhar vários momentos,
Wanderson, Lucas, Douglas, Alisson, Marcílio, Matheus, Átalo e em especial Ailson e Do-
mingo, que sempre deram apoio necessário e pela forma que procuram ajudar solucionando
problemas que não conseguimos mais ver;
Aos professores do DIMAp pela contribuição na minha formação como aluno e pessoa;
Aos funcionários do DIMAp por facilitarem a minha vida;
Aos parentes Avós, Tios, primos que de alguma forma contribuíram para minha edu-
cação, emanando sempre força positiva;
E a tantos outros que contribuíram de alguma forma na minha vida, por mais que
não tenham sido mencionados aqui, muito obrigado.
“O essencial é invisível para os olhos”
Saint-Exupéry
Implementação do Algoritmo Criptográfico PapílioVersátil na Biblioteca OpenSSL
Autor: Luiz Ranyer de Araújo Lopes
Orientador(a): Pro. Dr. Benjamín René Callejas Bedregal
Coorientador(a): Pro. Dr. Isaac de Lima Oliveira Filho
Resumo
Em um mundo globalizado e altamente exposto, a informação é um dos bens mais
valiosos no mundo. Com o crescente aumento das tecnologias de informações e o grande
volume de dispositivos conectados e interligados à internet surge à internet das coisas
(IoT), o que contribui com o crescimento da quantidade de dados transmitidos, com os
ataques cibernéticos passando a pertencer ao cotidiano das empresas e das pessoas. Estes
ataques podem representar riscos diretos aos usuários. Desta forma, existe uma demanda
crescente em manter essas informações livres de riscos e perigos quanto à sua integridade,
à sua autenticidade e à sua confidencialidade.
Nesse sentido, a segurança da informação busca a proteção dessas informações imple-
mentando políticas de segurança e mecanismos de proteção de dados, que devem contem-
plar o adequado equilíbrio dos aspectos humanos e técnicos da segurança da informação.
Sobre os mecanismos de proteção, a criptografia é um dos mais utilizados para a mantê-los
seguros, está diretamente relacionada aos tipos de algoritmos criptográficos, que podem
ser utilizados nos mais diversos contextos. Neste caso, aborda-se o uso de algoritmos
criptográficos inseridos no processo de comunicação entre cliente/servidor via ferramenta
OpenSSL.
Com o intuito de investigar o nível de segurança oferecido pelo OpenSSL, este tra-
balho aborda a integração do algoritmo de criptografia Papílio Versátil ao conjunto de
cifras integradas ao próprio OpenSSL. Além disso, busca-se mensurar o nível de segurança
inerente ao uso do Papílio Versátil dentro do processo de proteção na transmissão de da-
dos entre cliente e servidor. Através de uma avaliação experimental, foi possível validar
a implementação realizada. Pode-se observar que as requisições realizadas tiveram um
pequeno acréscimo médio em termos de latência, mas esse custo é compensado através da
ampliação da segurança na plataforma.
Palavras-chave: Segurança da Informação , Criptografia, OpenSSL, SSL/TLS.
Implementing the Versatile Papillary CryptographicAlgorithm in the OpenSSL Library
Author: Luiz Ranyer de Araújo Lopes
Supervisor: Pro. Dr. Benjamín René Callejas Bedregal
Cosupervisor: Pro. Dr. Isaac de Lima Oliveira Filho
Abstract
In a globalized and highly exposed world, information is one of the most valuable assets
in the world. With the increasing increase of information technologies and the large volume
of connected and interconnected devices, internet of things (IoT), which contributes to
the growing amount of transmitted data, cyber attacks have become part of the daily lives
of businesses and people. . These attacks can pose direct risks to users. Thus, there is a
growing demand to keep this information free of risks and dangers regarding its integrity,
authenticity and confidentiality.
In this sense, information security seeks to protect this information by implementing
security policies and data protection mechanisms, which must address the appropriate
balance of human and technical aspects of information security. About the protection
mechanisms, encryption, one of the most used to keep them safe. This protection is directly
related to the types of cryptographic algorithms that can be used in the most diverse
contexts. In this case, we approach the use of cryptographic algorithms inserted in the
process of communication between client / server via OpenSSL tool.
In order to investigate the level of security offered by OpenSSL, this paper addresses
the integration of the Papillium Versatile encryption algorithm to the set of ciphers inte-
grated with OpenSSL itself. In addition, we seek to measure the level of security inherent
in the use of Versatile Papillion, within the process of protection in data transmission
between client and server. Through an experimental evaluation it was possible to validate
the implementation performed. It can be observed that the requests made had a small
average increase in latency, but this cost is offset by the increased security on the platform.
Keywords : Network Security, Cryptography, OpenSSL, SSL/TLS .
Lista de figuras
1 Incidentes reportados. . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 25
2 Incidentes reportados ano de 2017. . . . . . . . . . . . . . . . . . . . . p. 26
3 Método de criptografar um dado. . . . . . . . . . . . . . . . . . . . . . p. 34
4 Método de decriptação de um dado. . . . . . . . . . . . . . . . . . . . . p. 34
5 Método de criptografia de chave simétrica. . . . . . . . . . . . . . . . . p. 36
6 Método de criptografia de chave assimétrica. . . . . . . . . . . . . . . . p. 38
7 Caminho, através dos sistemas, de Berlim a San José. . . . . . . . . . . p. 41
8 Caminho físico da Califórnia à Alemanha. . . . . . . . . . . . . . . . . p. 42
9 SSL foi desenvolvido juntamente com os primeiros navegadores web. . . p. 43
10 O protocolo considerado como uma nova camada na arquitetura TCP/IP. p. 44
11 Utilização do SSL por outras tecnologias. . . . . . . . . . . . . . . . . . p. 44
12 Estabelecimento de uma conexão segura com SSL. . . . . . . . . . . . . p. 47
13 Representação de um volta do Algoritmo Papílio. . . . . . . . . . . . . p. 52
14 Estrutura do codificador. . . . . . . . . . . . . . . . . . . . . . . . . . . p. 55
15 Papílio (tradicional) x PapílioXP na avalanche. . . . . . . . . . . . . . p. 58
16 Geração de Subchaves no Papílio Versátil. . . . . . . . . . . . . . . . . p. 60
17 Cenário estabelecido para a testes. . . . . . . . . . . . . . . . . . . . . p. 63
18 Servidor ReginaLAB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 64
19 Destaque do subdiretório do Papílio. . . . . . . . . . . . . . . . . . . . p. 66
20 Listagem do subdiretório Papílio. . . . . . . . . . . . . . . . . . . . . . p. 66
21 Implementação do arquivo Makefile. . . . . . . . . . . . . . . . . . . . . p. 67
22 Suporte engine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 67
23 Trecho de código do arquivo e_papilio. . . . . . . . . . . . . . . . . . . p. 68
24 Registro da cifra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 69
25 Novas ID’s. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 70
26 Implementação na matriz Aliases. . . . . . . . . . . . . . . . . . . . . . p. 70
27 Chamada do Papílio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 71
28 Identificação da biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . p. 71
29 Página web - www.papilio.com.br. . . . . . . . . . . . . . . . . . . . . . p. 72
30 Saída do comando ciphers -v. . . . . . . . . . . . . . . . . . . . . . . . p. 75
31 Arquivo teste no diretório /home/ubuntu do servidor. . . . . . . . . . . p. 76
32 Conteúdo inicial do arquivo. . . . . . . . . . . . . . . . . . . . . . . . . p. 76
33 Arquivo criptografado no diretório. . . . . . . . . . . . . . . . . . . . . p. 77
34 Arquivo teste.txt criptografado. . . . . . . . . . . . . . . . . . . . . . . p. 77
35 Comando speed no openssl para o Papílio. . . . . . . . . . . . . . . . . p. 79
36 Cifras disponíveis para a comunicação Cliente. . . . . . . . . . . . . . . p. 81
37 Cifras disponíveis para a comunicação. . . . . . . . . . . . . . . . . . . p. 82
38 Tabela comparativa das cifras simétricas. . . . . . . . . . . . . . . . . . p. 83
39 Gráficos de comparação das cifras simétricas. . . . . . . . . . . . . . . . p. 84
Lista de tabelas
1 Principais algoritmos criptográficos simétricos. . . . . . . . . . . . . . . p. 37
2 Principais algoritmos criptográficos assimétricos. . . . . . . . . . . . . . p. 39
3 Exemplo de execução do algoritmo Viterbi Modificado. . . . . . . . . . p. 54
4 Resultado do algoritmo desenvolvido. . . . . . . . . . . . . . . . . . . . p. 56
Lista de abreviaturas e siglas
HFC – Hybrid Fiber Coax
EAD – Educação a distância
IoT – Internet of Things
SSL – Secure Socket Layer
TLS – Transport Layer Security
CoAP – Constrained Application Protocol
MQTT – Message Queue Telemetry Transport
LWM2M – OMA Lightweight M2M
CERT.br – Centro de Estudos, Resposta e Tratamento de Incidentes de Segurança no
Brasil
Web – World Wide Web
DoS – Denial of Service
SSH – Secure Shell
TCP – Transmission Control Protocol
RDP –Remote Desktop Protocol
FTP – File Transfer Protocol
ADSL – Assymetrical Digital Subscriber Line
IMAP – Internet Message Access Protocol
SMTP – Simple Mail Transfer Protocol
CMS – Content Management System
SO – Sistema Operacional
E-interface – Interface Emulada
DES – Data Encryption Standard
NIST – National Institute os Standards and Technologies
IBM – International Business Machines
3DES – Triplo Data Encryption Standard
RC2 –Rivest-Shamir-Adleman
IDEA – International Data Encryption Algorithm
AES – Advance Encryption Standard
SHA1 (Secure Hash Algorith,)
MD5 (Message-Digest algorithm 5)
Sumário
1 Introdução p. 18
1.1 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 20
1.2 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 21
1.3 Revisão Bibliográfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 22
1.4 Organização do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . p. 24
2 Fundamentação Teórica p. 25
2.1 Riscos à Segurança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 25
2.2 Segurança da Informação . . . . . . . . . . . . . . . . . . . . . . . . . . p. 29
2.3 Criptografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 31
2.4 OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 40
2.5 Justificativa para a Necessidade do Protocolo . . . . . . . . . . . . . . . p. 41
2.6 Surgimento do SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 42
2.7 Arquitetura, Propriedades e Funcionamento . . . . . . . . . . . . . . . p. 45
2.8 TLS - O sucessor do SSL . . . . . . . . . . . . . . . . . . . . . . . . . . p. 49
3 Algoritmo Papílio Versátil p. 51
3.1 Papílio Original . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 51
3.2 PapilioXP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 56
3.3 Papílio Versátil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 59
3.4 Criptoanálise Diferencial do Papílio . . . . . . . . . . . . . . . . . . . . p. 60
4 Papílio no OpenSSL p. 62
4.1 Problemas e Desafios de Segurança Criptográfica . . . . . . . . . . . . . p. 62
4.2 Cenário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 63
4.3 Metodologia do Desenvolvimento . . . . . . . . . . . . . . . . . . . . . p. 64
4.4 Etapas Desenvolvidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 65
5 Experimentos p. 74
5.1 Arquitetura de Desenvolvimento e de Testes . . . . . . . . . . . . . . . p. 74
5.2 Compatibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 74
5.3 Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 78
5.4 Conectividade SSL/TLS . . . . . . . . . . . . . . . . . . . . . . . . . . p. 80
5.5 Comparação de algoritmos de criptografia . . . . . . . . . . . . . . . . p. 82
6 Considerações Finais p. 85
6.1 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 85
6.2 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 86
Referências p. 87
18
1 Introdução
O tema segurança da informação tem se tornado cada vez mais conhecido, à medida
que as pessoas e organizações mantêm seus dados processados, salvos ou disponíveis no
ambiente computacional, com esses dados estando sempre disponíveis a qualquer momento
de necessidade, para a realização de negociações ou uso pessoal.
Uma das questões mais importantes quando se trata de informação é a segurança,
independentemente dessa informação estar no ambiente de tecnologia ou em ambiente
convencional. A informação é o recurso que move o mundo, sendo muito mais que um
conjunto de dados. O ato de transformar dados em informação é transformar algo em um
recurso de valor para a vida toda. A informação é um bem, que deve ser protegido com
cuidados por meio de políticas e regras, de maneira similar a que os recursos financeiros
e materiais são tratados.
A internet proporcionou uma série de facilidades para seus usuários; do seu advento
até os dias atuais, já ocorreram muitas inovações, dentre elas os serviços de mensagens
instantâneas, e-mail, vendas, computação em nuvem etc. A internet é utilizada de maneira
natural para vários fins, nos quais é quase impossível imaginar a vida sem ela. A forma
de se comunicar foi completamente modificada: antigamente, os principais meios de co-
municação eram as cartas/telegramas ou telefonemas (telefones analógicos). Atualmente,
a maioria da população utiliza o aparelho celular (smartphone) para realizar várias fun-
ções, como envio de e-mails, postar fotos através de aplicativos sociais, comunicação com
várias pessoas ao mesmo tempo e, em ocasiões ocasiões mais “especiais” ou “importantes”,
realizar um ligação.
A popularização da internet veio principalmente através da melhoria dos serviços
de telefonia, como telefonia móvel, disponibilidade de internet em alta velocidade para
residências, roteadores com tecnologia Wireless1 e implementação e popularização da rede
HFC. 2 A crescente modernização dos serviços de telefonia, entre eles a internet, tem1Rede sem fio, tecnologia para promover a mobilidade2Tecnologia utilizada tanto para TV’s analógicas e digitais de alta definição como para acessar a
19
impactado em várias áreas da economia mundial, com o surgimento de empresas de vendas
de produtos/serviços pela internet (e-commerce), a popularização do modelo EAD e
com possibilidades de reuniões com pessoas em localizações geográficas diferentes (vídeo
conferência). Desses exemplos de impacto, destacam-se os serviços na categoria comércio
eletrônico (e-commerce).
Esses serviços lidam com uma grande quantidade de dados, denominamos como da-
dos sensíveis, dados bancários, informações sigilosas de empresas ou pessoais, entre outras.
Estes dados transitam pela rede desde a sua criação. Com isso, o número de crimes ciber-
néticos também vem aumentando, acontecendo no momento em que são disponibilizados
dados de cartões, dados bancários, ou em uma simples troca de e-mail.
Além de conectar pessoas, a internet está vivenciando uma nova fase, em que não ape-
nas pessoas com o auxilio dos seus dispositivos, como computadores, notebooks, smartpho-
nes e tablets conectam-se, mas qualquer outro equipamento, como eletrodomésticos, auto-
móveis, máquinas, sensores, atuadores e outros produtos em geral, são capazes de realizar
a conexão com a internet. Essa nova fase da internet também é conhecida como internet
das coisas IoT. Segundo (KHAN et al., 2012), a Internet das Coisas dispõe de conectividade
para toda e qualquer pessoa e para toda e qualquer coisa em qualquer tempo e lugar.
A extraordinária potencialidade da Internet das Coisas é o poder que confere a objetos
do uso cotidiano, tornando-os capazes de coletar, processar, armazenar, transmitir e expor
informações. Interligados em uma rede, estes objetos são habilitados para exercer ações
de forma independente e gerar dados em quantidade e diversidade exponenciais. Nesse
cenário, a informação passa a ser um aspecto do ambiente, e caracteriza-se em novos
contornos de comportamento das pessoas no mundo.
Com todo esse avanço nos serviços de internet e a quantidade de dispositivos que po-
dem se conectar, é necessário que exista certo nível de segurança e a criptografia trabalha
para que as informações trafeguem de forma mais segura e a comunicação desses dispo-
sitivos interligados através do IoT seja eventualmente segura. Algoritmos de criptografia
trabalham a todo o momento em cima desses paradigmas (tráfego e comunicação segura),
para tentar manter a segurança em diferentes meios de comunicação e armazenamento.
Assim como na vida real, algumas informações necessitam de privacidade, o que mos-
tra a necessidade em garantir a confidencialidade dessas informações, tornando-as seguras.
Nesse sentido, a segurança da informação visa manter estes dados protegidos, empregando
técnicas de proteção e respeitando as diretrizes de segurança que devem ser seguidas em
internet em alta velocidade.
20
qualquer sistema de informação. Sendo a forma mais utilizada para prover a segurança em
pontos vulneráveis na rede, a criptografia é utilizada para barrar as ameaças e os ataques,
fornecendo técnicas para codificar e decodificar dados, a fim de que esses dados possam
ser armazenados, transmitidos e recuperados sem sua alteração ou exposição.
A RFC 2828 (Request for Coments no 2828) define o termo criptografia como a ci-
ência matemática que lida com a transformação de dados para mudar seu significado em
algo ininteligível para o inimigo, isto é, esconder seu conteúdo semântico prevenindo sua
alteração ou o seu uso sem autorização (SHIREY, 2000) por exemplo, quando uma pessoa
realiza uma compra pela internet, os dados são processados pelas aplicações de redes e
armazenados em servidores. A transferência dos dados para a rede deve ser protegida para
evitar perda de informação sensível. Esta proteção pode ser alcançada via utilização de
técnicas de encriptação de dados, como por exemplo o SSL e o TLS nesse sentido, o
SSL utiliza algoritmos criptográficos que aplicam a proteção de dados sobre o canal de
transmissão.
Através de uma implementação de códigos abertos dos protocolos SSL/TSL, a bibli-
oteca OpenSSL realiza a implementação de funções básicas de criptografia, disponibili-
zando, assim, várias funções utilitárias (OPENSSL.ORG, 2018).
1.1 Motivação
O crescimento da IoT fomentou criações de aplicações, aparelhos, sensores e outros
para tornar tudo conectado. Esse crescimento também apresenta uma discussão que en-
volve segurança, em relação à comunicação desses dispositivos, assim como a integração
de novos dispositivos. Todas as tecnologias que utilizam IoT dependem diretamente de
conectividade e segurança, pois, para que a IoT funcione, é necessário uma conexão entre
equipamentos e, sempre que se fala em conectar algum dispositivo na rede, a segurança é
algo a ser considerado.
Alguns protocolos já são bastante conhecidos e são utilizados com frequência em
aplicações IoT, como o CoAP, MQTT e o LW2M. Em relação à criptografia usada em
comunicação na rede de computadores, é comum encontrar a biblioteca OpenSSL, que
possui vários algoritmos criptográficos, sendo aceita por várias aplicações.
O nível de proteção do SSL está diretamente relacionado aos tipos de algoritmos
criptográficos utilizados na comunicação entre o cliente e o servidor. Desse modo, ao
utilizar algoritmos mais robustos, o protocolo SSL fornece, consequentemente um nível
21
maior de proteção. Assim, ao inserir outros algoritmos criptográficos com maiores níveis
de segurança à sua base de cifras, é possível melhorar o nível de segurança do próprio
protocolo.
Nesse sentido, decidiu-se integrar o algoritmo de criptografia Papílio Versátil (NETO,
2009) na biblioteca OpenSSL, tornando-o um possível algoritmo usual nesta biblioteca.
Deste modo, é possível provar que o Papílio Versátil é um algoritmo capaz de realizar
as funções de encriptação e decriptação, promovendo ao OpenSSL um aumento no nível
de proteção dos dados, através de características criptográficas. Apesar dos trabalhos
desenvolvidos e suas variantes, entre elas o Papílio Versátil (RAMOS, 2002), (ARAÚJO,
2003), (ARAÚJO et al., 2005) (NETO, 2009), (FILHO, 2010) e (FILHO, 2014) em nenhum
deles abordou uma integração do algoritmo, com uma biblioteca específica para proteção
de dados. Desta forma, surgiu a oportunidade de realizar tais estudos, obtendo resultados
práticos para a implementação do Papílio Versátil na biblioteca OpenSSL.
1.2 Objetivo
O principal objetivo deste trabalho é contribuir no aumento ou melhoria da segurança
da Biblioteca OpenSSL incluindo o algoritmo Papílio Versátil, visto que, por ser um
algoritmo desconhecido pode possuir algumas vantagens em sua utilização, já que não
possui estudos para a quebra de sua criptografia. Nesse contexto, empreendemos a, os
testes realizados e a comparação com outros algoritmos utilizados na biblioteca OpenSSL,
em que, através desta investigação, conclui-se que o Papílio pode contribuir e realizar a
comunicação segura juntamente com a referida biblioteca.
A relação de objetivos específicos que esta implementação pode ocasionar está relaci-
onada da seguinte maneira:
• Provar que a implementação é possível;
• Realizar a troca de mensagens SSL/TLS, mostrando que é realizada de forma segura;
Tal estrutura pode provar que todos os esforços para a realização deste trabalho são
essenciais para sua conclusão.
22
1.3 Revisão Bibliográfica
Durante o tempo de pesquisa sobre bibliografias, para ajudar a realização desta dis-
sertação, as fontes de grande importância para nortear a pesquisa foram:
1. Ramos, em "Papílio: proposta de um algoritmo de criptografia baseado no algoritmo
Viterbi e codificação convolucional"(2002), desenvolveu estudos usando o algoritmo
Viterbi Modificado como função F do codificador Feistel, a fim de atingir os princí-
pios de difusão e confusão do codificador Feistel. Além da função F, Viterbi Modi-
ficado também é utilizado para geração das sub-chaves. Ela desenvolveu o Papílio,
que é uma algoritmo do tipo convencional, em que o processo para cifrar o texto
claro é realizado em blocos. Para cada bloco de entrada é produzido um bloco de
saída (RAMOS, 2002).
2. Araújo, em "PapílioXP: uma extensão do algoritmo criptográfico Papílio"(2003),
propôs uma variante do algoritmo Papílio adicionando a capacidade de variar o
modo como cifrar os textos dependendo do texto o qual se está cifrando e de maneira
que atinja os melhores índices criptográficos possíveis, afim de que seja aumentada
a dificuldade de se conseguir quebrar a mensagem codificada. (ARAÚJO, 2003).
3. Araújo et al., em "Papílio cryptography algorithm"(2005), apresenta o algoritmo
como um algoritmo de criptografia Feistel, em que o processo codificador (função F)
é baseado no algoritmo Viterbi. Também expõe a solução do algoritmo Viterbi para
decodificar códigos convolucionais e explica a necessidade da realização de algumas
modificações no Viterbi, além de realizar uma análise dos índices criptográficos (ava-
lanche, difusão e confusão) do Papíllio, considerando todos os possíveis polinômios
diferentes e fixando os demais parâmetros. (ARAÚJO et al., 2005).
4. Neto, em "Papílio Versátil: Um algoritmo criptográfico"(2009), realizou um estudo
acerca do algoritmo PapílioXP de Araújo (2003), em que, onde as implementações
feitas trouxeram uma maior versatilidade e segurança contra a criptoanálise. Nesta
variante do Papílio, foi alterado o modo de construção de sub-chaves do Papílio, que
processa blocos de 16 Bytes (128 bits) de tamanho, permitindo utilizar chaves de
tamanho entre 16 Bytes (128 bits) e 128 Bytes (1024 bits). (NETO, 2009), (ARAÚJO,
2003).
23
5. Oliveira apresentou "Criptoanálise diferencial do Papílio"(2010), em que aplicou-
se a técnica de Criptoanálise Diferencial, introduzida por Biham e Shamir, sobre o
algoritmo Papílio, a fim de testar e, principalmente, provar sua relevância em relação
a outras cifras de blocos como DES, Blow-Fish e FEAL-N(X). (FILHO, 2010).
6. Oliveira, em "Algoritmo Papílio como método de proteção de templates para au-
mentar a segurança em sistemas de identificação biométricos"(2014), promove a
utilização simultânea de criptografia com o Algoritmo de Criptografia Papílio, junto
com os modelos de proteção de templates Fuzzy Vault e Fuzzy Commitment em
sistemas de identificação baseados em biometria. (FILHO, 2014).
7. Niemiec, em "Implementation of a New Cipher in OpenSSL Environment the Case
of INDECT Block Cipher"(2016), realiza a implementação de uma nova cifra na
biblioteca de criptografia popular para amplo uso, em que é descrito o processo de
integração da nova cifra à Biblioteca OpenSSL. A cifra implementada é a INDECT
Block Cipher (IBC), uma cifra de bloco simétrica baseada em substituição. Alegando
que é possível integrar qualquer cifra simétrica no ambiente OpenSSL, o objetivo
da implementação é permitir o uso de uma nova cifra em aplicativos usando bi-
bliotecas OpenSSL, especialmente para criptografar dados em SSL/TLS Conexões.
(JURKIEWICZ; NIEMIEC, 2016).
8. Também foi utilizado a implementação do algoritmo de criptografia Camellia através
da RFC 5932 (KATO; KANDA; KANNO, 2010), que especifica o conjuntos de cifras
para o Protocolo TLS a fim de suportar a criptografia do algoritmo Camellia, o
qual também é uma cifra de bloco. Ele altera o conjunto original de cifras da RFC
4132 através da introdução de contrapartes usando os mais recentes algoritmos de
criptografia hash.
9. Caio, em "Ampliando a segurança de aplicações para a Internet das Coisas baseadas
na plataforma FIWARE"(2018), direciona o estudo para a incorporação da arquite-
tura de serviços de segurança fim-a-fim através do uso de cifragem e do controle de
acesso em todas as requisições NGSI. Realizando a implementação em NodeJs do
suporte ao DTLS 1.2 no protocolo LWM2M/CoAP com o IoT Agent, ele permite
que outros protocolos possam se beneficiar dos resultados obtidos. (OLIVEIRA et al.,
2018).
10. Em "Internet das Coisas"– Um estudo sobre questões de segurança, privacidade e
infraestrutura"(2016), Vitor apresenta um estudo sobre algumas questões básicas
24
da nova fase da internet, a internet das coisas. Abordando questões relevantes à
segurança da informação e dos dados, apresentando alguns mecanismos para a pro-
teção em IoT e relata uma análise sobre a infraestrutura da internet das coisas, seus
desafios e obstáculos que retardam o seu desenvolvimento e os principais padrões
utilizados nas suas implementações.(FIGUEIRA, 2016).
11. Luis, em "Arquitetura para privacidade na integração de Internet das Coisas e com-
putação em nuvem"(2018), propõe uma arquitetura de privacidade em Cloud of
Things, permitindo ao usuário o controle completo do acesso aos dados gerados
pelos dispositivos de suas redes IoT e armazenados na nuvem. Ele desenvolve a di-
minuição da sobrecarga nos dispositivos IoT, além de avaliar a análise analítica e
experimental, utilizando o simulador de redes ns-3 para prover privacidade na Cloud
of Things. (PACHECO, 2018).
1.4 Organização do Trabalho
Neste capítulo, foi apresentado o escopo do trabalho, juntamente com suas motivações
e objetivos, e uma rápida revisão bibliográfica. No Capítulo 2, serão apresentados os
conceitos fundamentais de enriquecimento sobre o tema, como segurança da informação,
criptografia e seus sistemas criptográficos. No Capítulo 3, será abordado o algoritmo em
questão, no caso o Papílio Versátil, juntamente com algumas características do mesmo. As
versões Papílio Original e PapílioXP, assim como sua criptoanálise diferencial, também
serão abordadas neste capítulo. O Capítulo 4 trata da aplicação do Papílio no protocolo
SSL, juntamente com uma justificativa para a necessidade de se usar este protocolo,
explanando sua arquitetura, o processo de comunicação (Handshake3) e o seu sucessor, o
TSL, finalizando com o OpenSSL. O Capitulo 5 aborda os experimentos realizados neste
trabalho, com sua metodologia, sua arquitetura de testes, as etapas desenvolvidas. Por
fim, no Capitulo 6, trazemos as considerações as considerações finais e trabalhos futuros.
3Permissão com a qual o cliente e o servidor SSL ou TLS estabelecem as chaves secretas com as quaiseles se comunicam.
25
2 Fundamentação Teórica
A seguir, serão apresentadas informações e conceitos básicos sobre segurança da in-
formação, juntamente com seus principais serviços. Em seguida, serão apresentados os
conceitos sobre IoT, criptografia e protocolos.
2.1 Riscos à Segurança
Segundo o CERT.br, a quantidade de incidentes reportados nos últimos anos, espe-
cificamente de 2016, foi de 647.112 contra 833.775 do ano de 2017, ou seja, ocorreu um
aumento de 29%. Na Figura 1, é possível acompanhar a evolução dessas ameaças ao longo
dos anos, a qual demonstra que as ameaças relacionadas a problemas de segurança estão
mais presente a cada dia.
Figura 1: Incidentes reportados.Fonte:CERT.Br (2018).
Pode-se observar que as taxas de crescimento aumentaram de um ano para o outro.
Por exemplo, na comparação entre os anos 2012 e 2013, e tal foi 24% menor que o total do
anterior, porém 2014 foi 197% maior que o total de 2013. Percebe-se, que 2014 é o ano de
maior número de incidentes reportados, com 1.047.031 até o momento, sendo justamente
26
o ano da falha de segurança no OpenSSL, a Heartbleed1.
Com isso, pode-se dizer que a preocupação com a segurança da informação teve início
na antiguidade, com o surgimento da escrita, sobretudo no que se refere ao aspecto da
confidencialidade da informação. Com o crescimento do número de pessoas com a ha-
bilidade de ler e escrever por meio de símbolos, logo percebeu-se a necessidade de duas
pessoas poderem trocar informações sem que outras pudessem lê-las.
Em relação aos tipos de ataques, o gráfico referente ao ano de 2017 mostra que existiu
uma diminuição em alguns tipos de ataques em relação ao ano de 2016. Na análise de
alguns fatos observados nesse período, como ataques de negação de serviço, tentativas de
fraude, varreduras e propagação de códigos maliciosos, ataques a servidores Web, com-
putadores comprometidos e outros incidentes reportados, a Figura 2 ilustra a proporção
de cada tipo de ataque com respeito ao total de ataques no ano de 2017.
Figura 2: Incidentes reportados ano de 2017.Fonte: Cert.br (2018).
Para melhorar o entendimento da Figura 2, o CERT.br realizou uma pequena análise
dos fatos observados neste período, agrupados por categorias de incidentes:
• Ataques de Negação de Serviço.
– No ano de 2017, 220.188 notificações sobre computadores que participaram de
ataques de negação de serviço DoS. Este número foi quase 4 vezes maior que1Através de uma extensão chamada heartbeat, que mantém ativa uma conexão segura. Por meio da
falha, pode-se obter 64 KB de dados da memória do servidor.
27
o número de notificações recebidas em 2016;
– A maioria das notificações de ataques de DoS foi recebida em julho de 2017,
referente a um ataque originado por equipamentos de IoT (Internet das Coisas)
infectados e fazendo parte de botnets2.
• Tentativas de Fraude.
– As notificações de tentativas de fraude totalizaram 59.319 incidentes em 2017,
correspondendo a uma queda de 42% em relação a 2016;
– Em 2017, as notificações de casos de páginas falsas de bancos e sites de comércio
eletrônico (phishing clássico) caíram 46% em relação a 2016;
– As notificações sobre Cavalos de Troia, utilizados para furtar informações e
credenciais, tiveram uma queda de 7% em relação ao ano de 2016;
– Em 2017, o número de notificações de casos de páginas falsas que não envolvem
bancos e sites de comércio eletrônico teve um aumento de 6% em relação a
2016. Nesses casos, estão incluídos os serviços de webmail e redes sociais, por
exemplo.
• Varreduras e propagação de códigos maliciosos.
– As notificações de varreduras somaram 443.258 em 2017, correspondendo a um
aumento de 15% com relação a 2016;
– Os serviços que podem sofrer ataques de força bruta continuam sendo muito
visados: SSH (22/TCP com 47% das notificações de varreduras, TELNET
(23/TCP) com 9%, RDP (3389/TCP) com 2% e FTP (21/TCP) com 1% das
notificações em 2017;
– As varreduras de TELNET (23/TCP), bem como o par de varreduras 23/TCP e
2323/TCP, que continuam a ter destaque desde 2015, correspondem a 14% das
notificações e parecem visar dispositivos IoT e equipamentos de rede alocados
às residências de usuários finais, tais como modems (ADSL, cabo e fibra),
roteadores Wi-Fi etc.;
– As notificações de varreduras de SMTP (25/TCP), que em 2016 correspondiam
a 30% de todas as varreduras, agora correspondem a 21%. As portas IMAP
(143/TCP) e Message Submission (587/TCP) correspondem respectivamente
a 3% e 1% das notificações;2Grupo de computadores conectados à Internet, cada um deles rodando um ou mais bots e se comu-
nicando com outros dispositivos, a fim de executar determinada tarefa.
28
– As varreduras de SMTP (25/TCP) são relativas a 3 tipos de abuso: tentativas
de envio de e-mails com uso de dicionários de nomes de usuários; exploração de
servidores de e-mail como open-relays ; e ataques de força bruta para envio de
mensagens utilizando credenciais de usuários existentes nos sistemas atacados;
– As varreduras de IMAP (143/TCP) e Message Submission (587/TCP) são
relativas a ataques de força bruta para obtenção das credenciais de usuários
existentes nos sistemas atacados e posterior envio de e-mail utilizando as cre-
denciais descobertas;
– As notificações de atividades relacionadas com a propagação de worms e bots
(categoria worm) totalizaram 45.101 em 2017, aumento de 60% em comparação
com 2016.
• Ataques a servidores Web.
– No ano de 2017, houve um aumento de 10% nas notificações de ataques a
servidores Web em relação a 2016, totalizando 60.766 notificações;
– Os atacantes exploram vulnerabilidades em aplicações Web para comprometer
sistemas e então realizar as mais diversas ações, tais como: hospedar páginas
falsas de instituições financeiras, armazenar ferramentas utilizadas em ataques,
e propagar spam e/ou scam;
– Observa-se que, durante o ano de 2017, um aumento das notificações de ataques
de força bruta contra sistemas de gerenciamento de conteúdo CMS tais como
WordPress e Joomla foram, em sua maioria, tentativas de adivinhação das
senhas das contas de administração destes sistemas.
• Computadores comprometidos.
– Em 2017, 401 notificações de máquinas foram comprometidas. Este total foi
76% menor do que o número de notificações recebidas em 2016;
– A maioria das notificações de computadores comprometidos foi referente a
servidores Web que tiveram suas páginas desfiguradas.
• Outros incidentes reportados.
– Em 2017, 4.742 notificações que se enquadram na categoria "outros"corresponderam
a um número 68% menor que o total de 2016.
29
Todas as estatísticas dos incidentes apresentadas pelo CERT.br demonstram que as
ameaças de segurança estão presentes a cada dia, e as empresas precisam se conscientizar
desse aumento, justificando a implementação de segurança da informação.
2.2 Segurança da Informação
A segurança da informação visa aplicar medidas de proteção para os dados, sendo eles
processados, armazenados ou transmitidos nos sistemas de informação ou comunicações.
Independente do tipo de sistema utilizado, busca-se sempre proteger essa informação
do uso indevido (intencional ou acidental) por parte de quem manipule esses dados. A
vulnerabilidade ou falha de segurança pode acontecer por meio de um “bug”3 em um
sistema operacional ou aplicação, ou através de uma atualização que foi realizada sem os
devidos testes, como em um servidor Web ou em servidor com qualquer SO.
Um usuário que tem sua respectiva senha divulgada de maneira indevida ou descui-
dada também indica uma vulnerabilidade. Por exemplo, um determinado funcionário pode
sabotar uma base de dados dos funcionários de uma determinada empresa por vingança,
ou mesmo um espião industrial. O fato é que não existe sistema ou informação 100%
segura, visto que, ao utilizar a rede pública as informações que são disponibilizadas ou
pesquisadas estão sujeitas a riscos, pelo fato de não existir um controle completo, ficando
assim sempre vulneráveis a ataques.
Esses ataques contra a segurança da informação causam grandes prejuízos financeiros
às grandes corporações, pois elas não possuem um noção clara do valor da informação
que assim, quando ocorre um ataque que resulta em um “downtime”4 da rede, caso ele se
torne público, as perdas com produtividade e principalmente com relação à imagem da
empresa são muitas vezes incalculáveis.
Noções de Confidencialidade, Integridade e Disponibilidade
A segurança dos canais de comunicação corresponde à restrição na capacidade forne-
cida no E-interface , que pode ser caracterizada em função de dois aspectos: a quantidade
de informação vazada sobre mensagens transmitidas e a potencial influência sobre as men-
sagens entregues ao receptor. Por conseguinte, uma garantia de confidencialidade limita3Termo utilizado quando é encontrado um erro em algum programa que faz com que aja de maneira
inesperada ou fora do comum.4porcentagem de tempo em que um sistema de computador, ou um de seus componentes, perma-
nece inativo por causa de um problema inesperado ou para fins de manutenção, troca de equipamento,arquivamento de dados antigos.
30
a quantidade de informação que é divulgada, e uma garantia de integridade restringe a
influência contraditória em mensagens entregues. A seguir, serão descritos cada pilar da
segurança da informação.
Confidencialidade
Tem como principio a proteção da informação em sistemas, recursos e processos para
que ela não possa ser acessada por pessoas não autorizadas. Essa informação não pode
ser disponibilizada para quem não tem a devida autorização para acessá-la. A confidenci-
alidade também é um mecanismo que garante a privacidade dos dados.
O acesso das pessoas autorizadas a essas informações armazenadas ou transmitidas se
dá por meio de redes de comunicação. Manter a confidencialidade pressupõe assegurar que
as pessoas não tomem conhecimento de informações, de forma acidental ou proposital.
Alguns aspectos importantes da confidencialidade são a identificação a autenticação e a
autorização. A confidencialidade pode ser obtida criptografando os dados armazenados e
transmitidos, restringindo os acessos, classificando os dados e criando procedimentos de
segurança.
Integridade
A integridade consiste na garantia de que a informação permaneceu íntegra, o que
significa que ela não sofreu nenhuma espécie de modificação durante a sua transmissão
ou armazenamento, sem a autorização do autor da mensagem.
Esquemas de criptografia em geral não protegem a integridade das mensagens. No en-
tanto, são utilizados para verificar se houver qualquer alteração de integridade do objeto
encriptado. Por exemplo, se um atacante substitui o texto cifrado c transmitido para uma
mensagem m ∈ M , em que m é a nova mensagem que foi modificada de M , uma cifra
c∗ = c, o receptor irá potencialmente obter uma mensagem diferente m ∈ M durante
a decriptação. Para o atacante (m), substituindo c por c∗ corresponde a selecionar uma
transformação F : M → M que descreve, para cada mensagem m̃ potencialmente trans-
missível, que mensagem m̃′ = F (m̃) o receptor teria obtido, uma vez que a mensagem
original foi m̃.
A integridade está relacionada com a proteção da informação ou o processo para que
não seja intencionalmente ou acidentalmente alterada, ou seja, alterada sem a devida au-
torização (controle de fraude). Nenhum usuário possui a capacidade de alterar os dados de
forma a corrompê-los, ou causar perdas financeiras, tornando a informação não confiável.
31
A integridade é fundamental e crítica em alguns sistemas, como:
• Sistemas de controle de tráfego aéreo;
• Sistemas financeiros em geral;
• Comércio eletrônico;
• Sistemas de infraestrutura básica, como fornecimento de energia elétrica, água e gás.
Disponibilidade
Consiste na garantia de que as informações estejam acessíveis às pessoas e aos pro-
cessos autorizados, a qualquer momento requerido, durante o período acordado entre os
gestores da informação e a área de informática. Manter a disponibilidade de informações
pressupõe garantir a prestação contínua do serviço, sem interrupções no fornecimento de
informações para quem é de direito. As ameaças à disponibilidade estão relacionadas a
ataques de negação de serviços (DoS) e perdas resultantes de desastres naturais, como
fogo, enchente, terremotos ou ações humanas. Esses ataques ocorrem e deixam os serviços
indisponíveis.
2.3 Criptografia
O conceito de criptografia, segundo (SIMON, 2000), pode ser visto como a proteção
de informações sensíveis do acesso não autorizado de terceiros, isto é, de pessoas que não
são o remetente nem o destinatário dessas informações e dados. A subseção 2.5.1 descreve
características desejáveis em um algoritmo criptográfico. Já as subseções 2.5.2 e 2.5.3
apresentam, respectivamente, os sistemas criptográficos e funções Hashing.
Ciência que utiliza algoritmos matemáticos para criptografar/encriptar (cripto = es-
conder) dados (texto claro) em uma forma aparentemente não legível (texto cifrado) e
recuperá-los (decriptografá-los). Com essa ciência, o custo de tentar descobrir o conteúdo
das mensagens cifradas torna-se maior do que o potencial ganho com os dados. (FERNAN-
DES, 2013) Utilizada para codificar informação pelos egípcios em forma de hieróglifos, seu
uso cresceu de forma considerável juntamente com a proliferação de computadores e as
necessidades de proteção da informação digital.
Características desejáveis em um algoritmo criptográfico
32
A criptografia tem o intuito de oferecer a maior dificuldade possível à tentativa de um indi-
víduo não autorizado descobrir o conteúdo da mensagem cifrada. Para isso, os algoritmos
criptográficos baseiam-se em alguns critérios para atingir tal objetivo, como avalanche,
confusão e difusão.
Avalanche
Corresponde à influência que um bit da chave ou do texto claro possui no resultado do
processo de cifragem. Conforme (RAMOS, 2002) descreveu, considera-se um bom algoritmo
em que a modificação de um bit na chave ou texto claro, influencia no estado de 50% dos
bits do texto cifrado. Essa característica já dificulta a dedução da chave ou do texto claro
a partir do texto cifrado, caso um intruso subtraía essa mensagem, pois, caso ele erre em
pelo menos um bit o texto cifrado, o resultado obtido terá uma diferença de 50% do texto
cifrado originalmente.
Difusão
Corresponde à destruição da estatística de ocorrências dos símbolos presentes no texto
cifrado, coibindo assim o ataque estatístico, que é baseado na ideia de frequência de
aparição dos símbolos do texto cifrado similar aos símbolos do texto claro. Como explicado
em Araújo (2003), caso o texto claro seja proveniente de uma linguagem natural, basta
que o intruso disponha de uma tabela de frequência natural de aparição destes caracteres
para fazer a correspondência um para uma dos símbolos do texto cifrado e do texto
claro.(ARAÚJO, 2003)
Confusão
Corresponde o quanto é incompreensível a relação entre o texto claro e o texto cifrado.
(RAMOS, 2002) explica que, quando um bit da chave ou do texto claro é alterado, o
algoritmo que satisfaz a confusão deve produzir um texto cifrado com símbolos diferentes.
A confusão é similar à avalanche, só que ela se preocupa com os símbolos gerados e não
com o estado dos bits.
Sistemas Criptográficos
A implementação dos sistemas criptográficos geralmente ocorre via software, por ser
mais barata, entretanto o resultado é mais lento e menos seguro (FERNANDES, 2013), visto
33
que o software é mais fácil de ser modificado e forjado. A implementação via hardware é
feita através de chips e microprocessadores dedicados à criptografia. São mais rápidos que
os controlados por software, entretanto menos flexíveis.
O processo de encriptação e decriptação requer o uso de informações secretas, conhe-
cidas como chaves. A chave geralmente é um numero primo, utilizado em conjunto com
um algoritmo criptográfico na criação do texto cifrado, que possui alguns atributos.
• Tamanho: número de bits/bytes da chave;
• Espaço: coleção de combinações matemáticas que possuem o mesmo tamanho de
chave.
O gerenciamento das chaves criptográficas deve definir mecanismos para geração, dis-
tribuição, entrada e saída, armazenamento e arquivamento
• Geração de chaves: deve obrigatoriamente fazer uso de um algoritmo devidamente
testado. O gerador de números aleatórios deve garantir que todos os valores dos bits
são gerados igualmente, assim como o padrão de geração de chaves não pode ser
de conhecimento público. Portanto é preciso usar algoritmos randômicos que geram
números aleatórios.
• Distribuição de chaves: podendo ser realizada manualmente, automática (via
teclado ou smart cards) ou uma combinação. O canal utilizado para o envio e a
troca de chaves criptográficas deve ser o seguro.
• Armazenamento de chaves: as chaves não podem ser acessíveis, entretanto, é
muito útil armazenar as chaves criptográficas em um arquivo para o caso de perda,
permitindo assim a sua recuperação. Esse arquivo deve estar localizado em um
computador que esteja em um ambiente seguro e controlado.
Em modos gerais, a criptografia é dada a partir de uma mensagem original M que é
transformada em uma mensagem criptografada M∗, pela aplicação de um algoritmo A,
com uma ou mais chaves k independentes da mensagem. O algoritmo deve produzir uma
saída única para cada chave passível de ser utilizada. A Figura 3 demostra a encriptação
de uma mensagem após ser codificada pelo algoritmo A.
34
Figura 3: Método de criptografar um dado.Fonte: Elaborada pelo autor (2018).
Para recuperar a mensagem original M , aplica-se sobre M∗ o processo de decriptação,
utilizando a chave correspondente, através da aplicação do mesmo algoritmo A, junto com
a chave K correspondente. Essa operação é inversa à criptografia, como mostra a Figura
4.
Figura 4: Método de decriptação de um dado.Fonte: Elaborada pelo autor (2018).
O segredo do algoritmo não pode fundamentar a segurança do mesmo, pois, se ele
apenas for seguro se permanecer secreto, então ele só será seguro até o momento no qual
se aplique a decriptação e o torne público. A segurança deve estar centrada no conjunto
de chaves. Desta forma, dificulta-se que um intruso possa recuperar M apenas em posse
do algoritmo utilizado para gerar a mensagem criptografada M (STALLINGS, 2008).
Algoritmos criptográficos devem ser razoavelmente eficientes (do ponto de vista de
35
tempo computacional envolvido), de modo a poderem ser aplicados conforme o conhe-
cimento das chaves envolvidas. Ou seja, deve ser computacionalmente fácil executar as
funções de encriptação e decriptação desde que as chaves sejam conhecidas. (STALLINGS,
2008), classifica os algoritmos de criptografia em uma forma genérica em três tipos: quanto
ao seu número de chaves, tipos das operações usadas para criptografar as mensagens e
modo de processamento da mensagem original.
1. Número de chaves: Podendo ser de chaves simétricas ou chaves assimétricas.
A simétrica também conhecida como chave privada, ocorre quando o remetente e
o receptor utilizam a mesma chave para encriptar e decriptar. Diferentemente, a
assimétrica, também conhecida como chave pública, utiliza chaves diferentes, para
realizar as operações, encriptar ou decriptar.
2. Tipo das operações usadas para criptografar as mensagens: No geral, os
algoritmos de criptografia são fundamentados em dois princípios: substituição ou
transposição. Na substituição, cada elemento do texto é mapeado em outro elemento.
Já na transposição, os elementos são rearranjados dentro do texto.
3. Modo processamento da mensagem original: Caso a mensagem original seja
processada utilizando como unidade de entrada e saída blocos de dados de tamanho
fixo, o algoritmo é dito como uma cifra de bloco. Caso a mensagem original seja
processada de forma contínua, como uma única unidade de dados, não importando
o seu tamanho, o algoritmo é dito como uma cifra de fluxo.
Sistemas Simétricos
Todas as informações reservadas, que possuem algum valor para a atividade econômica
de empresas ou pessoais, e que podem ser transportadas em um meio inseguro, devem
ser criptografadas. Os sistemas de chaves simétricos, baseado no conhecimento entra as
partes da comunicação de uma chave secreta, geralmente são utilizados quando existe
uma grande quantidade de dados a serem criptografados. Esse sistema não é capaz de
promover o não repúdio5. A Figura 4 ilustra como é realizado o processo de criptografia
de chave simétrica.
5Não repúdio é um serviço de segurança que consiste em técnicas e métodos para que o remetente damensagem não possa negar, no futuro, o envio dela.
36
Figura 5: Método de criptografia de chave simétrica.Fonte: Elaborada pelo autor (2018).
Principais Algoritmos de Criptografia Simétrica
• DES e 3DES: O DES é um algoritmo criptográfico padrão, desenvolvido nos anos
de 1970 pelo NIST em conjunto com a IBM. A chave possui tamanho de 56 bits.
No 3DES, o algoritmo DES é aplicado três vezes com três chaves distintas a 168
bits ou duas distintas de 112 bits (ROBACK; M., 1998). O DES substitui os bits da
mensagem clara pelos bits da mensagem criptografada. Como o processo é simples,
os algoritmos possuem rápida execução.
• RC2 : Desenvolvido por um dos fundadores do RSA Ronald Rivest. É vendido pela
RSA e permite o uso de chaves criptográficas de até 2.048 bits.
• RC4: Uma evolução do RC2, sendo mais rápido. Também é um produto da RSA
que trabalha com chaves de até 2.048 bits.
• RC5: Publicado em 1994 e permite o uso de chaves com tamanhos definidos pelo
usuário.
• IDEA: O IDEA foi desenvolvido por James Massey e Xuejia Lai. Ele utiliza uma
chave de 128 bits e a patente pertence a ASCOM TECH AG, uma empresa Suíça.
• AES: AES criado pelo NIST com um padrão avançado de criptografia com o
objetivo de substituir o DES e o 3DES. Ele surgiu em um concurso realizado pelo
NIST. (ROBACK; M., 1998). Os fatores analisados para a escolha do algoritmo foram
37
segurança (esforço requerido para criptoanálise), eficiência computacional, requisitos
de hardware e software, simplicidade e licenciamento (FERNANDES, 2013). Trabalha
com um bloco fixo de 128 bits e uma chave cujo o tamanha varia entre 128, 192 ou
256 bits.
Nome do Algoritmo Tipo de Encriptação Tamanho da ChaveDES Bloco 56 ou 64IDEA Bloco 128
RC2 - RC5 Bloco 1 a 2.0483DES Bloco 56 ou 112AES Bloco 128, 192 ou 256
Tabela 1: Principais algoritmos criptográficos simétricos.Fonte: Fernandes (2013).
Sistemas Assimétricos
Os sistemas assimétricos, criados em 1976 por Whitfield Diffie e Martin Hellman
(FERNANDES, 2013), utilizam uma chave pública conhecida por ambas as partes e uma
chave privada que é mantida em segredo para encriptar os dados, ou seja, cada um dos
interlocutores necessita gerar um par de chaves públicas e privadas. Esses sistemas exigem
mais recursos computacionais, e em geral são utilizados para distribuir chaves secretas ou
enviar pequenas mensagens.
Enquanto uma chave é utilizada para a encriptação, a outra é usada para decriptação.
Esse modo por ser mais complexo, é muito mais lento que a criptografia simétrica, algo
de cem a mil vezes mais lento (FERNANDES, 2013). Ela permite, além de proteger as
informações, fornecer um mecanismo eficiente para a assinatura digital6 e o certificado
digital7. A Figura 6 ilustra como é realizado o processo de criptografia de chave assimétrica.
Principais Algoritmos de Criptografia Assimétrica6Serve para verificar a autenticidade e a integridade da mensagem.7Utilizado para verificar se uma chave pública é mesmo de determinado usuário.
38
Figura 6: Método de criptografia de chave assimétrica.Fonte: Elaborada pelo autor (2018).
• DSA - Digital Signature Algorithm: Algoritmo que opera sobre o hash da
mensagem SHA-1. Para verificar a assinatura, um pedaço do código calcula o hash
e outro pedaço usa a chave pública para decifrar a assinatura, e, por fim ambos
comparam os resultados, garantindo a autoria da mensagem. Utilizando chaves de
512 à 1024 bits, o DSA somente assina e não garante confidencialidade (STALLINGS,
2008).
• RSA: Desenvolvido por Ron Rivest, Adi Shamir e Leonard Adleman em 1977 (STAL-
LINGS, 2008) a segurança desse algoritmo está diretamente relacionada com a di-
ficuldade de realizar fatorações. Utilizam chaves com 1000 bits e em níveis mais
críticos; chaves com 2000 bits também são utilizadas.
• Diffie-Hellman: Foi o primeiro algoritmo de chave pública, criado em 1976 (DIFFIE;
HELLMAN, 1976), e leva o nome dos inventores Whitfield Diffie e Martin Hellman.
Baseia-se no uso de chaves logarítmicas discretas.
• Curvas elípticas: Técnica inicialmente proposta em 1985 por Victor Miller e Neal
Koblitz como uma atraente forma de implementação de um sistema de chave pública
em algumas das aplicações existentes. Baseada na matemática das curvas elípticas,
com argumentos de que a ECC pode ser mais rápida e utilizar chaves mais curtas
do que os métodos como RSA, podendo proporcionar ao mesmo tempo um nível de
segurança equivalente (BARRETO, 1999)
39
Nome do Algoritmo Tipo de Encriptação Tamanho da ChaveDSA Assinatura digital Logaritmo discretoRSA Confidencialidade, assinatura
digital e troca de chavesFatorização
Diffie-Hellman Troca de chaves Logaritmo discretoCurvas elípticas Confidencialidade, assinatura
digital e troca de chavesUso de pontos de curvas elípticas
Tabela 2: Principais algoritmos criptográficos assimétricos.Fonte: (FERNANDES, 2013).
Funções Hashing
A técnica mais utilizada para realizar a verificação e garantir a integridade do dados é
a hashing, que é o resultado de uma função matemática que calcula a quantidade de dados
armazenados ou transmitidos no meio de comunicação. Quando ocorre uma transmissão,
a mensagem é processada na origem, calcula-se a hashing e em seguida envia-se o hashing
junto com a mensagem; quando a mensagem chega ao destino, o cálculo é refeito para
depois comparar o novo hashing com o que foi recebido, junto com a mensagem. Se o valor
estiver diferente, implica que a mensagem foi alterada e esse mesmo processo é realizado
com as mensagens armazenadas. A seguir algumas características fundamentais para a
hashing (FERNANDES, 2013).
• A entrada da função de hashing pode ser de qualquer tamanho para cálculo;
• O hash sempre tem o tamanho fixo;
• Devem ser fáceis de computar;
• O hash é unidirecional e impossível de converter;
• O hash é livre de colisão, ou seja, dois textos diferentes não podem possuir o mesmo
hash.
O SHA1 (Secure Hash Algorith,) e o MD5 (Message-Digest algorithm 5) são os
principais algoritmos de Hashing. O primeiro realiza o cálculo sobre uma mensagem de
qualquer tamanho, gerando um resultado (digest) de 512 bits. É utilizado em conjunto
com os algoritmos criptográficos DES (Data Encryption Standard), Triple DES e AES
(Advance Encryption Standard). O MD5, criado em 1991, processa a entrada em blocos
de mensagens de 512 bits e gerar o Dgest (hash) de 128 bits, estando sujeito a colisões
(FERNANDES, 2013).
40
2.4 OpenSSL
O OpenSSL é um toolkit de código aberto, que implementa os protocolos SSL e TLS,
e funções criptográficas de uso geral. É escrito em linguagem de programação C, o que
facilita a implementação em seus códigos (OPENSSL.ORG, 2018). Suas versões estão dis-
poníveis para a maioria dos sistemas operacionais: Unix, Windows e MAC OS. As bibli-
otecas compartilhadas do OpenSSL são pré-instaladas em muitas distribuições Linux. O
OpenSSL consiste em três componentes principais: bibliotecas (libcrypto e libss) e duas
ferramentas de linha de comando que serão descritas a seguir(OpenSSL).
Pelo fim dos anos 1990, grandes empresas já realizavam vendas de produtos pela
internet, o que se tornou conhecido como e-commerce. Atualmente, esse tipo de negociação
é comum e o seu crescimento foi extremamente elevado quando comparado ao seu início.
Hoje, até mesmo os mais desconfiados já realizam compras pela rede, ou acessam suas
contas bancárias através de portais web dos seus bancos (Internet Banking). Grande parte
dos usuários de internet já realizam transações financeiras, pagando contas ou comprando
através da rede, trocando todos os dias informações sensíveis através da internet. Estas
informações variam desde um simples e-mail pessoal até números de cartão de crédito.
Como a maioria dos dados que são compartilhados são extremamente sigilosos a todo
o momento pela internet, a segurança se tornou um ponto crucial para os negócios e
organizações. E para garantir uma proteção na transmissão de dados, com o uso dos pro-
cessos de criptografia, fez-se necessária a utilização de um protocolo efetivo para atender
amplamente todos os tipos de transação realizada pela web. Este protocolo é o Secure
Socket Layer, mais conhecido como SSL, que se apresenta juntamente com o seu sucessor,
o Transport Layer Security (TLS).
Segundo Stallings (STALLINGS, 2008), o SSL possui pontos principais:
• Oferece serviços de segurança entre TCP (Transmission Control Protocol) e apli-
cações que usam TCP. Sua versão padrão na internet é TLS (Transporte Layer
Service).
• Confidencialidade usando criptografia simétrica e integridade de mensagens usando
código de autenticação de mensagens.
• Inclui mecanismos de protocolo para permitir que dois usuários TCP determinem
os mecanismos e os serviços de segurança que eles usarão.
41
2.5 Justificativa para a Necessidade do Protocolo
Para entender o SSL, é necessário entender o ambiente para o qual ele foi desenvolvido.
Mesmo que o SSL seja um protocolo flexível que pode ser utilizado em muitas aplicações
diferentes, originalmente ele foi desenvolvido para a internet. Seus inventores precisavam
tornar o comércio eletrônico e outras transações pela web mais seguras. Um ambiente de
fato muito perigoso. Por exemplo, (THOMAS, 2000) mostra o que acontece quando um
usuário em Berlim executa uma compra online em um site de San Jose, Califórnia, na
Figura 7.
Figura 7: Caminho, através dos sistemas, de Berlim a San José.Fonte: (THOMAS, 2000).
A Figura 7 mostra todas as rotas de endereçamentos que as mensagens, incluindo
dados sigilosos, como número de cartão de crédito, passam até chegar ao receptor ou
a quem de fato está sendo solicitado, nesse caso, na Alemanha, passando por diversos
países. Desta forma, em meio a esse caminho todo, a mensagem pode sofrer alguma
interferência, pois atravessa diversas instalações, as quais algumas pertencem às empresas
privadas, muitas das quais não estão sujeitas a uma regulamentação ou a algum tipo de
lei que garanta a privacidade das informações que elas transportam. Assim, elas podem
42
ser “roubadas” em alguma parte dessa viagem.
Pinheiro et al. (PINHEIRO F. V.; VIEIRA; SILVA, 2016) explica da seguinte maneira: Nem
o usuário, nem o servidor possuem controle a respeito do caminho que suas mensagens
seguirão, também não podem controlar quem irá examinar o conteúdo das mensagens
através da rota. É como se o usuário escrevesse o número do seu cartão de crédito em
uma carta e a colocasse em uma garrafa. O usuário não tem controle sobre como esta
mensagem atingirá o seu destino e qualquer um no caminho pode facilmente ler a sua
carta. A Figura 8 mostra bem a descrição feita em Pinheiro et al.
Figura 8: Caminho físico da Califórnia à Alemanha.Fonte: (PINHEIRO F. V.; VIEIRA; SILVA, 2016).
2.6 Surgimento do SSL
Diante da situação crítica que era a grande massa de dados sigilosos sendo compar-
tilhada pela web, a área de segurança na internet se tornou uma importante personagem
nesse meio. A Netscape Communications já considerava riscos de segurança desde o desen-
volvimento do seu primeiro navegador web. Para garantir a segurança nestas transações, a
Netscape desenvolveu o Secure Socket Layer protocol. A Figura 9 apresenta um diagrama
mostrando a evolução do SSL em paralelo à internet, segundo Thomas (THOMAS, 2000).
43
Figura 9: SSL foi desenvolvido juntamente com os primeiros navegadores web.Fonte: (THOMAS, 2000) .
O SSL é um protocolo que se utiliza de dois tipos de criptografia (Assimétrica e
Simétrica),em que, inicialmente estabelece a conexão com uma criptografia assimétrica.
Através desta conexão segura, realiza a troca de chave da criptografia simétrica e, por
fim, continua a comunicação dos dados com uma criptografia simétrica. Segundo Stallings
(STALLINGS, 2008), este fluxo resolve diversos problemas que se têm utilizando os modelos
de criptografia simétrica/assimétrica separadamente.
O SSL foi criado como um protocolo separado para segurança, sendo considerado uma
nova camada na arquitetura TCP/IP, conforme demonstrado na Figura 10, no processo
de camadas considerando seguro, com o Protocolo inserido.
44
Figura 10: O protocolo considerado como uma nova camada na arquitetura TCP/IP.Fonte: Elaborada pelo autor (2019).
Essa metodologia permite que o SSL seja utilizado para outras aplicações que não
sejam o HTTP, como, por exemplo, FTP, POP3 e SMTP, conforme demostra a Figura
11.
Figura 11: Utilização do SSL por outras tecnologias.Fonte: Elaborada pelo autor (2019).
Segundo Pinheiro et al. (PINHEIRO F. V.; VIEIRA; SILVA, 2016), a Netscape Communi-
cations desenvolveu as primeiras três versões do SSL com uma assistência significante da
comunidade web. Apesar de o desenvolvimento do SSL ter sido "aberto"e a própria Nets-
cape ter encorajado outros da indústria a participar, o protocolo tecnicamente pertence
à Netscape (de fato, a Netscape recebeu a patente dos EUA).
Entretanto, em 1996, o desenvolvimento do SSL se tornou responsabilidade de uma
organização internacional de padrões, a Internet Engineering Task Force (IETF). O IETF
desenvolve muitos dos protocolos padrões para a internet, incluindo, por exemplo, TCP/IP.
45
Para evitar qualquer imparcialidade em relação a alguma empresa em particular, o IETF
renomeou SSL para Transport Layer Security (TLS).
Ainda em Pinheiro et al. (PINHEIRO F. V.; VIEIRA; SILVA, 2016),afirma-se que, atual-
ment, todos os navegadores e servidores web suportam o SSL. Pode-se observar o prefixo
"HTTPS": para uma URL segurada pelo SSL. Alguns navegadores também exibem um
pequeno ícone para indicar segurança, ou seja, o SSL funciona sem que o usuário se preo-
cupe com o que está acontecendo, apenas tendo a certeza de que os seus dados estão sendo
compartilhados com confidencialidade, autenticação, segurança e integridade através da
internet.
2.7 Arquitetura, Propriedades e Funcionamento
O protocolo SSL é utilizado principalmente sobre o modelo Cliente-Servidor. Esta
distinção é muito importante, porque o SSL exige que cada um dos sistemas se comporte
de forma diferente e única. Stalling (STALLINGS, 2008) considera o cliente como sendo o
sistema que inicia a comunicação segura, enquanto o servidor responde ao pedido do cli-
ente. No modo mais comum de aplicação do SSL, a navegação Web segura, os navegadores
(Firefox, iExplorer, Chrome, etc.) são os cliente e o site é o servidor. Estes dois papéis se
empregam em todas as aplicações que usam o SSL.
Para o SSL, Pinheiro et al. (PINHEIRO F. V.; VIEIRA; SILVA, 2016) afirma que as dis-
tinções mais importantes entre cliente e servidor são suas ações durante a negociação dos
parâmetros de segurança. Logo que o cliente inicia a comunicação, ele tem a responsabi-
lidade de propor ao servidor um grupo de opções que dizem respeito aos algoritmos de
criptografia e funções hash a serem utilizados durante toda a comunicação. O servidor
verifica a melhor (mais segura) opção de algoritmos e funções hash entre ele e o cliente e
então decide o que será utilizado.
Sem a utilização do SSL, uma conexão é estabelecida com o seguinte fluxo:
1. Handshake TCP 8
2. O cliente e o servidor iniciam o processo normal definido pelo protocolo de camada
de aplicação (HTTP, SMTP, FTP, POP3 e outros)
Com a utilização do SSL, uma conexão é estabelecida com o seguinte fluxo:8Apresentação em três vias.
46
1. Handshake TCP
2. Processo de autenticação e encriptação
3. O cliente e o servidor iniciam o processo normal definido pelo protocolo de camada
de aplicação (HTTP, SMTP, FTP, POP3 e outros)
Segundo, (ROCHA; PEDROSO; JUNIOR, 2003), dentre suas propriedades, o protocolo
SSL proporciona: segurança criptográfica, interoperabilidade, escalabilidade e eficiência.
• Segurança criptográfica: O SSL deve ser usado para estabelecer uma conexão
segura em duas partes;
• Interoperabilidade: Programadores independentes podem desenvolver aplicações
utilizando o SSL que, então, será capaz de trocar parâmetros criptográficos sem o
conhecimento de um outro código;
• Escalabilidade: SSL provê que novos métodos de criptografia possam ser adicio-
nados, se necessários. Isso se faz para evitar a criação de um novo protocolo, alé, do
risco de ter que implementar uma nova aplicação segura e, com isso, anular o risco
de uma falha;
• Eficiência: Operações criptográficas costumam usar intensivamente o CPU e, par-
ticularmente, operadores de chave pública. Por essa razão, o SSL tem incorporado
o sistema de cachê de sessão para reduzir o número de conexões que necessitam ser
estabilizadas desde o começo. Além do mais, um cuidado muito especial tem sido
tomado para reduzir a atividade de rede.
Estabelecendo uma comunicação
Conforme descrição anterior, todas as comunicações utilizam o protocolo Handshake.
É negociada uma conexão segura entre o Cliente e o Servidor, através de uma série de
passos, em que são decididos os algoritmos que vão ser utilizados e a geração dos segredos,
que são geralmente números aleatórios, nos seguintes passos:
• Negociação dos algoritmos a serem utilizados;
• Troca de chaves (segredos) e autenticação;
• Encriptação simétrica e autenticação de mensagens.
47
As quatro etapas a seguir foram sugeridas na leitura de (PINHEIRO F. V.; VIEIRA;
SILVA, 2016), (STALLINGS, 2008) e (THOMAS, 2000). Na primeira fase, cliente e servidor
decidem quais os algoritmos suportados por ambos que serão utilizados na comunicação
(RSA, DAS, ECDSA). O cliente faz o pedido a um servidor que suporte o protocolo
SSL por uma conexão segura e lhe envia uma lista com os algoritmos disponíveis para a
encriptação e a autenticação dos dados.
Na segunda fase, o servidor recebe o pedido e escolhe dentre os algoritmos da lista
do cliente o mais forte; ele também possui esse algoritmo, e o avisa desta decisão. Ambos
trocam chaves e realizam a autenticação - são utilizados algoritmos de chave pública
(RSA, Diffie-Hellman, etc). Para sua autenticação, o servidor envia sua identificação na
forma de um certificado digital. Este certificado normalmente contém o nome do servidor,
a Autoridade Certificadora para verificação e sua chave pública.
Na terceira fase, as mensagens são autenticadas por códigos gerados por funções hash
HMAC-MD5 ou HMAC-SHA. Daí em diante as mensagens são trocadas com integridade,
segurança e autenticação depois de passarem pelo SSL Record Protocol. Na maioria dos
casos, a autenticação do servidor é feita através de uma Autoridade Certificadora (AC).
Dessa maneira, o cliente utiliza uma chave pública da própria AC para validar sua assi-
natura no site do servidor. A AC deve estar na lista de AC’s confiáveis para ter certeza
de que o servidor é quem ele diz ser, como demostra a Figura 12.
Figura 12: Estabelecimento de uma conexão segura com SSL.Fonte:(PINHEIRO F. V.; VIEIRA; SILVA, 2016).
Em relação aos protocolos, o SSL tem em sua composição quatro tipos, que são:
48
Record Protocol, Handshake Protocol, Alert Protocol e Change Cipher Spec.
• Record Protocol:
Segundo Thomas (THOMAS, 2000), a comunicação do protocolo SSL se dá através
da comunicação de pacotes, que encapsulam os dados que estão sendo trocados. O
Record Protocol funciona realizando o tratamento dessa comunicação e na entrada
e saída de dados da camada. Recebendo os dados das camadas superiores, encap-
sula, encripta e/ou adiciona Message Authentication Codes (MACs) para garantir a
segurança, a integridade e a autenticação das mensagens e as envia ao destinatário,
que deve fazer o processo inverso, o que prova que ele (o Record Protocol) possui
independência em relação aos protocolos de aplicação.
• Alert Protocol:
Thomas (THOMAS, 2000) explica que o Alert Protocol foi desenvolvido para a troca
de mensagens que dizem respeito ao funcionamento e à transmissão de dados na
conexão, em que cada mensagem deste protocolo é composta por dois bytes, sendo
o primeiro para indicar seu caráter (que pode ser dos tipos "warning" ou "fatal").
Quando algum dos lados da comunicação recebe um alerta de caráter fatal, a trans-
missão de dados é interrompida imediatamente. O segundo byte da mensagem car-
rega o código definido referente ao alerta ou erro ocorrido.
• Change Cipher Spec:
Ainda em Thomas (THOMAS, 2000), o mais simples de todos é o Change Cipher Spec,
pois consiste em somente uma mensagem. Esta mensagem significa que a sessão será
passada para um estágio fixo e que a partir deste momento toda comunicação será
criptografada de acordo com as negociações no Hello Protocol. Esta mensagem deve
ser enviada tanto pelo cliente quanto pelo servidor. Após a troca das mensagens,
a sessão é considerada aberta e todas as mensagens de dados ou qualquer outro
protocolo serão transferidos utilizando o Record Protocol.
• Handshake Protocol:
Como vimos anteriormente, ele negocia uma conexão segura entre o cliente e o
servidor, através de uma série de passos, em que é decidido quais algoritmos vão
ser utilizados e como será feita a geração dos segredos, que são geralmente números
aleatórios.
49
2.8 TLS - O sucessor do SSL
Segundo Pinheiro et al. em (PINHEIRO F. V.; VIEIRA; SILVA, 2016), em 1996, o TLS
foi o nome adotado pela IETF para desenvolver um protocolo de segurança padronizado,
baseado no SSL 3.0. Entretanto, existem algumas pequenas diferenças entre SSL e TLS.
O protocolo permanece substancialmente o mesmo (tanto é verdade que o protocolo TLS
1.0 é por vezes identificado como SSL 3.1), embora eles possuam normas diferentes. É
muito comum encontrar aplicações que suportam ambos (SSL/TLS). Os dois protocolos
não interoperam (somente um deve ser escolhido no momento da negociação), ou seja,
não trabalham juntos.
Thomas (THOMAS, 2000) explica que para projetos relacionados a servidores, espe-
cialmente de Opensource, o protocolo TLS está substituindo o SSL. Nos computadores
clientes, o protocolo SSL3 é o padrão, porém, em alguns casos, o TLS é o protocolo padrão
em computadores clientes. Havendo a necessidade pode-se utilizar o SSL para algumas
aplicações que não fazem uso do TLS.
Quando se trata de aplicações web utilizando um navegador, na maioria das vezes o
TLS funciona unilateralmente, ou seja, somente o servidor é autenticado. É feito assim
pela funcionalidade e pelo tipo de negócio de que se trata. Normalmente, é o usuário que
precisa saber da autenticidade do servidor para compras on-line. Mesmo assim, o TLS
também suporta o modo bilateral de conexão, no qual os dois lados são autenticados e
têm certeza de com quem estão "falando". Este modo é chamado de autenticação mútua.
O TLS tem a capacidade de trabalhar em portas diferentes e usa algoritmos de crip-
tografia mais fortes como o keyed-Hashing for Message Authentication Code (HMAC),
enquanto o SSL usa apenas Message Authentication Code (MAC). O TLS pode ser uti-
lizado por uma autoridade intermediária, não sendo sempre necessário recorrer à raiz de
uma Autoridade de Certificação. O protocolo TLS foi criado, como o sucessor do SSL. É
mais frequentemente usado como uma configuração nos programas de e-mail, mas, assim
como o SSL, o TLS pode ter um papel em qualquer transação cliente-servidor.
Recursos criptográficos
A biblioteca libcrypto implementa uma ampla gama de funções criptográficas relaci-
onadas, que inclui: criptografia simétrica, criptografia assimétrica (chave pública), mani-
pulação de certificados e funções hash.
50
Os serviços fornecidos por estas bibliotecas são usados pelas implementações da fer-
ramenta de linha de comando OpenSSL junto com os protocolos SSL/TLS. As informa-
ções desta biblioteca também podem ser usadas por outras aplicações, como OpenSSH,
OpenPGP e outras (OPENSSL.ORG, 2018). A biblioteca OpenSSL fornece vários algorit-
mos de criptografia simétricos, dentre eles estão AES, DES, Blowfish, IDEA. A maioria
pode trabalhar em modos de blocos ou em fluxo, que são:
Modos de bloco:
• ECB (Electronic Codebook): Divisão da mensagem em blocos em que cada bloco é
criptografado separadamente.
• CBC (Chiper Block Chaining): Para cada bloco de texto simples é aplicada uma
função XOR junto com o bloco cifrado anterior antes do texto ser criptografado.
Modos de fluxo:
• CFB-x (Chiper Feedback): É cifrado o texto anterior e usado como entrada para
o algoritmo criptográfico de forma a produzir uma saída pseudo-aleatória, que é o
XOR com o texto claro para produzir a próxima unidade de texto cifrado.
• OFB (Output Feedback): Tratada a mensagem como um fluxo de bits, a saída da
cifra é adicionada à mensagem por XOR, pode ser computada com antecedência,
pois a saída da cifra é a realimentação.
• CTR (Counter Mode): Cada bloco de texto claro é XOR com um contador cripto-
grafado.
O modo CFB pode operar em segmentos de 1 bit, 8 bits ou igual ao tamanho do bloco
da cifra de bloco subsequente. A biblioteca libcrypto proporciona API’s que permitem que
essa codificações sejam utilizadas para encriptar e decriptar os Dados.
51
3 Algoritmo Papílio Versátil
Este capítulo apresenta o algoritmo de criptografia que será implementado, junta-
mente com suas evoluções, que serão descritas em forma cronológica. O algoritmo Papílio
em sua primeira versão, desenvolvido por (RAMOS, 2002) abordando suas característi-
cas. Em seguida sua evolução o PapílioXP, de (ARAÚJO, 2003), com suas propriedades
criptográficas. O Papílio Versátil, desenvolvido por (NETO, 2009) que, possui todas a pro-
priedades do seu antecessor, porém com um tamanho de chave variável, assim como a
construção de subchaves.
3.1 Papílio Original
O algoritmo de criptografia Papílio (Original) proposto por (RAMOS, 2002) faz o uso
do algoritmo Viterbi Modificado como função F do codificador Feistel, para alcançar os
princípios de difusão e confusão e avalanche do codificador Feistel. Além da função F, o
Viterbi Modificado também é utilizado para geração das subchaves.
O algoritmo Papílio realiza a criptografia do texto através de cifras de blocos, em
que ele transforma cada bloco de entrada em um bloco correspondente de saída. Essa
entrada se divide em dois argumentos, o texto que deseja cifrar e a chave criptográfica. Já
o processo de decriptação é bastante similar, diferindo apenas em dois aspectos: o texto
de entrada é um texto anteriormente cifrado pelo Papílio e a Rede de Feistel processa da
última camada para a primeira para recuperar o texto original.
Algumas características peculiares do Papílio, já que ele é baseado na cifra de bloco
Feistel, são os tamanhos dos blocos de entrada que possuem 8 Bytes (64 bits) juntamente
com a chave, que possui tamanho de 16 Bytes (128 bits), e um processo de cifragem com
16 rodadas. O algoritmo Papílio tem a mesma estrutura de uma cifra Feistel. A Figura
13 apresenta uma volta (cilco) do Papílio, em que F é o algoritmo Viterbi Modificado, e
a geração de subchave.
52
Figura 13: Representação de um volta do Algoritmo Papílio.Fonte: (RAMOS, 2002).
Algumas Características do Algoritmo Papílio
De acordo com (RAMOS, 2002) as características do algoritmo proposto são: tamanho
do bloco, tamanho da chave, número de voltas, geração de subchaves e função utilizada.
Tamanho do bloco
Ramos, (RAMOS, 2002), explica que, com o objetivo de evitar a análise estatística por
parte de um intruso, bem como evitar complexidade de implementação, o tamanho do
bloco para codificação foi definido em 64-bits. Este tamanho é reconhecido como sufici-
entemente forte em (STALLINGS, 2008) e é utilizado nos seguintes sistemas criptográficos,
DES, Blowfish, IDEA.
Tamanho da chave
Como alegado por (RAMOS, 2002), a segurança de um algoritmo convencional depende
do segredo da chave, e não do algoritmo. Os tamanhos das chaves criptográficas são medi-
das em bit e a dificuldade de tentar todas as chaves possíveis cresce exponencialmente com
o número de bits usados. Para cada bit adicionado à chave, o número possível de chaves
é dobrado; adicionando 10 bits, aumenta aos milhares (210) o número de chaves possíveis,
lembrando que quanto maior o tamanho da chave, maior é a segurança, porém a veloci-
dade de codificar ou decodificar diminui, tendo uma relação inversamente proporcional.
O que deu o tamanho de chave de 128 bits para o algoritmo.
53
Número de voltas
Ramos,(RAMOS, 2002), explica que, visando dificultar a criptoanálise, adotou-se a
quantidade de 16 voltas pois, mesmo que a tabela de codificação não ofereça uma segu-
rança adequada, uma maior quantidade de voltas dificulta a execução da criptoanálise.
O codificador Feistel utiliza 16 voltas, pois a segurança oferecida por apenas uma volta é
inadequada.
Geração de subchaves
Esse algoritmo utiliza uma chave de 128-bits, a qual gera 16 subchaves. As subchaves
criadas são armazenadas temporariamente em uma matriz até que o processo de codifi-
cação do bloco seja finalizado.
Viterbi Modificado
O algoritmo Viterbi Modificado adota a Codificação Convolucional e a Decodifica-
ção Viterbi utilizando os seguintes componentes básicos: registradores de deslocamento
e módulos somadores, em que determinam-se os polinômios geradores do par de bits da
saída. Segundo (RAMOS, 2002) o objetivo do algoritmo Viterbi Modificado é ampliar o
espaço de decodificação, a fim de possibilitar a geração de tabelas que serão utilizadas na
criptografia de dados e tratar qualquer fluxo de bits de entrada.
Ainda em (RAMOS, 2002), a execução do algoritmo Viterbi Modificado inicia-se no
estado 0 e executa o algoritmo Viterbi, até que um rótulo de entrada não seja tratável
no estado atual. A partir da tabela gerada pela codificação convolucional, identifica-se os
rótulos que poderão ser tratados por cada estado, acrescentando ao novo fluxo de saída a
informação 0.
Por exemplo, na Tabela 3, os pares 00 e 11 são tratados pelos estados 0 e 1. Neste caso,
os fluxos de saída dos respectivos pares receberão a informação 0 na saída S1, enquanto
a saída S0 receberá o resultado do algoritmo Viterbi.
54
Fluxo inicial: 00 11 00 00 01 Os rótulos não tratáveis estão sublinha-dos
Fluxo de saída S0 0 1 x x x Incerto após o segundo rótulo devido àintratabilidade
Codificação Convolucional 10 11 Estado final da Codificação convoluci-onal é o estado 0 (zero)
Decodificação Viterbi - - 0 0 Usa-se como estado inicial o estadoatual
Fluxo de saída S1 0 1 0 0 x Considera-se apenas o primeiro rótulode tamanho 1 bit. Continua-se a aplicaro algoritmo Viterbi usando-se como es-tado inicial o estado final da convolução(estado zero)
Codificação Convolucional 00 11 Estado final da Codificação convoluci-onal é o estado 2 (dois)
Decodificação Viterbi - - - - - 0 1 Usa-se como estado inicial o estadoatual
Fluxo de saída S0 0 1 0 0 0 Considera-se apenas o primeiro rótulode tamanho 1 bit. Continua-se a aplicaro algoritmo Viterbi usando-se como es-tado inicial o estado final da convolução(estado dois)
Fluxo de saída S1 0 0 1 0 1 Igual a 1 (um) apenas onde os rótulosnão são tratáveis
Tabela 3: Exemplo de execução do algoritmo Viterbi Modificado.Fonte: (RAMOS, 2002).
Na Tabela 3, é descrito o processo de execução do algoritmo Viterbi Modificado,
considerando uma taxa de 1/2, descrevendo, segundo (RAMOS, 2002): com o fluxo de bits
0011000001, observa-se que os dois primeiros rótulos de dois bits podem ser tratados com
o algoritmo Viterbi iniciando-se no estado 0 (zero). O terceiro rótulo, entretanto, não pode
ser tratado, pois o estado atual, no momento de sua codificação, é o estado 2 (dois).
O processo de codificação convolucional do rótulo não tratável resulta nos rótulos
adicionais 10 e 11 e no estado final 0 (zero). O quarto rótulo é tratável, usando-se o
algoritmo Viterbi, pelo estado final do processo de codificação convolucional, resultando,
após a aplicação do algoritmo de viterbi, o estado atual 0 (zero).
O quinto rótulo não é tratável por este estado. Repete-se então o processo de codifi-
cação convolucional, seguido de decodificação Viterbi, considerando-se apenas o primeiro
rótulo (de tamanho 1) da saída da decodificação Viterbi. Os fluxos de bit S0 e S1 são
independentes. Ao final da codificação os dois fluxos são concatenados, de forma a gerar
um fluxo de bit de mesmo tamanho do original.
55
Função utilizada
Em geral, os sistemas de criptografia utilizam diferentes funções para conseguirem
uma boa difusão e uma boa confusão. No algoritmo proposto, buscam-se esses elementos
através da função de substituição que utiliza as tabelas geradas a partir do algoritmo
Viterbi Modificado (RAMOS, 2002). O Papílio deriva da estrutura clássica do codificador
Feistel, conforme a Figura 14.
Figura 14: Estrutura do codificador.Fonte: (RAMOS, 2002).
56
OViterbi Modificado, baseado no algoritmo Viterbi com os polinômios e os parâmetros
(n/s=1/2,Q=3, m=2), pode ser simplificado usando-se a Tabela 4.
Estado Atual Entrada S0 S1 Próximo estado
0
00 0 0 001 0 1 210 1 1 111 1 0 2
1
00 1 0 201 0 1 210 1 1 111 0 0 0
2
00 0 1 001 1 0 310 0 0 111 1 1 3
3
00 0 1 001 0 0 110 1 0 311 1 0 3
Tabela 4: Resultado do algoritmo desenvolvido.Fonte:(RAMOS, 2002).
A descrição feita por (RAMOS, 2002) sobre o funcionamento do codificador é a seguinte:
a função F executa inicialmente um ou-exclusivo (XOR) bit a bit da subchave SC1 de
32 bits com o bloco do lado direito D1 de 32 bits. O resultado do ou-exclusivo passa
através de uma função de substituição que produz duas saídas de 16 bits (S0 e S1). Os
dois fluxos de saída, S0 e S1, são concatenados gerando um bloco de 32 bits. Executa-se
um ou-exclusivo do bloco de saída da função de substituição com o bloco E1. O papel da
função F é tornar o texto codificado dependente da chave e do texto claro, bem como fazer
com que cada bit do texto claro e da chave influencie em muitos bits do texto codificado.
3.2 PapilioXP
Em (ARAÚJO, 2003), foi realizado um estudo visando uma criptografia mais forte para
o Papílio, comparando com os melhores algoritmos existentes naquele ano, aumentando
consideravelmente as formas de encriptação de um texto. Segundo Araújo, a proposta
57
para PapílioXP é que se use um conjunto de máquinas de Papílio, mais precisamente 8
máquinas, geradas a partir dos polinômios eleitos pelo programa “torneio”.
Essas máquinas são escolhidas a cada rodada da rede de Feistel, utilizando uma função
de dispersão dupla. A razão para o uso de uma função de dispersão dupla é que elas
retornam índices que são equiprováveis para um vasto conjunto de entradas. Lembrando
que a estrutura de Feistel sempre garante o retorno deste semibloco a cada rodada, o
que significa que o algoritmo sempre acertará a máquina de estados que será usada no
processo de encriptação, e sempre acertará as máquinas para o processo de decriptação.
Outra modificação é o estado inicial que a máquina de estados assume na função
de substituição Viterbi Modificado. A proposta é que se aplique também uma função de
dispersão para se determinar o estado inicial da função Viterbi Modificado. A função de
dispersão utilizada é a mesma para a seleção das máquinas de estado nas rodadas da
rede de Feistel que usa como entradas o bloco que será processado pela função Viterbi
Modificado e um número inteiro como constante para a aplicação.
Em suma, a primeira modificação no algoritmo foi a utilização de blocos de 16 Bytes
(128 bits), diferente do Papílio de Ramos (RAMOS, 2002), que utilizava apenas blocos de
8 bytes (64 bits). Uma segunda modificação foi o aumento no número de máquinas de
estado, com o algoritmo Viterbi Modificado utilizando como função de substituição em
cada rodada, as quais são atribuídas (selecionadas) em função do sub-bloco e da subchave
recebida como entrada enquanto o Papílio original utiliza apenas uma máquina de estados
e um estado inicial fixo em todo o processo. Para comprovar o ganho de performance do
PapílioXP em relação à abordagem tradicional do Papílio, (ARAÚJO, 2003) confeccionou
um programa que mensura a avalanche a cada rodada, comparando os blocos gerados pela
codificação de um bloco e do mesmo bloco alterado em um bit no início.
O valor mostrado no gráfico, conforme Figura 15, por rodada, é o somatório das
distâncias de Hamming entre todos os blocos possíveis gerados alterando-se um bit (são
64 possibilidades) e o bloco original. O programa também mede o Hamming Interno, que
é o percentual de bits alterados com relação ao bloco de entrada a cada rodada, não se
fazendo alteração alguma no bloco de entrada. Sendo assim, o Papílio XP possui maior
proteção contra a criptoanálise, pois a escolha da máquina depende do texto claro e das
chaves utilizadas, que são informações que não estão disponíveis para um criptoanalista.
58
Figura 15: Papílio (tradicional) x PapílioXP na avalanche.Fonte: (ARAÚJO, 2003).
Com essas modificações realizadas por (ARAÚJO, 2003), houve o sucesso e realizaram
a primeira publicação sobre o Algoritmo, em (ARAÚJO et al., 2005) na qual, eles descrevem
o Papílio como um “[...] é um algoritmo de criptografia Feistel onde o processo codificador
(função F) é baseado no algoritmo Viterbi. O algoritmo de Viterbi foi proposto como uma
solução para decodificar códigos convolucionais. Existem vários parâmetros que definem
o código de convolução e o algoritmo de Viterbi; um deles é o polinômio gerador. Para
usar o algoritmo de Viterbi em criptografia, é necessário fazer algumas modificações. O
proposto não depende dos parâmetros de Viterbi nem dos parâmetros de convolução”.
Análise das Propriedades Criptográficas do PapílioXP
Para tornar o algoritmo Papílio mais eficiente, foi necessário selecionar um conjunto
de polinômios que confiram a Papílio bons índices criptográficos, contribuindo direta-
mente para tornar a criptografia produzida por ele mais forte. Para atingir os objetivos
de avalanche, confusão e difusão, os polinômios são fatores determinantes no processo de
encriptação, o que influencia diretamente nos valores de índices dos objetivos.
Avalanche
Sobre o critério da Avalanche no Papílio, em (ARAÚJO et al., 2005) utilizou-se das
médias das distâncias de Hamming entre o bloco de texto encriptado a partir de um bloco
59
de texto claro e o bloco proveniente da encriptação do bloco de texto claro alterado em
um bit em todas as possibilidades para calcular o nível de Avalanche.
Difusão
Em relação à difusão, ou destruição da informação estatística dos caracteres do texto
encriptado, foi calculado o desvio padrão das frequências do conjunto de caracteres do
texto cifrado.
Confusão
Na confusão, que é a influência que um bit da chave ou do texto claro tem na formação
do criptograma, foi usada a média das distâncias Euclidianas entre o texto encriptado do
texto claro com uma chave e todos os textos resultantes da encriptação do texto claro e
da chave alterada em um bit.
3.3 Papílio Versátil
Algoritmo desenvolvido em (NETO, 2009), é uma versão de outro algoritmo anterior
do papílio versátil, o XP de (ARAÚJO et al., 2005). Como o próprio nome diz, busca maior
versatilidade e segurança contra a criptoanálise. Ele processa blocos com o tamanho de
16 bytes (128bits) igual ao algoritmo que lhe deu a base. Entretanto, diferente do Papílio
XP, o Papílio Versátil possibilita a utilização de chaves de tamanho variável, alterando a
rigidez e possibilitando uso de chaves com os tamanhos entre 16 bytes (128 bits) e 128
bytes (1024 bits).
Segundo (NETO, 2009) explica que houve alteração no modo como são construídas
as subchaves do Papílio. Considerando que são processado blocos de 16 Bytes (128 bits),
devem-se gerar subchaves de tamanho de 8 Bytes (64 bits), tendo em vista a utilização
das mesmas na operação XOR com a metade direita do bloco da rodada, que contém 8
Bytes (64 bits).
O algoritmo de construção das subchaves consiste em formar blocos de 16 Bytes (128
bits) a partir da chave, de modo que estes possam servir de entrada para a função Viterbi
Modificado que, a partir desta entrada, gera duas subchaves de 8 Bytes (64 bits) cada.
Como a quantidade máxima de rodadas é igual a 16, devem-se ser formados 8 blocos de 16
Bytes (128 bits) a partir da chave, de modo que estes, após serem processados pela função
60
Viterbi modificado, gerem as 16 subchaves de 8 bytes (64 bits). A Figura 16 demonstra
esquematicamente como ocorre a geração das subchaves no Papílio Versátil.
Figura 16: Geração de Subchaves no Papílio Versátil.Fonte: (NETO, 2009).
O semibloco do lado direito não é modificado durante o processo da rodada, apenas
ocorre uma troca (permuta), na qual o mesmo passa a ser o bloco do lado esquerdo
na próxima rodada. Com isso, na descriptografia, esse mesmo semibloco é recuperado
normalmente. Sem a necessidade de guardar informação adicional no texto cifrado. Essa é
a ideia principal para que seja possível a variação de rodadas no algoritmo, como também
a variação das subchaves.
No Papílio Versátil, em (NETO, 2009), as subchaves alocadas em cada rodada são
escolhidas aplicando-se a função de dispersão dupla1. Assim, tal função irá retornar um
valor na faixa de 1 a 16, indicando qual é a subchave que será utilizada na rodada corrente.
Com isso, foi possível promover ao Papílio uma maior resistência contra ataques do tipo
de criptoanálise diferencial.
3.4 Criptoanálise Diferencial do Papílio
Para analisar a complexidade e a força contra ataques ao Papílio, Oliveira, (FILHO,
2010), aplicou a técnica de Criptoanálise Diferencial, introduzida por Biham e Shamir,
sobre o algoritmo Papílio, a fim de testar e, principalmente, provar sua relevância em
relação a outras cifras de blocos como DES, Blow-Fish e FEAL-N(X).1A função de dispersão dupla é composta por duas funções de dispersão, tendo como finalidade fornecer
um índice a partir de uma determinada entrada, que será utilizada para a escolha da máquina de estados.
61
O autor realizou uma análise das diferenças entre os pares de textos claros e a diferença
entre as suas respectivas cifras, em busca de padrões que auxiliarão nas descobertas das
sub chaves e, consequentemente, na descoberta da chave mestra, na qual está a segurança
da cifra. Estas diferenças são obtidas através de operações XOR.
Oliveira conclui que o Papílio Original (RAMOS, 2002) é uma cifra forte, mas com res-
salvas em relação ao tamanho do bloco de entrada e ao tamanho das subchaves utilizadas
por ele. Pois a chave é o principal mecanismo de segurança de uma cifra. Entretanto o
Papílio Original é quebrável, assim como as demais cifras testadas em (FILHO, 2010). A
criptoanálise diferencial demonstrou isso, descobrindo ou mesmo reduzindo o intervalo de
possíveis sub chaves para que seja possível sua quebra para as cifras DES, Blow-Fish e
FEAL-N(X).
Considerando que a versão utilizada em (FILHO, 2010) foi o Papílio Original e que
as versões posteriores aumentaram sua complexidade (aumento no tamanho da chave,
na variação do números de ciclos variáveis e do tamanho das chaves etc.), assim como
promoveram mudanças que melhoram o nível de segurança do Papílio, é possível destacar
que esta possibilidade de quebra ou descoberta de chaves também foi devidamente tratada
durante a evolução do Papílio.
62
4 Papílio no OpenSSL
A implementação segura de um algoritmo criptográfico não é uma tarefa trivial, nem
mesmo para os programadores mais experientes, pois requer um conhecimento cuidadoso
não apenas do próprio algoritmo, mas também da arquitetura alvo. Com isso, a integração
do algoritmo na biblioteca OpenSSL é realizada através de linhas de código. A biblioteca
OpenSSL pode fornecer ao Papílio uma maior visibilidade e condições de uso por todos
os tipos de usuários, além de ser mais uma opção para a biblioteca SSL.
4.1 Problemas e Desafios de Segurança Criptográfica
Os projetos com relação à segurança possuem alguns problemas e desafios de segu-
rança, que são clássicos. Esses desafios orientam o pesquisador para que se tenha uma
base e metas para definir se seu algoritmo obtém as soluções. Tais problemas podem ser
subdividos em:
A) Questões de segurança de dados: A proteção de dados desempenha um papel vital
na computação em nuvem; no entanto, ela se transforma em um empreendimento de
primeira classe, enquanto os clientes da SaaS devem depender de seus fornecedores
para garantir a segurança adequada. O provedor SaaS é o único responsável pelas
informações ao mesmo tempo em que está sendo processado ou salvo (PRAKASH
G. L.; SINGH, 2014); (BERTINO, 2016).
B) Questões de privacidade: Quando os dados são armazenados na nuvem, deve ha-
ver alguma medida de segurança: eles são acessíveis apenas por esse usuário com
um processo de autenticação rigoroso. Deve ser restrito para qualquer usuário não
autorizado alcançar os dados confidenciais (PRAKASH G. L.; SINGH, 2014).
C) Questões de confidencialidade dos dados: Os clientes da nuvem precisam garantir
que seus dados sejam mantidos exclusivos para pessoas de fora, juntamente com a
empresa de nuvem e seus concorrentes de capacidade (KAUR; KAUR, 2015).
63
D) Problemas de acessibilidade: O acesso a programas pela Internet via navegador de
rede torna o acesso a partir de qualquer dispositivo de rede, o que inclui sistemas
públicos de computadores e dispositivos móveis. No entanto, expõe adicionalmente
o fornecedor a perigos adicionais de segurança (KAUR; KAUR, 2015).
Tendo em vista que todos os itens foram alcançados, pode-se considerar que o algo-
ritmo é seguro e eficiente. Vale ressaltar que esses problemas e desafios não são vistos
apenas para a segurança em nuvem, mas sim para a segurança como um todo.
4.2 Cenário
Em um ambiente virtual, foi desenvolvido o cenário específico para simular a comuni-
cação cliente/servidor, através de uma aplicação que utilize o protocolo SSL/TLS, ambos
com a versão integrada.
Figura 17: Cenário estabelecido para a testes.Fonte: Elaborada pelo autor (2019).
Essas máquinas foram desenvolvidas em um servidor PowerEdge R740 DELL, com
um hardware de 64 gigas de memória e processadores escaláveis Intel R© Xeon R© de 2a
geração com até 28 núcleos por processador. As máquinas virtuais possuem 4 gigas de
memória e 4 núcleos.
64
Figura 18: Servidor ReginaLAB.Fonte: Elaborada pelo autor (2019).
Além de utilizar as máquinas virtuais, testes são realizados do host utilizado no labo-
ratório, em que também tenho máquinas virtuais para testes, a fim de utilizar o OpenSSL
sem a implementação do Papílio. Com a ajuda da ferramenta Wireshark, pacotes de tráfe-
gos foram capturados, tornando possível a análise dos pacotes e constatando a integração
do Papílio ao protocolo SSL. O conteúdo capturado pelo Wireshark será utilizado como
base de dados para uma análise comparativa do Papílio com as principais cifras de bloco
(Camellia, DES, AES), com o intuito de melhorar o nível de segurança do OpenSSL.
4.3 Metodologia do Desenvolvimento
De acordo com os passos que foram definidos na qualificação, base para o desenvol-
vimento desta dissertação, as seguintes etapas foram formuladas a fim de desenvolver a
conclusão do trabalho.
Etapa 1: Estudo para compreender e analisar as versões do algoritmo Papílio, para que, as-
sim, ocorra a escolha da versão mais indicada para a integração com a biblioteca
OpenSSL.
Etapa 2: Realizar o levantamento bibliográfico acerca do OpenSSL em seu portfólio (OPENSSL.ORG,
2018) e no seu Github (GITHUB, 2018), e sobre as implementações realizadas de al-
goritmos no kit de ferramentas OpenSSL.
65
Etapa 3: Escolha da versão do OpenSSL para dar início à codificação, através de um estudo
via (GITHUB, 2018), para entender os vários modelos e tipos de implementações,
além das correções e modificações do protocolo que são necessárias.
Etapa 4: Realizar a implementação do algoritmo Papílio na biblioteca OpenSSL, de acordo
com o modelo de (JURKIEWICZ; NIEMIEC, 2016) e a RFC (KATO; KANDA; KANNO,
2010), modificando e inserindo a codificação nos arquivos e diretórios do kit de
ferramentas e da biblioteca, para que possa, assim, ocorrer de fato a inclusão do
Algoritmo no OpenSSL, após sua compilação.
Etapa 5: Desenvolver o ambiente para testes, com as máquinas virtuais, aplicações cliente/-
servidor com a utilização do OpenSSL e a execução do Wisreshark, para que possa-
mos validar e afirmar que o algoritmo está funcionando como se fosse um algoritmo
padrão da biblioteca.
Etapa 6: Realizar uma análise comparativa do Papílio Versátil em relação as outras cifras
simétricas de bloco do OpenSSL via o ambiente de testes descrito na etapa anterior.
4.4 Etapas Desenvolvidas
Conforme a metodologia apresentada na seção 3.2, serão descritas nesta seção as
etapas realizadas, para que seja possível o entendimento do processo de implementação
de uma cifra criptográfica no OpenSSL.
Na etapa 1, conforme a metodologia apresentada e concluída, foi possível realizar
o levantamento bibliográfico do algoritmo Papílio e suas derivações ao longo dos traba-
lhos desenvolvidos por (RAMOS, 2002), (ARAÚJO, 2003) e (NETO, 2009). Assim como em
(FILHO, 2010), (FILHO et al., 2013), (FILHO, 2014) e (FILHO et al., 2017), em que os au-
tores abordam o algoritmo Papílio em outras vertentes, como criptoanálise diferencial do
Papílio e Algoritmo Papílio como Método de Proteção de Templates para Aumentar a
Segurança em Sistemas de Identificação Biométricos.
Na etapa 2, o levantamento bibliográfico sobre o OpenSSL, realizado através de
estudos do OpenSSL (OPENSSL.ORG, 2018) e do sistema de gerenciamento de projetos e
versões de códigos, assim como uma plataforma de rede social criada para desenvolvedores
(GITHUB, 2018).
As etapas 3 e 4 tratam sobre a escolha da versão do OpenSSL e da implementação
do algoritmo Papílio Versátil, respectivamente. Após a escolha da versão do OpenSSL a
66
ser utilizada, foi necessário a realização dos procedimentos a seguir:
• Inicialmente, antes de compilar o diretório OpenSSL, é necessário anexar o diretório
do /papilio no subdiretório /crypto, em que estão localizados todos os algoritmos
utilizados pelo OpenSSL, conforme pode ser visto na Figura 19.
Figura 19: Destaque do subdiretório do Papílio.Fonte: Elaborada pelo autor (2019).
• Outro procedimento necessário foi a adequação do algoritmo para que o mesmo
trabalhasse em harmonia com o OpenSSL. Neste caso, o algoritmo de criptografia
Camellia foi tomado como modelo para a realização dessa etapa. Por exemplo, todas
as funções ECB, CBC, CFB, CBC e OFB, que estavam apenas em um único arquivo,
tiveram que ter seus próprios arquivos.
Figura 20: Listagem do subdiretório Papílio.Fonte: Elaborada pelo autor (2019).
• No diretório principal do openssl, no arquivo Makefile, foi necessário definir as re-
gras para a compilação do Papílio Versátil. Na linha 151, conforme Figura 21, são
definidos os diretórios dos algoritmos de criptografia.
67
Figura 21: Implementação do arquivo Makefile.Fonte: Elaborada pelo autor (2019).
• Ainda no mesmo diretório no arquivo config, na linha 906, estão listados os algo-
ritmos, em que adicionamos o papílio. Nesta linha, estão as configurações para o
suporte dos engines, que são um suporte embutido para aceleração criptográfica.
Figura 22: Suporte engine.Fonte: Elaborada pelo autor (2019).
• No arquivo Configure, as implementações do papilio ocorrem em várias linhas. Esse
arquivo possui instruções para a criação e configuração de diretórios. Os arquivos
Configure e a config são utilizados para ajustar o processo de compilação e instalação
por meio de opções.
• A inclusão do arquivo e_papilio no diretório /crypto/evp. Este arquivo deve ser
criado manualmente. Ele contém chamadas de funções EVP de alto nível para fun-
ções de nível inferior que implementam um novo algoritmo, definido no arquivo de
cabeçalho principal (papilio.h).
68
Figura 23: Trecho de código do arquivo e_papilio.Fonte: Elaborada pelo autor (2019).
• Após essa etapa concluída, as próximas modificações ocorrem no diretório cryp-
to/objects. Esse diretório contém todas as informações relacionadas ao modelo de
objeto da biblioteca. Os arquivos que contêm referências ao PAPILIO recém im-
plementado são obj_dat.h, obj_mac.c e obj_mac.num. Esses arquivos são gerados
automaticamente pelo comando através do comando make, com base nos objetos
definidos no arquivo objects.txt.
• Em seguida, as modificações ocorrem no diretório ssl/. Para tornar a nova cifra
disponível nas conexões SSL/TLS, devem haver várias modificações aplicadas na
biblioteca libssl. Os novos ciphersuites, contendo a nova cifra, devem ser criados e
registrados. As ciphersuites nomeiam combinações de algoritmos de autenticação,
criptografia e código de autenticação de mensagens (MAC) usados para negociar
as configurações de segurança de uma conexão de rede, que utiliza os protocolos
Transport Layer Security (TLS) ou Secure Sockets Layer (SSL).
• O próximo arquivo que precisa ser modificado é o arquivo de cabeçalho ssl/ssl.h, que
contém várias definições constantes. Ao implementar uma nova cifra, a constante
que especifica seu nome precisa ser definida na linha 320:
#define SSL_TXT_PAPILIO "PAPILIO"
Este mesmo arquivo contém a constante #define SSL_DEFAULT_CIPHER_LIST,
que define a ordem de preferência padrão dos ciphersuites. A lista de cifras consiste
em uma ou mais sequências de cifras separadas por dois pontos, sendo capaz de
representar uma lista de conjuntos de cifras que contém um determinado algoritmo
ou conjuntos de cifras de um determinado tipo.
69
• Outra configuração importante que ocorre no mesmo arquivo ssl/ssl.h é referente à
diretiva CipherSuites, que pode ser usada a qualquer momento para classificar a lista
de codificações, em ordem de comprimento da chave do algoritmo de criptografia.
A constante da lista de cifras padrão, na linha 344, é:
#define SSL_DEFAULT_CIPHER_LIST
"ALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2"
A modificação dessa diretiva influencia diretamente na compatibilidade binária, o
que interfere na comunicação direta entre máquinas que não possuem o OpenSSL
com o papílio implementado. Essa lista é classificada na ordem do comprimento da
chave do algoritmo de criptografia. Tal comprimento por padrão da biblioteca é de
chaves com 256 bits.
No teste atual, como o algoritmo Papílio versátil, segundo (NETO, 2009) pode utilizar
chaves de tamanhos variáveis, entre 16 Bytes (128 bits) e 128 Bytes (1024 bits),
o tamanho da chave foi alterado para 320 bits. Os outros métodos seguiram os
tamanhos padrões de 128 e 192 bits, para que na chamada da diretiva Cipher Suite
ele seja mostrado como uma possível cifra.
• O próximo arquivo que deve ser modificado ao implementar uma nova cifra é o ar-
quivo ssl/ssl_algs.c. Este arquivo contém a função SSL_library_init (void), que
registra todas as cifras e resumos. Faz-se necessário adicionar chamadas, formando
uma nova cifra, nas linhas 109 e 112.
Figura 24: Registro da cifra.Fonte: Elaborada pelo autor (2019).
• Várias modificações devem ser aplicadas também no arquivo ssl/ssl_ciph.c. Pri-
meiro, esse arquivo contém constantes que definem os IDs internos para cada al-
70
goritmo de criptografia usado no SSL/TLS. É necessário adicionar IDs para cada
chave desses novos algoritmos, nas linhas 167 e 168.
Figura 25: Novas ID’s.Fonte: Elaborada pelo autor (2019).
• Em seguida, o arquivo ssl/ssl_ciph.c contém a matriz SSL_CIPHER cipher_aliases.
O novo algoritmo precisa ser implementado através das linhas 320, 321, 322 e 323,
como podemos ver a seguir:
Figura 26: Implementação na matriz Aliases.Fonte: Elaborada pelo autor (2019).
O arquivo também contém a implementação da função ssl_load_ciphers(void). As
chamadas que carregam uma nova cifra precisam ser adicionadas a esta função, nas
linhas 431 a 434.
71
Figura 27: Chamada do Papílio.Fonte: Elaborada pelo autor (2019).
• O último arquivo do código libssl que requer modificações é o arquivo de cabeçalho
ssl/ssl_locl.h. Começando na linha 357, este arquivo contém definições dos bits que
são utilizados para criptografar e identificar as opções de utilização pelos arquivos
internos da biblioteca. É necessário adicionar uma máscara de bits identificando
uma nova cifra.
Figura 28: Identificação da biblioteca.Fonte: Elaborada pelo autor (2019).
72
Na etapa 5, que diz respeito no desenvolvimento de máquinas virtuais, todas as
máquinas estão em funcionamento, realizam a comunicação através de máquinas virtuais
criadas no servidor, conforme visto na seção 4.2. A utilização da máquina, que fazemos
uso no laboratório, também deve ser levada em conta, pois, com ela, são realizados testes
e trocas de mensagens e de envios de arquivos, assim como outras máquinas virtuais que
se encontram na mesma.
O servidor Papílio possui o apache2 configurado, para que as solicitações e as requisi-
ções TLSv1.2 possam ser capturadas através do programa de análise de redes Wireshark.
Esse mesmo servidor possui o serviço FTP, para que a comunicação seja realizada de
maneira ponto-a-ponto.
Figura 29: Página web - www.papilio.com.br.Fonte: Elaborada pelo autor (2019).
E, por fim, na etapa 6, há a realização da análise comparativa do Papílio Versá-
til com outras cifras da biblioteca OpenSSL. Após toda a implementação, a realização
de testes são imprescindíveis para a validação deste trabalho. Com base nos trabalhos
de (GURPREET; SUPRIYA, 2013), (DAR; MITTAL; KUMAR, 2014), (TRIPATHI; AGRAWAL,
2014),(KAUR; KAUR, 2015), (SEMWAL; SHARMA, 2017), (WAHID et al., 2018) e (YUSUFZAI
et al., 2019), os quais realizam comparações de algoritmos criptográficos para a utilização
em computação em nuvem. Eles também podem ser utilizados em IoT, que será abordada
no capítulo 5, a seguir.
Após a integração, testes foram realizados para comparar o desempenho do algoritmo
com relação às outras cifras, e para também verificar a capacidade do Papílio em relação
ao tempo de execução, ao desempenho e ao nível de segurança, quando o mesmo é utilizado
73
via protocolo SSL/TLS na transmissão das informações. Acredita-se que essa comparação
desenvolva uma solução mais acadêmica para esta dissertação.
Todas essas etapas relacionadas à implementação do Papílio ao OpenSSL serão des-
critas com mais detalhes no repositório GitHub (LOPES, 2019), e todas as modificações
podem ser vista no arquivo “Diff_papilio.txt” que se encontra no mesmo repositório.
74
5 Experimentos
Este capítulo apresenta os testes da versão da biblioteca OpenSSL contendo o Papílio
Versátil. A explicação da arquitetura para desenvolvimento de testes é apresentada. O
teste de compatibilidade são apresentados e informam os requisitos para o funcionamento.
Em seguida, os testes de desempenho são apresentados, assim como a conectividade com
SSL/TLS. O capítulo é finalizado com um comparativo entre os algoritmos assimétricos
da biblioteca OpenSSL.
5.1 Arquitetura de Desenvolvimento e de Testes
Para validação dos experimentos, recorreu-se à utilização de máquinas virtuais, em
que o algoritmo foi implementado juntamente com os outros aplicativos que viabilizam a
realização de testes, quanto à eficiência de proteção. Para avaliação da eficiência cripto-
gráfica, será codificada uma texto complexo cujos dados criptografados serão processados
de acordo as medidas de criptografia clássicas, conforme mencionado na seção 4.2.
Essas máquinas foram desenvolvidas em um servidor PowerEdge R740 com um hard-
ware de 64 gigas de memória e processadores escaláveis Intel R© Xeon R© de 2a geração
com até 28 núcleos por processador. As máquinas virtuais possuem 8 gigas de memória
e 4 núcleos, como visto anteriormente na Figura 18. Com a ajuda do coletor de pacotes
Wireshark, será possível validar o uso do algoritmo e capturar o tráfego da rede simulada
entre as duas máquinas virtuais, de acordo com o cenário descrito na Figura 17.
5.2 Compatibilidade
Após a instalação da versão do OpenSSL implementada com o Papílio, verificamos
se a compilação foi realizada sem erros, e se foram gerados os arquivos de cabeçalhos.
Para saber se o algoritmo foi implementado, executamos o código “openssl ciphers -v”,
75
que apresenta a saída conforme as imagens a seguir.
Figura 30: Saída do comando ciphers -v.Fonte: Elaborada pelo autor (2019).
A Figura 30, mostra que a cifra está disponível para uso normal, assim como todas as
outras cifras da biblioteca OpenSSL, o que indica que a compilação teve êxito. O OpenSSL
é a biblioteca criptográfica mais comumente usada atualmente, especialmente no ambiente
Linux. Além disso, o kit de ferramentas OpenVPN usa o OpenSSL como um back-end
criptográfico. A maioria dos aplicativos usa o OpenSSL como uma biblioteca dinâmica.
No ambiente Windows, os arquivos libcrypto e biblioteca dinâmica (* .dll) geralmente
são distribuídos junto com o aplicativo. Os arquivos DLL geralmente estão localizados
no diretório principal do aplicativo. Seus nomes são, respectivamente, libeay32.dll e ss-
leay32.dll para o tipo 1.0 e libeay32.dll e libssl32.dll para a tipo 1.0.0.
No ambiente Linux, no entanto, a maioria dos aplicativos usa bibliotecas comparti-
lhadas em todo o sistema, localizadas em /lib ou em um diretório de sistema similar. Os
arquivos são geralmente chamados libcrypto.so.1.0.0 e libssl.so.1.0.0 para o tipo 1.0, res-
pectivamente. Como exemplo, no diretório /home/ubuntu/, existe um arquivo teste.txt,
que é um documento em PDF que foi convertido para TXT, conforme a Figura 31 a
seguir.
76
Figura 31: Arquivo teste no diretório /home/ubuntu do servidor.Fonte: Elaborada pelo autor (2019).
O conteúdo inicial do arquivo pode ser visto na Figura 32, que mostra o abstract de
um artigo.
Figura 32: Conteúdo inicial do arquivo.Fonte: Elaborada pelo autor (2019).
77
Ao realizar o comando “openssl enc -e -papilio128 -in teste.txt -out crip_teste1.txt”,
é solicitado uma senha e depois a confirmação da senha. Em seguida, o arquivo já é
criptografado, conforme a Figura 33.
Figura 33: Arquivo criptografado no diretório.Fonte: Elaborada pelo autor (2019).
Em seguida, a Figura 34 mostra o arquivo crip_testes1.txt criptografado, em que o
seu conteúdo está completamente diferente do conteúdo da Figura 32.
Figura 34: Arquivo teste.txt criptografado.Fonte: Elaborada pelo autor (2019).
78
Uma das principais razões por trás da integração da Papílio Versátil no kit de fer-
ramentas OpenSSL foi permitir a maneira mais fácil de aplicar o Papilio Versátil em
aplicativos existentes. A maneira mais conveniente de fazer isso seria simplesmente subs-
tituir os arquivos existentes da biblioteca compartilhada por arquivos modificados. No
entanto, isso é possível somente quando a compatibilidade binária é assegurada entre as
bibliotecas originais e modificadas.
A compatibilidade binária reversa é o recurso da nova versão de uma biblioteca contra
uma versão antiga da mesma biblioteca para garantir que os aplicativos que trabalham
com a versão antiga continuem funcionando corretamente com a nova versão. Exemplos
de quebra de compatibilidade binária incluem a alteração do tamanho do tipo de dados
de um parâmetro de função ou a alteração da estrutura de uma tabela virtual em uma
classe. Essas alterações resultam em comportamento de tempo de execução incorreto ou
até mesmo falha de aplicativos que usam a função ou classe correspondente.
Durante a integração do Papílio Versátil no OpenSSL, a preocupação para manter a
compatibilidade binária entre as versões do OpenSSL. Graças a isso, é possível implantar
o Papílio Versátil em sistemas existentes sem qualquer requisito para alterar o código de
aplicativos usando o OpenSSL.
5.3 Performance
O desempenho é um requisito primário para criptografia simétrica hoje em dia. Du-
rante a implementação da versão OpenSSL do Papilio Versátil. O código do Papílio Ver-
sátil foi reescrito, tendo como base o modelo do algoritmo Camellia, e o que antes estava
apenas em um único arquivo foi subdividido em dez arquivos. Em consequência disso,
conseguimos obter uma equiparação com relação as cifras padrões da biblioteca, como
demostra a Figura 35.
79
Figura 35: Comando speed no openssl para o Papílio.Fonte: Elaborada pelo autor (2019).
Por padrão, os algoritmos da biblioteca utilizam normalmente em média 3 segundos
para realizar criptografia em diferentes tamanhos de blocos. O Papílio se mostrou capaz de
manter essa média e algumas vezes ganhou até uns segundos, porém o tempo de 3 segundos
prevalece. Alguns fatores de desempenho são utilizados em (TRIPATHI; AGRAWAL, 2014),
que foram utilizados para realizar testes com o OpenSSL + Papílio.
• Velocidade computacional - Em muitos aplicativos em tempo real, os algoritmos de
criptografia e descriptografia são rápidos o suficiente para atender aos requisitos em
tempo real.
• Valor do comprimento da chave - Nas metodologias de criptografia, o gerenciamento
de chaves é o recurso importante para mostrar como os dados são criptografados. O
algoritmo simétrico usa um comprimento de chave variável que é maior.
• Taxa de criptografia - A taxa de criptografia é a medida da quantidade de dados
que deve ser criptografada. Ela deve ser minimizada para reduzir a complexidade
da computação.
• Questões de segurança - A segurança criptográfica define se o esquema de criptogra-
fia é seguro contra força bruta, ataque de tempo e ataques de texto com criptografia
de texto sem formatação. Para aplicativos multimídia altamente importantes para
o esquema de criptografia, deve satisfazer a segurança da criptografia.
• Tempo - O tempo essencial pelo algoritmo para totalizar a operação depende da
velocidade do processador e da complexidade do algoritmo.
80
• Taxa de transferência - A taxa de transferência dos algoritmos de criptografia é
calculada dividindo-se o texto sem formatação total em Megabytes criptografados
no tempo total de criptografia para cada algoritmo.
Com todas essas informações, podemos utilizar esses dados para realizar uma compa-
ração entre os algoritmos simétricos, que será demonstrada na Seção 5.5.
5.4 Conectividade SSL/TLS
Novos ciphersuites, contendo Papílio Versátil, foram criados na biblioteca libssl. Com
isso, é possível usar Papílio Versátil para criptografar dados transmitidos em conexões
SSL/TLS. O algoritmo de criptografia usado em uma sessão é acordado entre o cliente e
o servidor durante o procedimento de manipulação do Handshake. O cliente envia uma
mensagem do Client Hello para o servidor. Um exemplo de sua messagem é mostrado na
Figura 36. A mensagem do Client Hello contém a lista de conjuntos de cifras suportada
pelo cliente. A lista é ordenada por preferência (ciphersuites geralmente mais seguros são
mais preferidos). Os ciphersuites Papílio Versátil são identificados como desconhecidos
pelo software Wireshark porque seus IDs são do intervalo privado e o Wireshark não os
reconhece.
81
Figura 36: Cifras disponíveis para a comunicação Cliente.Fonte: Elaborada pelo autor (2019).
O servidor escolhe o primeiro ciphersuite suportado da lista e envia seu ID para o
cliente em uma mensagem do Servidor Hello. Como mencionado anteriormente, o exemplo
de uma mensagem do Servidor Hello é mostrado na Figura 36. Nesse caso, o servidor
escolhe o ciphersuite com o ID 0xFF88. Ele corresponde ao ciphersuite
"#define TLS1_CK_DHE_RSA_WITH_PAPILIO_320_CBC_SHA"
que usa cifra Papílio com chave de 320 bits para proteger os dados transmitidos entre o
cliente e o servidor.
82
Figura 37: Cifras disponíveis para a comunicação.Fonte: Elaborada pelo autor (2019).
Para que a negociação obtenha êxito, o OpenSSL + Papílio Versátil tem que estar
implementado tanto no cliente quanto no servidor. Se um deles estiver com a biblioteca
OpenSSL original (sem o Papílio Versátil como ciphersuites), a escolha da cifra padrão
será utilizada para a criptografia da comunicação entre eles, normalmente com a cifra
utilizada e o algoritmo AES. Isso significa que é possível estabelecer uma conexão segura
entre pares que estão usando bibliotecas modificadas e originais, prova de compatibilidade
binária.
5.5 Comparação de algoritmos de criptografia
A comparação do algoritmo Papílio Versátil implementado no OpenSSL, com outros
algoritmos da biblioteca, fornecerá uma base para defender a utilização do uso da bi-
blioteca implementada. Comparamos os algoritmos simétricos existentes com base em
diferentes parâmetros, como mostrado na tabela a seguir que inclui tamanho do bloco,
segurança e velocidade, dados utilizados para realizar um gráfico comparativo. Além de
83
tais dados, também foram utilizados outros, como tamanho da chave, estrutura, vulnera-
bilidade e seu ano de desenvolvimento.
Figura 38: Tabela comparativa das cifras simétricas.Fonte: Elaborada pelo autor (2019).
O algoritmo Papílio possui apenas a criptoanálise diferencial, em (FILHO, 2010), ainda
é necessário realizar a criptoanálise linear, para que essa informação seja válida. Como
posto ma seção 3.4, devido ao Papílio Versátil ser mais complexo e robusto que o Papílio
Original, seu desempenho pode ser ainda melhor que este último nas criptoanálise linear
e diferencial. Em relação à comparação do algoritmo Camellia com o Papílio Versátil,
não pode ser realizada, já que o Camellia não faz parte da escolha feita pela diretiva
ciphersuite. E o mesmo não suporta a versão TSL, visto que ele trabalha na versão anterior
do OpenSSL, que foi substituída pelo TLS.
Para que se possa observar as informações de maneira mais clara, foram gerados os
gráficos da Figura 39 baseados nas informações da tabela na Figura 38, com a exclusão de
algumas informações. Para que não haja uma desigualdade muito além do gráfico, nesse
caso, foram mantidos apenas as velocidade computacional, taxa de transferência e Taxa
de criptografia.
84
Figura 39: Gráficos de comparação das cifras simétricas.Fonte: Elaborada pelo autor (2019).
85
6 Considerações Finais
Este capítulo apresenta uma conclusão ao trabalho realizado. Primeiramente uma
contextualização do problema abordado nesta dissertação é apresentada e, em seguida,
um resumo do trabalho desenvolvido também é apresentado. Além disso, uma revisão dos
objetivos e contribuições é disposta, apresentando os principais resultados obtidos. Por
fim, os trabalhos futuros são apresentados, elucidando possíveis tarefas a serem realizadas
posteriormente..
6.1 Conclusões
A integração do algoritmo na biblioteca OpenSSL, por não ser uma abordagem am-
plamente utilizada, oferece diversos desafios. A criptografia é formada por diferentes ca-
racterísticas, que podem ser utilizadas em dispositivos que realizem comunicação segura,
podendo alcançar qualquer plataforma com dispositivos de baixo poder computacional ou
dispositivos de capacidade computacional considerável e sem limitações. Esta heteroge-
neidade traz um desafio no que tange à comunicação segura de dispositivos limitados com
a Internet. Nessa área, é preciso desenvolver protocolos que possam ser executados por
estes dispositivos de menor capacidade e que, ao mesmo tempo, sejam compatíveis com
os protocolos utilizados atualmente na Internet (OPENSSL.ORG, 2018).
A privacidade do usuário é assegurada por meio de armazenamento criptografado, em
que apenas as entidades que devem acessar os dados possuem as chaves criptográficas
para realizar esta operação. Como previsto nas intenções, foi realizada a implementação
do algoritmo Papílio Versátil (NETO, 2009), na biblioteca OpenSSL (OPENSSL.ORG, 2018)
que é uma biblioteca com diversos algoritmos de criptografia (simétrica e assimétrica),
bastante popular e muito utilizada nos dias atuais. Para garantir uma comparação com
o estado da arte e validar os resultados obtidos nas mudanças propostas, cada algoritmo
simétrico estudado foi escolhido de acordo com as propriedades do Papílio Versátil.
86
Tais algoritmos não fizeram parte das implementações propostas, pois eles serviram
de base de estudos e já fazem parte da biblioteca, dado que a intenção deste trabalho foi a
implementação em linhas de código do Papílio Versátil, que devem ser escritos visando a
portabilidade e utilizando somente as bibliotecas padrões da linguagem C/C++, Makefile,
Perl e Python, na biblioteca nativa do OpenSSL.
Um dos desafios desse trabalho foi definir qual(is) algoritmo(s) poderia(m) ser utili-
zado(s) como fundamentação para a implementação, após estudo sobre os algoritmos si-
métricos utilizados pela biblioteca e focando nos algoritmos de cifras de bloco. Escolheu-se
o algoritmo CAMELLIA (KATO; KANDA; KANNO, 2010), pois é uma algoritmo bastante
similar ao Papílio, assim como o DES e o AES, pois utilizam a rede Feistel.
Após o estudo das definições e funções desses algoritmos, deu-se início ao trabalho
de escrita do código, a implementação em si. Como a biblioteca OpenSSL se baseia em
arquivos MakeFile, a cada implementação era necessária uma nova compilação, em que
os erros eram analisados para que a correção pudesse ocorrer.
A modificação de vários arquivos também dificulta muito a busca por erros, pois
algumas vezes eles não vêm descritos de forma clara no momento de compilação. No
quesito limitação, infelizmente, como o algoritmo não é homologado, ele não está presente
em todas as versões do OpenSSL, fazendo com que, para a utilização do Papílio Versátil,
seja necessário que o cliente e o servidor utilizem a biblioteca implementada com o referido
algoritmo. Caso contrário, eles assumem a comunicação padrão de segurança do OpenSSL.
6.2 Trabalhos Futuros
Por fim, como trabalhos futuros, pode-se estudar e desenvolver:
(i) Melhoria do desenvolvimento do Papílio Genético que, em experimentos, apresen-
tou um tempo muito elevado para realizar a criptografia. Visto que ele iniciava pelo
algoritmo Papílio, em seguida realizava a chamada da versão genética, que rodava
independente. Em cada subchave gerada, ele armazenava o valor para que pudesse
passar no final de cada iteração, gerando um custo muito alto para realizar a crip-
tografia, fazendo com que ele não fosse utilizado.
(ii) Aplicar a biblioteca OpenSSL Papílio na plataforma FIWARE, para que seja veri-
ficada sua utilização em serviços IoT.
(iii) Realizar a comparação com o protocolo MQTT SSL/TSL.
87
Referências
ARAÚJO, F. PapílioXP - Uma Exensão do Algoritmo Criptográfico Papílio. 2003.Monografia (Engenharia da Computação), UFRN (Universidade Federal do Rio Grandedo Norte), Natal, Brasil.
ARAÚJO, F. S. et al. Papílio cryptography algorithm. In: Computational andInformation Science. [S.l.]: Springer Berlin Heidelberg, 2005, (Lecture Notes in ComputerScience, v. 3314). p. 928–933.
BARRETO, P. S. L. M. Curvas Elípticas e Criptografia: Conceitos e Algoritmos. [S.l.],1999.
BERTINO, E. Editorial: Introduction to Data Security and Privacy. Data Science andEngineering, v. 1, n. 3, p. 125–126, 2016. Disponível em:<https://doi.org/10.1007/s41019-016-0021-1>.
DAR, M. H.; MITTAL, P.; KUMAR, V. A comparative study of cryptographicalgorithms. International Journal of Computer Science and Network, v. 3, p. 2277–5420,June 2014.
DIFFIE, W.; HELLMAN, M. New directions in cryptography. IEEE Transactionson Information Theory, v. 22, n. 6, p. 644–654, Nov 1976. Disponível em:<http://dx.doi.org/10.1109/TIT.1976.1055638>.
FERNANDES, M. A. Segurança em Redes: Fundamentos. 1. ed. [S.l.]: ERICA, 2013.
FIGUEIRA, V. P. “Internet das coisas” : um estudo sobre questões de segurança,privacidade e infraestrutura. Dezembro 2016. TSC - Trabalho de Conclusão deCurso, Universidade Federal Fluiminense -UFF, RJ- Rio de Janeiro. Disponível em:<https://app.uff.br/riuff/handle/1/5150>.
FILHO, I. L. O. Criptoanálise Diferencial do Papílio. Dissertação (Mestrado) —Universidade Federal do Rio Grande do Norte - UFRN, 2010.
FILHO, I. L. O. Algoritmo Papílio como Método de Proteção de Templates paraAumentar a Segurança em Sistemas de Identificação Biométricos. Tese (Doutorado) —Universidade Federal do Rio Grande do Norte - UFRN, Dez 2014.
FILHO, I. L. O. et al. Increasing data accuracy in biometric authentication systems: Anexploratory study using papilio algorithm on fuzzy schemes. In: International Journal ofHybrid Intelligent Systems. [S.l.: s.n.], 2017.
FILHO, I. L. O. et al. A comparative analysis of cryptographic algorithms andtransformation functions for biometric data. In: 2013 12th International Conference onMachine Learning and Applications. [S.l.: s.n.], 2013. v. 2, p. 255–260.
88
GITHUB. TLS/SSL and crypto library. https://github.com/openssl/openssl, 2018. Web.
GURPREET, S.; SUPRIYA, K. A study of encryption algorithms (rsa, des, 3des andaes) for information security. International Journal of Computer Applications, v. 67, p.33–38, April 2013.
JURKIEWICZ, P.; NIEMIEC, M. Implementation of a new cipher in opensslenvironment the case of indect block cipher. International Journal of Computerand Communication Engineering, v. 5, n. 1, p. 41–49, Jan 2016. Disponível em:<http://www.ijcce.org/index.php?m=content&c=index&a=show&catid=56&id=508>.
KATO, A.; KANDA, M.; KANNO, S. Camellia Cipher Suites for TLS. June 2010.Disponível em: <https://tools.ietf.org/html/rfc5932>.
KAUR, S.; KAUR, A. Article: Survey of security algorithms in cloud. InternationalJournal of Computer Applications, v. 115, n. 19, p. 23–27, April 2015. Full text available.
KHAN, R. et al. Future internet: The internet of things architecture, possible applicationsand key challenges. In: . [S.l.: s.n.], 2012. p. 257–260. ISBN 978-1-4673-4946-8.
LOPES, L. Papilio in OpenSSL. https://github.com/LuizRanyer/papilio, 2019. Web.
NETO, J. B. S. L. Papílio Versátil: um algoritmo criptográfico. Dezembro 2009.Monografia (Bacharel Ciência da Computação), UFRN (Universidade Federal do RioGrande do Norte), Natal, Brasil.
OLIVEIRA, C. T. et al. Improving security on iot applications based on the FIWAREplatform. In: 32nd IEEE International Conference on Advanced Information Networkingand Applications, AINA 2018, Krakow, Poland, May 16-18, 2018. [s.n.], 2018. p.686–693. Disponível em: <https://doi.org/10.1109/AINA.2018.00104>.
OPENSSL.ORG. OpenSSL Documents. 2018. Disponível em:<http://www.opessl.org/docs>.
PACHECO, L. A. B. Arquitetura para privacidade na integração de inter-net das coisas e computação em nuvem. Junho 2018. CIC - Mestrado emInformática (Dissertações), Universidade de Brasilia - UNB. Disponível em:<http://repositorio.unb.br/handle/10482/32137>.
PINHEIRO F. V.; VIEIRA, G. S.; SILVA, L. G. D. SSL/TLS: Redes deComputadores I. GTA UFRJ. http://www.gta.ufrj.br/, 2016. Disponível em:<http://www.gta.ufrj.br/grad/11_1/tls/index.html>.
PRAKASH G. L., P. M.; SINGH, I. Data security algorithms for cloud storagesystem using cryptographic method. International Journal of Advanced Engineering,Management and Science, v. 5, 2014. ISSN 2229-5518.
RAMOS, K. D. N. Proposta de um Algoritmo de Criptografia Baseado no AlgoritmoViterbi e Codificação Convolucional. Dissertação (Mestrado) — Universidade Federal doRio Grande do Norte - UFRN, Fev 2002.
89
ROBACK, E.; M., D. First advanced encryption standard (aes) candidate conference. In:. [s.n.], 1998. Disponível em: <http://www.ieee-security.org/Cipher/ConfReports/conf-rep-aes.html>.
ROCHA, C. A.; PEDROSO, E. T.; JUNIOR, E. T. S. O Protocolo Se-cure Sockets Layer (SSL). 2003. Mestrado Profissional em Computa-ção, Universidade Estadual de Campinas - UNICAMP. Disponível em:<www.ic.unicamp.br/rdahab/cursos/mp202/Welcome_files/trabalhos/SSL/texto/SSL_Texto.pdf>.
SEMWAL, P.; SHARMA, M. K. Comparative study of different cryptographic algorithmsfor data security in cloud computing. In: 2017 3rd International Conference on Advancesin Computing,Communication Automation (ICACCA) (Fall). [S.l.: s.n.], 2017. p. 1–7.
SHIREY, R. Request for Comments: 2828. http://www.rfc-base.org/rfc-2828.html, May2000. Disponível em: <https://www.ietf.org/rfc/rfc2828.txt>.
SIMON, S. The code book: the secret history of codes and code-breaking. London: FourthEstate, 2000. Disponível em: <http://cds.cern.ch/record/1550989>.
STALLINGS, W. Criptografia e segurança de redes. 4. ed. [S.l.]: Sao Paulo: PearsonPrentice Hall., 2008.
THOMAS, S. A. SSL and TLS Essentials: Securing the Web with CD-ROM. New York,NY, USA: John Wiley & Sons, Inc., 2000.
TRIPATHI, R.; AGRAWAL, S. Comparative study of symmetric and asymmetriccryptography techniques. In: International Journal of Advance Foundation andResearch in Computer (IJAFRC). [s.n.], 2014. ISSN 2348-4853. Disponível em:<https://pdfs.semanticscholar.org/e0e4/810c5276f9c05cc82425fcf911f206c52bef.pdf>.
WAHID, M. N. A. et al. A comparison of cryptographic algorithms: Des, 3des, aes, rsa andblowfish for guessing attacks prevention. In: Journal of Computer Science Applicationsand Information Technology. [s.n.], 2018. ISSN Online: 2474-9257. Disponível em:<https://pdfs.semanticscholar.org/6133/bb355672b8a6c4f1c410bc41abc6a94162a7.pdf>.
YUSUFZAI, A. et al. A comparative study of cryptographic algorithms for cloudsecurity. In: RATHORE, V. S. et al. (Ed.). Emerging Trends in Expert Applications andSecurity. Singapore: Springer Singapore, 2019. p. 409–415.