Buscar

Aps - Cifra de Vigenère

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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 
9Figura 1 – Citale
10Figura 2 – Cifra de Cesar
11Figura 3 - Criptografia Simétrica
14Figura 4 - Criptografia assimétrica
17Figura 5 - Tabula recta
19Figura 6 - Disco de cifra
22Figura 7 - Tabela ASCII
28Figura 8 - Interface do Programa
28Figura 9 - Encriptação
29Figura 10 - Decriptação
29Figura 11 - Extras do Programa
SUMÁRIO
51. INTRODUÇÃO
72. OBJETIVO DO TRABALHO
72.1 Geral
72.2 Específicos
83 CRIPTOGRAFIA
114 TÉCNICAS CRIPTOGRÁFICAS MAIS UTILIZADAS
114.1 Criptografia simétrica.
114.1.1 Técnicas de Substituição
114.1.2 Técnicas de Transposição
124.1.3 Cifra de fluxo
124.1.4 Cifra de Bloco
124.1.5 Data Encryption Standard (DES)
134.1.6 Advanced Encryption Standard (AES)
134.2 Criptografia assimétrica
144.2.1 RSA
154.2.2 ElGamal
154.2.3 Assinatura digital
165 CIFRA DE VIGENÈRE
165.1 Estruturação, conceitos e fundamentação
185.2 Benefícios em relação às técnicas anteriores.
195.3 Aplicações que fazem e fizeram uso da técnica.
205.4 Comparação entre esta técnica e outras conhecidas.
205.5 Vulnerabilidade e falhas
215.6 Melhorias propostas ou implementadas
226 PROJETO DO PROGRAMA
257 RELATÓRIO COM AS LINHAS DE CÓDIGO DO PROGRAMA
288 APRESENTAÇÃO DO PROGRAMA EM FUNCIONAMENTO
30REFERÊNCIAS
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 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).
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.
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 é conhecidocomo 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.
· 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
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.
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 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). 
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 de128 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.
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). 
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ção e 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.
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 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 é 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 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. 
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 0 a 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 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.
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:
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 umcaractere 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 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]? ”.
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
 {
 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]);
 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();
 }
 }
}
8 APRESENTAÇÃO DO PROGRAMA EM FUNCIONAMENTO
Figura 8 - Interface do Programa
Figura 9 - Encriptação
Figura 10 - Decriptação
Figura 11 - Extras do Programa
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%20COSTA%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. 
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_DouglasDelgadode_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_teoria_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_dissertacoes/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.
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.

Outros materiais