Prévia do material em texto
UNIP – MARQUÊS
CURSO DE CIÊNCIA DA COMPUTAÇÃO
LUCAS CARVALHO DE SOUZA – D82BFA9
THIAGO MARCELLO SCRICO FERNANDES - N3603G1
CLEVERSON CARLOS ROCHA SILVA - D757HH7
TÉCNICAS CRIPTOGRÁFICAS, CONCEITOS, USOS E APLICAÇÕES:
Desenvolvimento de um programa de criptografia com a cifra de Vigenère
SÃO PAULO
2018
LUCAS CARVALHO DE SOUZA – D82BFA9
THIAGO MARCELLO SCRICO FERNANDES - N3603G1
CLEVERSON CARLOS ROCHA SILVA - D757HH7
TÉCNICAS CRIPTOGRÁFICAS, CONCEITOS, USOS E APLICAÇÕES:
Desenvolvimento de um programa de criptografia com a cifra de Vigenère
Atividades Práticas Supervisionadas -
Trabalho apresentado como exigência
para avaliação do 2º/1º semestre do curso
de Ciência da Computação, da
Universidade paulista.
Orientador: Prof. Roberto Pereira
SÃO PAULO
2018
ÍNDICE DE ILUSTRAÇÕES
Figura 1 – Citale .......................................................................................................... 9
Figura 2 – Cifra de Cesar .......................................................................................... 10
Figura 3 - Criptografia Simétrica ................................................................................ 11
Figura 4 - Criptografia assimétrica ............................................................................ 14
Figura 5 - Tabula recta .............................................................................................. 17
Figura 6 - Disco de cifra ............................................................................................ 19
Figura 7 - Tabela ASCII ............................................................................................. 22
Figura 8 - Interface do Programa .............................................................................. 28
Figura 9 - Encriptação ............................................................................................... 28
Figura 10 - Decriptação ............................................................................................. 29
Figura 11 - Extras do Programa ................................................................................ 29
SUMÁRIO
1. INTRODUÇÃO ........................................................................................................ 5
2. OBJETIVO DO TRABALHO .................................................................................... 7
2.1 Geral .................................................................................................................. 7
2.2 Específicos ......................................................................................................... 7
3 CRIPTOGRAFIA ...................................................................................................... 8
4 TÉCNICAS CRIPTOGRÁFICAS MAIS UTILIZADAS ............................................. 11
4.1 Criptografia simétrica. ...................................................................................... 11
4.1.1 Técnicas de Substituição .............................................................................. 11
4.1.2 Técnicas de Transposição ............................................................................ 11
4.1.3 Cifra de fluxo ................................................................................................. 12
4.1.4 Cifra de Bloco ................................................................................................ 12
4.1.5 Data Encryption Standard (DES) .................................................................. 12
4.1.6 Advanced Encryption Standard (AES) .......................................................... 13
4.2 Criptografia assimétrica ................................................................................... 13
4.2.1 RSA ............................................................................................................... 14
4.2.2 ElGamal ........................................................................................................ 15
4.2.3 Assinatura digital ........................................................................................... 15
5 CIFRA DE VIGENÈRE ........................................................................................... 16
5.1 Estruturação, conceitos e fundamentação ....................................................... 16
5.2 Benefícios em relação às técnicas anteriores. ................................................. 18
5.3 Aplicações que fazem e fizeram uso da técnica. ............................................. 19
5.4 Comparação entre esta técnica e outras conhecidas. ..................................... 20
5.5 Vulnerabilidade e falhas ................................................................................... 20
5.6 Melhorias propostas ou implementadas ........................................................... 21
6 PROJETO DO PROGRAMA .................................................................................. 22
7 RELATÓRIO COM AS LINHAS DE CÓDIGO DO PROGRAMA ............................ 25
8 APRESENTAÇÃO DO PROGRAMA EM FUNCIONAMENTO ............................... 28
REFERÊNCIAS ......................................................................................................... 30
5
1. INTRODUÇÃO
Nos dias atuais, com a globalização, o surgimento da internet e sua
expansão, estamos constantemente conectados e compartilhando informações. O
acesso à internet por grande parte da população nos faz refletir sobre os aspectos
positivos e negativos do compartilhamento de informações na rede.
Nos aspectos positivos, podemos citar como exemplo a velocidade da
informação, onde podemos de forma rápida e fácil saber sobre acontecimentos do
nosso cotidiano, fazer pesquisas, visualizar vídeos, conversar com nossos amigos
via redes sociais, fazer compras via internet e até acessar nossa conta bancária.
Se tratando dos negativos, temos nossas informações circulando na rede e
devemos tomar alguns cuidados com os dados que compartilhamos e para quem
compartilhamos. O fato de termos nossos dados bancários roubados, por exemplo, e
estes serem usados por pessoas mal-intencionadas nos trariam diversos problemas.
Devido a este motivo, organizações definem uma estrutura adequada para a
proteção de suas informações, de acordo com seu porte e tipo de negócios, de
modo a conscientizar todos os colaboradores de que a informação é um bem, isto é,
tem valor para a empresa e deve ser protegida (FONTES, 2006)
A proteção de dados contra ameaças e ataques, como CRACKERS, que tem
como uma das principais práticas o roubo de informações em sites de e-commerce
se tornou de suma importância nas organizações. Não existe rede ou informação
100% segura a partir do momento em que estamos conectados na rede, buscando e
compartilhando informações. O monitoramento das informações é essencial para
detectar ataques e evitar consequências desagradáveis, a perda ou roubo de
informações levaria uma organização a perder credibilidade no mercado e por
consequência, sua desvalorização.
Sendo a informação um dos ativos mais valiosos de uma organização e com
a implementação da rede de computadores, a informação precisa estar muito bem
protegida e ser muito bem gerenciada.
Uma das técnicas mais utilizadas para a proteção dessas informações é a
criptografia. É uma técnica que utiliza cifras e códigos para tornar uma informação
em ilegível. Somente quem tiver a chave de decriptação poderá visualizar a
informação em um formato legível novamente. A criptografia é usada para manter o
6
sigilo de uma mensagem, técnicas criptográficas são utilizadas desde a antiguidade.
Eram, por exemplo, aplicadas em guerra, para ocultar informações do inimigo.Basicamente, podemos fazer uma subdivisão da criptografia em dois tipos:
criptografia de chave simétrica e criptografia de chave assimétrica. A criptografia de
chave simétrica também pode ser chamada de criptografia de chave privada e este
modelo consiste em uma chave tanto para cifrar quanto para decifrar as
informações. A criptografia de chave assimétrica, ou criptografia de chave pública é
um criptossistema que utiliza duas chaves distintas, uma chave pública é utilizada
para cifrar e a uma chave privada é utilizada para decifrar.
E como ter a certeza da origem e da integralidade de uma mensagem
criptografada, por exemplo? Para isso contamos com o certificado digital. Ele é um
documento eletrônico, assinado por uma autoridade certificadora, que atesta a
origem e integridade. Um certificado digital é utilizado por pessoas, empresas, sites,
etc (COSTA, 2015).
Ao longo deste trabalho, iremos dissertar sobre algumas das técnicas de
criptografia mais utilizadas, seus conceitos, usos e aplicações. Iremos realizar uma
análise sobre a criptografia (cifra de Vigenère) na qual foi escolhida pelo nosso
grupo e algumas comparações com outros tipos de criptografias. Também iremos
elaborar um programa de criptografia usando a cifra de Vigenère, usando a
linguagem C# (C Sharp).
7
2. OBJETIVO DO TRABALHO
2.1 Geral
Neste trabalho, iremos pesquisar e dissertar sobre a criptografia, suas
técnicas criptográficas mais utilizadas, seus conceitos, usos e aplicações. Ao final,
iremos elaborar e implementar um programa de criptografia em C# (C Sharp), que
em nossa escolha será a “Cifra de Vigenère”.
2.2 Específicos
● Pesquisar e dissertar sobre os conceitos gerais de criptografia
● Pesquisar e dissertar sobre as técnicas criptográficas mais utilizadas e
conhecidas
● Pesquisar e dissertar sobre a cifra de Vigenère
● Desenvolver um programa de criptografia, utilizando a linguagem C# (C
Sharp) e a cifra de Vigenère.
8
3 CRIPTOGRAFIA
A palavra Criptografia vem do grego “kryptós”, que significa secreto ou oculto
e “grápho”, que significa grafia, é o nome dado a ciência de codificar informações
tornando seu conteúdo ilegível (OLIVEIRA, 2013).
A criptografia é uma das maneiras mais antigas de transmitir informações e
dados com uma maior segurança, de modo a evitar que pessoas não autorizadas
tenham acesso as informações. Somente quem tiver a chave de encriptação poderá
acessar o conteúdo legível das informações. Segundo Souza (2011, p.3), “A
criptografia é o produto do trabalho humano em busca de liberdade, privacidade,
segurança e soberania de sua nação”.
O estudo da criptografia é chamado de criptoanálise e tem como objetivo
analisar um algoritmo de criptografia com o intuito de revelar o texto claro contido na
mensagem cifrada sem o conhecimento da chave de encriptação ou do mecanismo
usado para cifrar (DELGADO, 2011).
Quando o assunto é criptografia, precisamos nos habituar e conhecer
algumas palavras que irão nos ajudam a entender melhor a arte de criptografar e
descriptografar. Segundo Stallings, (2014, p.18).
uma mensagem original é conhecida como texto claro (ou plaintext),
enquanto a mensagem codificada é chamada de texto cifrado (ou
ciphertext). O processo de converter texto claro em texto cifrado é
conhecido como cifragem ou criptografia; restaurar o texto claro a partir do
texto cifrado é a decifragem ou decriptografia. Os muitos esquemas
utilizados para a criptografia constituem a área de estudo conhecida como
criptografia. Esse esquema é conhecido como sistema criptográfico ou cifra.
As técnicas empregadas para decifrar uma mensagem sem qualquer
conhecimento dos detalhes de criptografia estão na área da criptoanálise. A
criptoanálise é o que os leigos chamam de "quebrar o código". As áreas da
criptografia e criptoanálise juntas são chamadas de criptologia.
De acordo com Victor Fiarresga (2010) os objetivos da criptografia são:
confidencialidade, integridade, autenticação e não repudio.
Confidencialidade: assegura que as informações não fiquem
disponíveis a terceiros, ou seja, a indivíduos não autorizados.
Integridade: assegura que o conteúdo de uma informação permaneça
integro, ou seja, sem modificações não autorizadas.
Autenticação: identifica pessoas ou processos com quem se
estabelece comunicação.
9
Não repudio: assegura que as partes envolvidas na comunicação
neguem o envio ou recepção de informações.
Estes objetivos são essenciais para qualquer criptografia ou sistema de
segurança computacional.
Desde a antiguidade, o homem sempre teve a necessidade de se comunicar,
seja verbalmente ou pela escrita, através de mensagens, que muitas vezes
precisavam que o seu conteúdo permanecesse secreto (GANASSOLI;
SCHANKOSKI, 2015).
Os primeiros relatos sobre escritas secretas datam do século V a.C. pelo
historiador grego Heródoto (485 a.C. – 420 a.C.) no livro “As histórias de Heródoto”,
onde ele retrata as histórias dos conflitos entre a Pérsia e a Grécia, em que a
habilidade da escrita secreta da Grécia foi uma das causas de não ter sido
conquistada por Xerxes (MARQUES, 2013).
Essa arte de ocultar mensagens é chamada de esteganografia e após
Heródoto várias formas de esteganografia foram utilizadas no mundo, durante
muitos séculos. O longo uso dessa arte nos mostra que oferece uma ligeira
segurança, mas é vulnerável a uma vigilância constante e rígida.
Com o passar do tempo, melhorias e novas descobertas, a humanidade
passou a utilizar aparelhos e maquinas para criptografar mensagens. Uma das
primeiras ferramentas de criptografia que temos conhecimento é o Citale (Figura 1),
utilizada no século V a.C. por espartanos, era um bastão de madeira que utilizava
uma tira de couro ou papiro enrolada a si, de forma espiral, para cifrar a mensagem
e para decifrar era necessário enrolar a tira em um citale de mesmo diâmetro
(GANASSOLI;SCHANKOSKI, 2015).
Figura 1 – Citale
Fonte: https://cryptoid.com.br/wp-content/uploads/2015/07/scytale.png
10
Com a evolução da criptografia, foram surgindo novas formas de cifrar
palavras e textos. O imperador romano Júlio César utilizava uma cifra, que leva o
seu nome, para se comunicar com seu exercito. A cifra de César (Figura 2) é uma
cifra de substituição, onde cada letra do alfabeto é substituída por outra, 3 posições
adiante, sendo que as 3 ultimas letras do alfabeto correspondem as 3 primeiras
(MARQUES, 2013).
Figura 2 – Cifra de Cesar
Fonte: http://www.setesys.com.br/wp-content/uploads/2012/10/00015.jpg
Até a década de 1970 todas as cifras eram simétricas, ou seja, a chave para
encriptar e decriptar uma mensagem era a mesma e seu uso era mais destinado à
área política e militar. Com o surgimento e generalização de computadores pelo
cidadão comum, a criptografia tornou-se fundamental para o cotidiano (FIARRESGA,
2010).
O avanço significante da tecnologia, e com a facilidade em tê-la, alguns
quesitos como pagar uma conta online nunca ficaram tão fáceis. O sistema de dados
da criptografia tem evoluído e tido uma significante importância para termos uma
confiabilidade e conforto. O controle sobre essa informação se tornou muito
estratégico, e as demandas de empresas de grande porte, cada dia cresce mais
com essa necessidade notável.
11
4 TÉCNICAS CRIPTOGRÁFICAS MAIS UTILIZADAS
4.1 Criptografia simétrica.
Criptografia simétrica (Figura 3), também conhecida como criptografia de
chave secreta modifica um texto claro para um texto cifrado a partir da chave
secreta, onde essa chave novamente será usada para decriptar a mensagem,
voltando a um texto claro (Cavalcante, 2004).
Este tipo de criptografia foi o único utilizado até o surgimento da criptografia
por chave publica (Criptografia assimétrica) na década de 1970.O emissor da
mensagem e o receptor precisam ter a chave para cifrar e decifrar, obtendo acesso
as informações legíveis.
Figura 3 - Criptografia Simétrica
Fonte: STALLINGS, p 18. 2014.
4.1.1 Técnicas de Substituição
Uma cifra de substituição tem como objetivo substituir letras do texto claro por
outras letras, números ou símbolos (STALLINGS, 2014). Podemos ter uma cifra de
substituição monoalfabética, que possui um único alfabeto de cifra ou podemos ter
uma cifra polialfabética, que possui mais de um alfabeto de cifra.
4.1.2 Técnicas de Transposição
Uma cifra de transposição tem como princípio mudar a ordem das letras da
mensagem a ser encripitada. Em um exemplo, pode-se encriptar o texto claro
12
percorrendo-o por colunas, como em um vetor de 6 posições, onde o primeiro
caractere do texto claro pelo terceiro, o segundo pelo quinto e o quarto pelo sexto
(JASCONE, 2003).
Uma criptografia por pura transposição é rapidamente conhecida, devido a
freqüência de letras do texto original. Para uma segurança maior é necessário mais
de um estágio de transposição, o que a torna mais complexa e mais difícil de ser
reconstruída.
4.1.3 Cifra de fluxo
É uma cifra que encripta um fluxo de dados um bit por vez, um exemplo
clássico de cifra de fluxo é a cifra de Vigenère. O fluxo de chaves sendo aleatório
torna essa cifra inquebrável (STALLINGS, 2014). Entretanto, o fluxo de chaves
precisa ser entregue aos dois usuários com antecedência e por um canal seguro e
independente. Nesta técnica o fluxo de bits é controlado por chave. Uma das
vantagens em utilizar uma cifra de fluxo é a velocidade da cifragem e decifragem,
onde uma letra pode ser transformada assim que recebida pelo algoritmo, sem
depender da próxima (SERAFIM, 2012).
4.1.4 Cifra de Bloco
Neste método de cifragem, o texto claro será dividido em blocos de mesmo
tamanho pelo algoritmo, geralmente em blocos de 64 ou 128 bits (SERAFIM, 2012).
Cifras de blocos costumam ser mais utilizadas em aplicações de criptografia
simétrica em rede. Assim como a cifra de fluxo, os dois usuários compartilham uma
chave simétrica, assim com na cifra de fluxo.
4.1.5 Data Encryption Standard (DES)
De acordo com Stallings (2014) o algoritmo DES é conhecido como base de
diversas criptografias simétricas, já foi o algoritmo mais utilizado, especialmente em
aplicações financeiras e é o algoritmo mais importante, embora esteja destinado a
ser substituído pelo advanced encryption standard (AES).
13
Em uma encriptação DES, o texto claro precisa ter um comprimento de 64bits
e a chave precisa ter um comprimento de 56bits. O processo de encriptação passa
por algumas etapas, na primeira delas, o texto claro passa por uma permutação
inicial, que reorganiza os bits para então produzir a entrada permutada. Na segunda
etapa o processo de encriptação passa por 16 rodadas de diversas lógicas de
substituição e permutação. Em sua ultima etapa é realizada uma permutação, que é
o inverso da permutação inicial, produzindo o texto cifrado em 64bits.
O avanço tecnológico e velocidade de processamento em computadores nos
dias atuais ameaçam a criptografia DES, pois não é preciso um hardware especial
para quebrar a chave por força bruta.
4.1.6 Advanced Encryption Standard (AES)
Anunciada pelo National Institute of Standards and Technology (NIST) em
2003, a criptografia AES talvez seja a criptografia simétrica mais utilizada.
O AES é uma cifra simétrica de bloco que surgiu através de um concurso com
o intuito de escolher um novo algoritmo simétrico para proteger informações do
governo federal dos Estados Unidos, sendo classificada como substituta da cifra
DES (OLIVEIRA, 2012).
Em uma criptografia AES a cifra recebe um bloco de texto no tamanho de 128
bits ou 16 bytes e a chave pode ter um comprimento de 128, 192 ou 256 bits (16, 24
ou 32 bytes). A encriptação recebe como entrada um único bloco de 128 bits e a
chave de encriptação, gerando assim uma saída também de 128 bits, de forma que
se na decriptação a chave utilizada for a correta, retornará o texto claro.
4.2 Criptografia assimétrica
A criptografia assimétrica (Figura 4), criada em 1970 também é conhecida
como criptografia de chave pública, talvez seja a maior revolução na história da
criptografia (STALLINGS, 2014)
Com o avanço da internet, se tornou mais usada que a criptografia simétrica.
Os algoritmos de chave pública são baseados em funções matemáticas e não mais
por substituições e permutações.
14
Nesse tipo de criptografia, os algoritmos assimétricos utilizam duas chaves
criptográficas no processo de encriptação e decriptação: a chave pública que é
utilizada para cifrar, é amplamente divulgada com todos, e a chave privada, deve ser
mantida em sigilo, pois é com ela que o destinatário fará a decriptação da
mensagem que foi cifrada (PERREIRA, 2013).
É importante ressaltar que a criptografia assimétrica muitas vezes é
classificada como mais segura que a criptografia simétrica, mas na verdade, a
segurança de qualquer criptografia depende do tamanho da chave e do trabalho
envolvido para quebrar uma cifra (STALLINGS, 2014).
Figura 4 - Criptografia assimétrica
Fonte: http://jkolb.com.br/wp-content/uploads/2015/11/assim%C3%A9trica2.png
4.2.1 RSA
Desenvolvida por Ron Rivest, Adi Shamir e Len Adlemann, a criptografia leva
as iniciais dos seus criadores (RSA) e ficou tão conhecida que nos dias de hoje é o
algoritmo mais importante de encriptação e decriptação para a criptografia de chave
publica (OLIVEIRA, 2012). Foi também o primeiro algoritmo a possibilitar criptografia
e assinatura digital. Está presente em diversos lugares como em compras online, em
autenticações de e-mails, trocas de mensagens por redes inseguras entre outras,
etc.
O algoritmo RSA utiliza números primos para a cifragem. A premissa nessa
utilização consiste na facilidade de multiplicar dois números primos para obter um
terceiro número, mas que seja muito difícil recuperar os dois números primos a partir
do terceiro (OLIVEIRA, 2012).
15
Um dos primeiros passos na encriptação é comparar o texto em números da
tabela ASCII para então aplicar princípios matemáticos. Em uma breve explicação, a
construção da chave pública e privada é realizada a partir da multiplicação de dois
números primos, P e Q, números estes que devem ser escolhidos, para assim gerar
um número N = p*q. (MARINHO, 2017). Opta-se por escolher números primos
grandes para que se tenha um do algoritmo seguro. Fatorar o resultado de uma
multiplicação de números primos, sendo esses números muito extensos levaria
muito tempo, anos, décadas, séculos ou até mesmo milênios, portanto é inviável
fatorar.
4.2.2 ElGamal
Anunciada em 1984 por Taher Elgamal, é um algoritmo de chave publica, sua
matemática difere da utilizada no RSA. A matemática deste algoritmo trabalha com
grandes quantidades numéricas, baseai-se no problema do logaritmo discreto. A
segurança deste criptossistema está na dificuldade de calcular logaritmos discretos.
É um criptossistema seguro, pois apresenta um enorme obstáculo quando se
tenta quebrá-lo, devido ao motivo de calcular logaritmos discretos em um corpo
finito, que nos lembra o problema de fatoração (OLIVEIRA, 2012).
4.2.3 Assinatura digital
A criptografia assimétrica também é utilizada como um meio de assinatura
digital, a pessoa que assina uma mensagem usa a chave privada para criptografar, e
a mensagem criptografada pode ser decriptada por qualquer outra pessoa que
possua a chave pública (OLIVEIRA, 2012).
A assinatura digital visa garantir a autenticidade e integridade de uma
mensagem, verificando o autor, a data e hora da assinatura. Ela precisa ser simples
de produzir para o assinante do documento ou mensagem, precisa usar alguma
informação exclusiva do emissor, de modo que impeça falsificaçãoe negação,
precisa ser um padrão de bits que depende do documento ou mensagem e precisa
ser computacionalmente inviável de falsificar.
As assinaturas apresentam níveis notáveis de confiabilidade sobre a
identidade de cada assinante e a autenticidade dos documentos que eles assinam.
16
5 CIFRA DE VIGENÈRE
5.1 Estruturação, conceitos e fundamentação
A cifra de Vigenère é uma cifra polialfabética, ou seja, a mesma letra do texto
claro pode ser substituída por várias letras diferentes, para tal, a cifra utiliza
diferentes alfabetos de cifra, evitando assim que a mensagem sofra um ataque pela
análise de frequência (FIARRESGA, 2010).
Diferentemente das cifras monoalfabéticas, como a de César, que trabalha
somente com 25 chaves possíveis, a cifra de Vigenère trabalha com um conjunto de
regras de substituição monoalfabéticas, de modo que, uma chave determina qual
regra em particular é escolhida para cifrar a mensagem. Em seu livro Stallings (2014,
p.33) afirma que “Outra forma de melhorar a técnica monoalfabética simples é usar
diferentes substituições monoalfabéticas enquanto se prossegue pela mensagem de
texto claro”. Este criptossistema é classificado como uma criptografia simétrica por
utilizar uma única chave tanto para criptografar quanto para descriptografar.
O método para a cifragem é simples, podendo ser realizado até
manualmente, porém um tanto cansativo dependendo da mensagem a ser
criptografada. Esta técnica criptográfica consiste no uso da Tabula recta, que é
constituída por 26 alfabetos em linhas diferentes. Souza (2011, p.8) afirma que “os
alfabetos da cifra de Vigenère são apenas deslocamentos do alfabeto original”.
Estes deslocamentos são ciclicamente à esquerda em comparação ao alfabeto
anterior. O primeiro alfabeto seguirá sua forma original, de A a Z sem deslocamento,
o segundo terá o 1º deslocamento, uma casa à esquerda, portanto, começará com a
letra B. O terceiro será deslocado duas casas a esquerda, assim começará com a
letra C. Este processo de deslocamento continuará até termos 26 deslocamentos,
correspondendo então a 26 cifras de César.
A cifragem é ditada por uma “palavra-chave”, cada letra do texto claro é
criptografado por cada letra da palavra-chave, que deverá ter a mesma quantidade
de caracteres do texto claro a ser cifrado. Caso a palavra-chave seja menor que o
texto claro, haverá a repetição da palavra-chave no processo de encriptação até que
se torne do tamanho do texto claro. Tendo a mensagem “INVADIR ROMA” como
exemplo e utilizando a palavra “TESTE” como chave, podemos verificar que o
tamanho da nossa chave é menor que o nosso texto claro que queremos criptografar
17
e, portanto no processo de encriptação, a nossa chave será repetida até que
obtenha a mesma quantidade de caracteres da nossa mensagem, para que assim
possa encriptar cada letra do texto claro.
Visualizando a tabula recta (Figura 5), iremos encriptar a mensagem
“INVADIR ROMA” usando a palavra-chave “TESTE” para encriptar, vejamos:
Figura 5 - Tabula recta
Fonte: Elaborada pelos autores.
O alfabeto na primeira coluna horizontal da (Figura 5), destacada acima,
sempre servirá para o nosso texto claro e a primeira coluna vertical do alfabeto à
margem esquerda sempre servirá de uso para a palavra-chave que irá criptografar o
nosso texto claro.
Sendo a primeira letra da mensagem o “I” e a primeira letra da palavra-chave
o “T”, iremos localizar na coluna correspondente ao “I” de nosso texto claro, o ponto
em que encontrará a coluna que corresponde a primeira letra da nossa chave, no
caso a coluna do “T”, este encontro gerará uma nova letra ou podemos dizer que foi
gerada a primeira cifra da nossa mensagem. Usando a tabela, vemos que a letra é
18
B. Seguindo a lógica acima, veremos que a segunda letra do nosso texto claro é “n”
e o encontro da coluna “n” com a coluna da segunda letra da palavra-chave que é
“e”, teremos uma nova cifra, o R. Este processo de encriptação seguirá até a última
letra do texto claro. Ao longo do processo veremos que a palavra-chave escolhida é
menor que o texto claro e por regra teremos que repetir a chave, até que a mesma
tenha a mesma quantidade de bits do texto claro. A tabela abaixo mostra a cifragem
do texto claro.
Tabela 1
Texto Claro: INVADIR ROMA
Chave: TESTETE STET
Cifrado: BRNTHBV JHQT
Fonte: Elaborada pelos autores.
Usando a cifra de Vigenère, o texto claro “INVADIR ROMA” se transformou no
texto cifrado “BRNTHBV JHQT”.
5.2 Benefícios em relação às técnicas anteriores.
O principal benefício da cifra de Vigenère em uma comparação com a cifra de
César é uma maior segurança. A cifra de César é a mais conhecida e famosa das
cifras e serviu como inspiração e base para a criação da cifra de Vigenère. De
acordo com Groenwald e Olgin (2010, p. 3)
Como a Cifra de César era de substituição de letras, facilmente
decodificada por criptoanalistas, por apresentar 26 chaves em potencial, a
solução encontrada no século XVI, foi a cifra polialfabética criada pelo
diplomata francês Blaise Vigenère, denominada Cifra de Vigenère e que
seguia o mesmo princípio da Cifra de César, porém eram utilizados 26
alfabetos cifrados para codificar e decodificar uma mensagem.
O método de cifragem em uma cifra de César é simples e nada trabalhoso de
ser decriptado, devido a este fato, podemos dizer claramente que a Cifra de
Vigenère é a mais segura e o método utilizado na encriptação é mais trabalhoso.
Outro benefício na parte de segurança da cifra de Vigenère é o fato dela utilizar uma
chave para codificar e decodificar uma mensagem, o que a torna mais segura e
completa, mesmo fazendo uso de 26 cifras de César.
A cifra de César embora mais simples foi extremamente útil para a sua época,
porém para os dias atuais é obsoleta. A segurança é baixíssima e se for conhecido
19
que o texto cifrado é uma cifra de César, então uma criptoanálise por força bruta
será facilmente realizada (STALLINGS, 2014).
Um dos benefícios da cifra de Vigenère em relação a cifra RSA é sua
implementação e manuseio em um sistema computacional, objetivo deste trabalho.
A "fácil" implementação em um sistema computacional à torna melhor de ser
trabalhada, mas o que não significa uma maior segurança.
5.3 Aplicações que fazem e fizeram uso da técnica.
Um de seus usos mais famosos aconteceu durante a guerra civil americana
(1861 - 1865) por parte do serviço secreto dos Estados Confederados da América
(DAMICO, 2009). A implementação da cifra para ocultar as informações do inimigo
dava-se pela utilização de um disco de cifra.
Figura 6 - Disco de cifra
Fonte: http://www.cryptomuseum.com/crypto/vigenere/img/300378/002/small.jpg
Ao longo da história, a cifra de Vigenère foi implementada em cilindros
cifrantes, passando por algumas transformações e melhorias. Dentre as melhorias, a
cifragem de mensagens começou a ser realizada por meio de máquinas (BABU;
KUMAR; BABU, 2010). Uma dessas máquinas foi a Enigma, talvez o dispositivo
mais conhecido de criptografia, usada pela Alemanha, na Segunda Guerra Mundial.
20
5.4 Comparação entre esta técnica e outras conhecidas.
É notório que existem grandes semelhanças quando comparamos a Cifra de
Vigenère com as demais, no jeito que é realizado a criptografia, na aplicação e na
decriptação da mensagem.
A cifra de Hill inventada em 1929 por Lester S. Hill, assim como a cifra de
Vigenère é uma cifra polialfabética. Em uma criptoanálise é mais difícil de ser
quebrada quando só se conhece o texto cifrado, mas é facilmente quebrada quando
se conhece o texto claro que deu origem ao texto cifrado (ALMEIDA, 2012).
Podemos fazer uma comparação com a cifra One-Time-Pad, onde a cifragem
é realizada através de um processo similar à cifra de Vigenère, usando a aritmética
modular. Cada letra do alfabeto é associada a um número de 0a 25, de modo que a
combinação do texto claro com a cifra é realizada pela adição destes números
módulo 26 e a decifragem é obtida através da subtração da chave módulo 26
(SOUZA, 2011).
A segurança de uma criptografia é fundamental e nos dias atuais uma cifra
como a de Vigenère não é considerada segura. Em meados de 1970 foi
desenvolvida um novo tipo de criptografia, a assimétrica e com este novo tipo surgiu
a mundialmente conhecida cifra RSA. A cifra permite uma troca de informações bem
mais segura, sua segurança é garantida pela dificuldade computacional em fatorar
um número qualquer e também possui um método de assinatura digital (CAMPELO;
LEAL, 2007).
5.5 Vulnerabilidade e falhas
Criada em meados de 1440 pelo italiano Leon Battista Alberti e por fim
aperfeiçoada pelo francês Blaise de Vigenère, (cifra leva seu nome), ficou conhecida
como "A cifra indecifrável” por cerca de 300 anos. Em 1854, Charles Babbage
desenvolveu uma técnica criptoanalítica capaz de extrair a chave do criptossistema
e decifrá-lo (SOUZA, 2011).
Um criptossistema como a cifra de Vigenère nos dias atuais não é
considerado seguro, por usar somente uma chave, portanto, não é mais utilizado por
sistemas que prezem por extrema segurança. Uma criptoanálise cujo principal
objetivo é analisar e explorar a característica do algoritmo para enfim tentar deduzir
21
um texto claro ou a chave de encriptação pode facilmente quebrar a cifra. O uso
repetido da chave na encriptação pode ocasionar em letras repetidas, assim
facilitando a decriptação. Outro método para conseguir quebrar a cifra é conhecido
como "Ataque por força bruta", que consiste em testar todas as chaves possíveis do
texto cifrado, até conseguir uma tradução para o texto claro, o processo é um tanto
trabalhoso e consome muito tempo (STALLING, 2014).
O sucesso na obtenção da chave por um dos dois tipos de ataque ocasionaria
em perdas catastróficas de informações.
5.6 Melhorias propostas ou implementadas
Em 1918, Gilbert Sandford Vernam, da AT&T propôs uma cifra baseada na
cifra de Vigenère. A chave da cifra deveria ser tão comprida quanto o texto claro. A
cifra de Vernam por ser uma melhoria da cifra de Vigenère, também é uma cifra
polialfabética. Este criptossistema funciona sobre dados binários (bits), em vez de
letras, como a cifra de Vigenère. Assim, o texto claro é cifrado realizando-se o XOR
(operação lógica ou exclusivo) bit a bit entre o texto claro e a chave (STALLINGS,
2014).
Pouco tempo depois, um oficial do exército americano, Joseph Mauborgne
propôs uma melhoria na cifra de Vernam, em que a chave ao invés de ser
constituída por outro texto ou frase, poderia ser uma sequência aleatória de
caracteres (SOUZA, 2011). Assim surge a cifra One-Time-Pad, onde a chave é
randômica, não se repete e é usada apenas uma vez. A cifra OTP é inquebrável por
não haver informações suficientes no texto cifrado para determinar o texto claro ou a
chave utilizada na encriptação.
22
6 PROJETO DO PROGRAMA
Antes da implementação da cifra de Vigenère no C# (CSharp), foi elaborada
uma pesquisa sobre quais outras cifras poderíamos implementar e após a pesquisa,
o grupo optou por trabalhar com a cifra de Vigenère. A ligeira facilidade em sua
implementação foi um dos motivos cruciais para a decisão.
A programa deve cifrar uma mensagem digitada pelo usuário junto com uma
chave, que pode ser uma palavra ou um texto. Essa chave servirá para encriptar a
mensagem e ao final da encriptação, o programa deverá imprimir no monitor o texto
encriptado para visualização do usuário. Outra funcionalidade do programa é a
possibilidade de decriptar um texto fornecido pelo usuário, junto com a respectiva
chave de decriptação.
A cifra de Vigenère é mundialmente conhecida por criptografar somente
textos que contenham caracteres de A a Z e devido à está característica a cifra
sofreu uma melhoria em nossa implementação no C# (CSharp), podendo
criptografar também números e os caracteres: :, ;, <, =, >, ?,@, representados na
tabela ASCII (Figura 7) por: 58,59,60,61,62,63 e 64.
Figura 7 - Tabela ASCII
Fonte: https://www.dobitaobyte.com.br/iot-introducao-boas-praticas-com-mqtt/ascii_table/
Embora implementada a melhoria acima mencionada, o programa apresenta
algumas restrições como:
23
1) Um texto digitado com espaços modificará a estrutura da cifragem,
portanto, o texto a ser cifrado deverá ser digitado sem espaços.
2) O programa não reconhecerá o “Ç” como um caractere do alfabeto,
portanto, sua cifragem não acontecerá.
3) O programa não cifrará textos que contenham caracteres
representados abaixo no número 48 e acima do número 90 da tabela
ASCII.
Ao iniciar o programa, será apresentado ao usuário qual cifra está sendo
utilizada para criptografar, também será apresentado o menu de maneira simples e
objetiva, com as opções para que o usuário possa escolher: 1 – Criptografar; 2 –
Descriptografar; 3 – Sair do programa.
Após o usuário digitar um número, o programa verificará se o número
corresponde aos apresentados no menu, caso o número não corresponda,
aparecerá a seguinte mensagem: “OPÇAO INVÁLIDA, DIGITE NOVAMENTE: ”. A
mensagem irá se repetir até que o usuário digite o número de uma opção válida.
Quando o número digitado corresponder a uma opção válida, o programa irá para a
próxima etapa. Se a opção digitada for 3 (Sair do programa) aparecerá uma nova
mensagem solicitando a confirmação se o usuário realmente deseja sair do
programa. Se a opção digitada for 1 (Criptografar) o programa exibirá no monitor a
mensagem: “OPÇÃO DIGITADA: CRIPTOGRAFAR”, abaixo solicitará que o usuário
digite o texto a ser criptografado, caso o usuário não digite nenhum texto e aperte o
(enter), a seguinte mensagem surgirá na tela: “NENHUM TEXTO DIGITADO!!!
DIGITE O TEXTO A SER CRIPTOGRAFADO:” e irá se repetir até um texto ser
digitado.
Com o texto claro digitado o programa solicitará uma chave para que assim
possa criptografar o texto claro. A chave deve possuir no mínimo 4 caracteres, caso
contrário o programa exibirá a mensagem: “A CHAVE DEVE CONTER NO MÍNIMO
4 CARACTERES” e caso o usuário não digite nenhuma chave, surgirá a seguinte
mensagem: “NENHUMA CHAVE DIGITADA!!! DIGITE UMA CHAVE:”. Após receber
a chave com no mínimo 4 caracteres o programa passará para a etapa de cifragem
do texto claro.
A cifragem acontece em uma estrutura de repetição FOR, que em sua
primeira etapa faz uma variável CHAR de nome “caracter” receber o primeiro
caractere da variável “textoClaro” e verifica através de uma comparação com a
24
tabela ASCII se o mesmo corresponde aos caracteres de 0 a Z, onde 0 = 48 e Z =
90, se o caractere não corresponder a tabela ASCII, a cifragem não acontecerá. Em
seguida a esta etapa, uma outra variável CHAR de nome “key1” recebe o primeiro
caractere da variável “chave” na posição [ i ] mod tamanho da chave. Em seguida
uma variável STRING de nome “cifra” recebe ela mesma que encontra-se vazia,
junto com o primeiro caractere cifrado através do cálculo: cifra += (char)((43 +
(caracter % 48 + key1 % 48)) % 43 + 48). Em uma expressão simplificada, seria:
(((primeira letra da variável caracter mod 48 + a primeira letra da variável key1 mod
48) + 43 ) mod 43 + 48). Após a cifragem na estrutura de repetição FOR, o
programa exibirá no monitor o texto claro, a chave utilizada para cifrar e o texto
cifrado.
Se a opção digitada for 2 (Descriptografar), o programa exibirá a mensagem:
“OPÇÃO DIGITADA: DESCRIPTOGRAFAR” e solicitará que o usuário digite o texto
a ser descriptografado. Assim como na opção 1, se o usuário não digitar nenhum
texto e pressionar a tecla (enter), aparecerá a mensagem: “NENHUM TEXTO
DIGITADO!!! DIGITE O TEXTO A SER DESCRIPTOGRAFADO:”. Após o texto ser
digitado, o programa solicitará a chave utilizada na encriptação,para que assim
possa fazer a decriptação, caso não seja digitada nenhuma chave, surgira a
mensagem: “NENHUMA CHAVE DIGITADA!!! DIGITE UMA CHAVE:”. Na etapa
seguinte o programa entrará numa estrutura de repetição FOR para decriptar o texto
digitado. A estrutura de repetição é semelhante a utilizada na encriptação, onde a
variável “caracter” recebe o primeiro caractere da variável “textoCifra” e a faz
estrutura de repetição verificar através da tabela ASCII se o caractere corresponde
aos caracteres de 0 a Z. Após essa verificação, a variável “key2” recebe o primeiro
caractere da variável “ChaveCifra” na posição [ i ] mod tamanho da ChaveCifra. No
processo seguinte, a variável “decriptação” recebe ela mesma e o primeiro
caractere cifrado, através do cálculo: decriptacao += (char)((43 - (key2 % 48 -
caracter % 48)) % 43 + 48).
Ao final do comando “Criptografar” ou “Descriptografar” o programa possui uma
estrutura de repetição DO que permite ao usuário repetir todo o processo, desde que
o usuário digite N, através da pergunta: “Deseja sair [S/N]? ”.
25
7 RELATÓRIO COM AS LINHAS DE CÓDIGO DO PROGRAMA
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CirfraDeVigenere
{
class Program
{
static void Main(string[] args)
{
int opcao; // DECLARAÇÃO DE VARIÁVEIS
string textoClaro, textoCifra, chave, ChaveCifra, cifra = "", decriptacao
= "";
char caracter, key1, key2, continuar;
do
{
Console.WriteLine("\n=====================================================");
Console.BackgroundColor = ConsoleColor.Gray;
Console.ForegroundColor = ConsoleColor.Black;
Console.WriteLine("|| PROGRAMA DE CRIPTOGRAFIA - CIFRA DE VIGENÈRE
||");
Console.ResetColor();
Console.WriteLine("=====================================================\n");
Console.WriteLine("\n ESCOLHA UMA OPÇÃO ABAIXO");
Console.WriteLine("__________________________________");
Console.WriteLine(" |");
Console.WriteLine("----> 1 - Criptografar |");
Console.WriteLine("----> 2 - Descriptografar |");
Console.WriteLine("----> 3 - Sair do programa |");
Console.WriteLine("__________________________________| \n");
Console.Write("Digite uma opção: ");
do // REPETIÇAO CASO DIGITO FOR MAIOR QUE 3
{
opcao = int.Parse(Console.ReadLine());
if (opcao > 3 || opcao < 1)
Console.Write("OPÇAO INVÁLIDA, DIGITE NOVAMENTE: ");
} while (opcao > 3 || opcao < 1);
switch (opcao) // ESCOLHA DAS OPÇÕES APRESENTADAS AO USUÁRIO
{
case 1:
Console.WriteLine("\nOPÇÃO DIGITADA: CRIPTOGRAFAR");
Console.Write("\nDigite o texto a ser criptografado: ");
do // REPETIÇÃO CASO NENHUM TEXTO TENHA SIDO DIGITADO
{
textoClaro = Console.ReadLine();
if (textoClaro == null || textoClaro == "")
Console.Write("NENHUM TEXTO DIGITADO!!! DIGITE O TEXTO
A SER CRIPTOGRAFADO: ");
} while (textoClaro == "");
do // REPITA ATÉ A CHAVE TER NO MÍNIMO 4 CARACTERES
{
Console.Write("\nDigite uma chave: ");
do // REPETIÇÃO CASO NENHUMA CHAVE TENHA SIDO DIGITADA
26
{
chave = Console.ReadLine();
if (chave == null || chave == "")
Console.Write("NENHUMA CHAVE DIGITADA!!! DIGITE
UMA CHAVE: ");
} while (chave == "");
if (chave.Length < 4) // VERIFICANDO TAMANHO DA CHAVE
Console.WriteLine("\nA CHAVE DEVE CONTER NO MÍNIMO 4
CARACTERES");
} while (chave.Length < 4);
for (int i = 0; i < textoClaro.Length; i++) // ESTRUTURA DE
REPETIÇÃO PARA A CIFRAGEM
{
caracter = char.ToUpper(textoClaro[i]);
if (caracter < 48 || caracter > 90) // COMPARAÇÃO COM A
TABELA ASCII
{
continue;
}
key1 = char.ToUpper(chave[i % chave.Length]);//CÁLCULO
PARA A ENCRIPTAÇÃO
cifra += (char)((43 + (caracter % 48 + key1 % 48)) % 43 +
48);
}
Console.WriteLine("__________________________________________________________");
Console.WriteLine("\nTEXTO CLARO: " +
textoClaro.ToUpper());
Console.WriteLine("CHAVE: " +
chave.ToUpper());
Console.WriteLine("TEXTO CRIPTOGRAFADO: " + cifra);
Console.WriteLine("__________________________________________________________");
cifra = "";
break;
case 2:
Console.WriteLine("\nOPÇÃO DIGITADA: DESCRIPTOGRAFAR");
Console.Write("\nDigite a mensagem a ser descriptografada: ");
do
{
textoCifra = Console.ReadLine();// REPETIÇÃO CASO NENHUM
TEXTO TENHA SIDO DIGITADO
if (textoCifra == null || textoCifra == "")
Console.Write("NENHUM TEXTO DIGITADO!!! DIGITE O TEXTO
A SER DESCRIPTOGRAFADO:");
} while (textoCifra == "");
Console.Write("\nDigite a chave: ");
do // REPETIÇÃO CASO NENHUMA CHAVE TENHA SIDO DIGITADA
{
ChaveCifra = Console.ReadLine();
if (ChaveCifra == null || ChaveCifra == "")
Console.Write("NENHUMA CHAVE DIGITADA!!! DIGITE UMA
CHAVE:");
} while (ChaveCifra == "");
for (int i = 0; i < textoCifra.Length; i++) // ESTRUTURA DE
REPETIÇÃO PARA A DECRIPTAÇAO
{
caracter = char.ToUpper(textoCifra[i]);
27
if (caracter < 48 || caracter > 90) // COMPARAÇÃO COM A
TABELA ASCII
{
continue;
}
//CÁLCULO PARA A DECRIPTAÇÃO
key2 = char.ToUpper(ChaveCifra[i % ChaveCifra.Length]);
decriptacao += (char)((43 - (key2 % 48 - caracter % 48)) %
43 + 48);
}
Console.WriteLine("__________________________________________________________");
Console.WriteLine("\nTEXTO CRIPTOGRAFADO: " +
textoCifra.ToUpper());
Console.WriteLine("CHAVE: " +
ChaveCifra.ToUpper());
Console.WriteLine("TEXTO CLARO: " +
decriptacao.ToUpper());
Console.WriteLine("__________________________________________________________");
decriptacao = "";
break;case 3:
Console.WriteLine();
break;
}
Console.Write("\nDeseja sair [S/N]? ");
continuar = char.Parse(Console.ReadLine().ToLower());
Console.Clear();
} while (continuar == 'n'); // REPETIÇÃO PARA SAIR OU NÃO DO PROGRAMA
Console.ReadKey();
}
}
}
28
8 APRESENTAÇÃO DO PROGRAMA EM FUNCIONAMENTO
Figura 8 - Interface do Programa
Figura 9 - Encriptação
29
Figura 10 - Decriptação
Figura 11 - Extras do Programa
30
REFERÊNCIAS
STALLINGS, William. Criptografia e segurança de redes: princípios e práticas.
6.ed. São Paulo: Pearson Education do Brasil, 2014.
COSTA, Michele Galvão. Fundamentos em segurança da informação. 1.ed. São
Paulo: Pearson Education do Brasil, 2015.
FONTES, Edison. Segurança da informação: o usuário faz a diferença. 1.ed. São
Paulo: Editora Saraiva, 2006.
OLIVEIRA, Maykon. Aritmética: criptografia e outras aplicações de
congruências. 2013. Disponível em:
<http://repositorio.cbc.ufms.br:8080/jspui/bitstream/123456789/2160/1/MAYKON%20
COSTA%20DE%20OLIVEIRA.pdf>. Acessado em: 07 de Setembro de 2018.
FIARRESGA, Victor. Criptografia e matemática. 2010. Disponível em:
<http://repositorio.ul.pt/bitstream/10451/3647/1/ulfc055857_tm_Victor_Fiarresga.pdf>
. Acessado em: 07 de Setembro de 2018.
SERAFIM, Vinícius. Introdução à criptografia: cifras de fluxo e cifras de blocos.
Disponível em: <http://www.serafim.eti.br/academia/recursos/Roteiro_05-
Cifras_de_Fluxo_e_Bloco.pdf>. Acesso em 15 de Setembro de 2018.
PERREIRA, Fernando. Criptografia Temporal: aplicação prática em processos
de compra. 2003. Disponível em:
<https://repositorio.ufsc.br/bitstream/handle/123456789/86201/194511.pdf?sequence
=1>. Acessado em: 15 de Setembro de 2018.
MARQUES, Thiago. Criptografia: abordagem histórica, protocolo Diffie-Hellman
e aplicações em sala de aula. 2013. Disponível em:
<https://repositorio.ufpb.br/jspui/bitstream/tede/7545/5/arquivototal.pdf>. Acesso em:
15 de Setembro de 2018.
31
OLIVEIRA, Ronielton. Criptografia simétrica e assimétrica: os principais
algoritmos de cifragem. 2012. Disponível em:
<http://www.ronielton.eti.br/publicacoes/artigorevistasegurancadigital2012.pdf>.
Acesso em: 16 de Setembro de 2018.
SOUZA, Douglas. Criptografia quântica com estados comprimidos da luz. 2011.
Disponível em:
<http://repositorio.unicamp.br/bitstream/REPOSIP/277397/1/Souza_DouglasDelgado
de_M.pdf>. Acesso em: 16 de Setembro de 2018.
CAVALCANTE, André. Teoria dos números e criptografia. 2005. Disponível em:
<http://ssystem08.upis.br/repositorio/media/revistas/revista_informatica/Cavalcante_t
eoria_numeros_criptografia_2005_UPIS.pdf>. Acesso em 13 de Outubro de 2018.
GANASSOLI, A.P; SCHANKOSKI, F.R. Criptografia e matemática. 2015.
Disponível em:
<http://www.educadores.diaadia.pr.gov.br/arquivos/File/fevereiro2016/matematica_di
ssertacoes/dissertacao_fernanda_ricardo_scankoski.pdf>. Acesso em 13 de Outubro
de 2018.
JASCONE, Fábio. Protótipo de software para ocultar texto criptografado em
imagens digitais. 2003. Disponível em
<http://www.inf.furb.br/departamento/arquivos/tccs/monografias/2003-
2fabioltjasconevf.pdf>. Acesso em 14 de Outubro de 2018.
GROENWALD; OLGIN. Códigos e senhas: sequência didática com o tema
criptografia no ensino fundamental. 2010. Disponível em:
<http://www.lematec.net.br/CDS/ENEM10/artigos/CC/T17_CC555.pdf>. Acesso em:
21 de Outubro de 2018.
DAMICO, Tony. A brief history of cryptography. 2009. Disponível em:
<http://www.inquiriesjournal.com/articles/1698/a-brief-history-of-cryptography>.
Acesso em: 21 de Outubro de 2018.
32
MARINHO, Tarcísio. Criptografia Assimétrica RSA. 2017. Disponível em:
<https://medium.com/@tarcisiomarinho/algoritmo-de-criptografia-
assim%C3%A9trica-rsa-c6254a3c7042>. Acesso em: 27 de Outubro de 2018.
BABU, K. R.; KUMAR, S. U.; BABU, A. V. A survey on cryptography and
steganography methods for information security. 2010. Disponível em:
<https://pdfs.semanticscholar.org/1913/8872a2f8ca34e051fdfa03c0dfdb7a77f016.pdf
>. Acesso em: 27 de Outubro de 2018.
CAMPELO, A; LEAL, I. Teoria aritmética dos números e criptografia rsa. 2007.
Disponível em:
<https://www.ime.unicamp.br/~ftorres/ENSINO/MONOGRAFIAS/antonio_RSA.pdf>.
Acesso em: 04 de Novembro de 2018
ALMEIDA, Paulo. Criptografia e segurança. 2012. Disponível em:
<http://www.arquivoescolar.org/bitstream/arquivo-e/195/1/CS11_12.pdf>. Acesso
em: 04 de Novembro de 2018.