Prévia do material em texto
UNIVERSIDADE PAULISTA – UNIP
CIÊNCIA DA COMPUTAÇÃO
CRIPTOGRAFIA DE SUBSTITUIÇÃO
GABRIEL NOGUEIRA SHIOTA R.A N181842
IGOR CORREIA SOARES R.A N1399C-4
IGOR HENRIQUE GOMES R.A D42IIH-4
JUAN PAULO PINTO RODRÍGUEZ R.A T2796J-4
PAULO CESAR NUNES DA SILVA R.A N175BG-9
SÃO PAULO – SP
2017
UNIVERSIDADE PAULISTA – UNIP
CIÊNCIA DA COMPUTAÇÃO
CRIPTOGRAFIA DE SUBSTITUIÇÃO
Atividade Pratica Supervisionada tem como
proposta informar que criptografia são
conceitos técnicos usados para codificar
uma informação, de tal forma que somente
o seu destinatário e o emissor da mensagem
consigam acessá-la orientado pelo prof.
Roberto Leminsk.
SÃO PAULO – SP
2017
SUMÁRIO
3 OBJETIVO DO TRABALHO ................................................................................... 5
4 INTRODUÇÃO ........................................................................................................ 6
5 CRIPTOGRAFIA: CONCEITOS GERAIS ............................................................... 8
6 TÉCNICAS CRIPTOGRÁFICAS MAIS UTILIZADAS E CONHECIDAS............... 11
6.1 Cifra de César .................................................................................................... 11
6.2 Crifra de Vigenère .............................................................................................. 12
6.2.1 Funcionamento da cifra ................................................................................... 12
6.3 Enigma ............................................................................................................... 13
6.4 Criptografia Simétrica ......................................................................................... 14
6.5 Criptografia Assimétrica...................................................................................... 15
6.6 Criptografia nas redes sem fio ............................................................................ 18
6.7 WEP ( Wired Equivalent Privacy) ....................................................................... 18
6.8 WPA e WPA2 ..................................................................................................... 19
6.9 Assinatura digital ................................................................................................ 19
6.10 Criptografia quântica......................................................................................... 20
6.11 Monogrâmicas .................................................................................................. 20
6.12 Poligrâmicas ..................................................................................................... 21
6.13 Homofônicas ..................................................................................................... 21
6.14 Tomográficas .................................................................................................... 21
6.15 Criptografia Hash .............................................................................................. 21
6.16 Combinaçâo dos tipos ...................................................................................... 22
7 DISSERTAÇÃO .................................................................................................... 23
7.1 Estruturação, conceitos e fundamentação.......................................................... 23
7.2 Benefícios em relação às técnicas anteriores. ................................................... 24
7.3 Aplicações que fazem ou fizeram uso da técnica. .............................................. 26
7.4 Discussão comparativa entre esta técnica e outras conhecidas ........................ 27
7.5 Vulnerabilidades e falhas .................................................................................... 27
7.6 Melhorias propostas e/ou implementadas .......................................................... 28
8 PROJETO DO PROGRAMA ................................................................................. 29
9 RELATÓRIO DE LINHAS DE CÓDIGOS ............................................................. 33
10 APRESENTAÇÃO DO PROGRAMA .................................................................. 35
BIBLIOGRAFIA ................................................................................................... 36
FICHA DE ATIVIDADES PRÁTICAS SUPERVISIONADAS .............................. 37
LISTA DE ILUSTRAÇÕES
Imagem 1 - Esteganografia ........................................................................................ 8
Imagem 2 - Criptografia por transposição .................................................................. 9
Imagem 3 - Criptografia por substituição .................................................................. 10
Imagem 4 - Criptografia de César ............................................................................ 11
Imagem 5 - Exemplo aplicando criptografia de César .............................................. 12
Imagem 6 - Régua de Saint-Cyr ............................................................................... 13
Imagem 7 - Máquina Enigma e 3 rotores usados para criptografar .......................... 14
Imagem 8 - Linhas de código incrementam a posição ............................................. 23
Imagem 9 - Linhas de código que calculam a posição inicial ................................... 24
Imagem 10 - Frequência de caracteres na língua portuguesa ................................. 25
Imagem 11 - Texto criptografado pelo programa desenvolvido ................................ 25
Imagem 12 – Sequência de execução do programa de criptografia ......................... 30
Imagem 13 – Linha de código para inserção do texto claro em vetor ...................... 30
Imagem 14 – Fragmento da tabela ASCII ................................................................ 31
Imagem 15 – Linhas de código que apresentam o texto decodificado ..................... 32
Imagem 16 – Programa em execução solicitando texto para criptografar ................ 35
Imagem 17 - Programa em execução apresentando texto criptografado ................. 35
Imagem 18 - Programa em execução apresentando texto decodificado .................. 35
5
3 OBJETIVO DO TRABALHO
Ambientes físicos podem ser restringidos mediante barreiras físicas como
cordões de isolamento, distanciamento de segurança e controlado por demarcações
visíveis, vigilância constante ou uso de objetos que isolem de alguma forma aquilo
que se quer restringir, como no exemplo de caso descrito inicialmente para
desenvolver o presente trabalho, um navio contaminado com lixo tóxico apreendido
deve ter o acesso controlado para evitar contaminação mediante uso de roupas
especiais, distanciamento específico e acesso apenas por helicóptero por pessoas
autorizadas. Porém, mesmo barreiras físicas podem tornar-se mais seguras com a
utilização de senhas de acesso.
Há casos em que o controle de acesso é dirigido à informação propriamente
dita, independentemente de como ela se apresente, fisicamente, impressa em papel,
ou mais abstratamente no meio digital trafegando em uma rede de internet ou intranet.
Voltado a aumentar a segurança, objetiva-se desenvolver um sistema de criptografia
que restrinja o acesso a informações confidenciais ou até mesmo locais em que seja
necessário o controle de acesso mediante a codificação de textos de forma que fiquem
ocultos o significado e a escrita originais, para desenvolver o sistema de criptografia
torna-se necessário atender a um objetivo secundário, porém não menos importante,
de pesquisar e levantar os processos de criptografia existentes e descrever
previamentesuas formas de implementação e possíveis falhas na proteção das
informações.
6
4 INTRODUÇÃO
A Criptografia moderna se ocupa muito menos de sigilo do que
aproximadamente trinta anos atrás, quando justificava plenamente a etimologia da
palavra criptografia, cuja origem grega significa escrita oculta. Hoje, técnicas
criptográficas são empregadas na prevenção de incidentes de segurança.
No decorrer deste trabalho será possível ter uma visão panorâmica de algumas
técnicas criptográficas atuais mais importantes para a consecução de requisitos
fundamentais da segurança da informação, como sigilo, autenticação e integridade,
dos quais dependem, direta ou indiretamente, outros requisitos de segurança.
Um requisito muito em voga é a disponibilidade de sistemas servidores, alvos
constantes de ataques de negação de serviço: embora os métodos usuais para
tratamento e recuperação de incidentes de segurança não usem técnicas
criptográficas, protocolos de autenticação podem prevenir danos pelo abuso do
sistema por usuários mal-intencionados.
O sigilo de mensagens, ou de identidades, pode ser necessário a uma
aplicação (correio eletrônico, telefonia, mensageria em geral, compras com moeda
eletrônica em que anonimato é desejável), ou auxiliar a consecução de outro requisito,
como a autenticação. Por exemplo, quando um usuário faz um login, sua senha deve
ser transmitida em sigilo, sob pena de sua captura e uso por um usuário não
autorizado.
A segurança da informação é um dos objetivos básicos da criptografia. A
informação tornou-se um elemento fundamental na vida das pessoas e das empresas.
Hoje, utiliza-se cada vez mais recursos computacionais para armazenar, produzir e
distribuir informações. Com isso, aumenta-se também a preocupação com a
segurança desta informação e com a vulnerabilidade dos sistemas computacionais
que as gerenciam.
Pode-se definir segurança em rede como o processo de prevenir e detectar
qualquer uso não autorizado de uma rede de computadores. Prevenir tem o sentido
de tomar medidas que impeçam ou, pelo menos, dificultem ao máximo, o acesso de
pessoas não autorizadas (chamadas de “intrusos”) a qualquer parte de uma rede de
computadores.
7
Detectar significa afirmar que alguém tentou acessar o sistema, como foi a
tentativa de acesso (o chamado “ataque”), se foi ou não bem-sucedida, nesses casos
afirmativo, é possível perceber exatamente o que o intruso fez.
Os sistemas que aparentam despertar pouco interesse aos hackers, como os
de uma universidade ou os domésticos ligados à internet, são constantemente alvos
de ataques. Detectar estas investidas e os métodos utilizados é muito importante para
uma política de segurança.
Atualmente, a criptografia é comumente usada na internet, principalmente na
proteção de transações financeiras, em segurança e acesso em comunicação. A
criptografia quântica também é um tema que tem ganhado atenção nos laboratórios
de pesquisa, ela se destaca por não correr um alto risco de interceptação ao
necessitar de uma comunicação secreta prévia para envio de chaves, pois esta
técnica criptográfica não se baseia em funções, mas nas leis da física.
A criptografia, ao contrário do que muitos pensam, não é um recurso que passou a
ser usado recentemente, mas segundo a história, vem se aprimorando desde épocas
clássicas, iremos aprofundar no assunto no decorrer desta pesquisa.
8
5 CRIPTOGRAFIA: CONCEITOS GERAIS
Primeiramente é fundamental compreender o significado da palavra criptografia
com origem em duas palavras gregas: cryptos, que significa oculto ou secreto e
graphein, que significa grafia ou escrita, então o termo criptografia pode ser
compreendido como escrita secreta ou escrita oculta, este último significado pode
levar a algum tipo de confusão com a esteganografia como sendo uma das formas de
critografia, apesar das palavras serem bem diferentes em português, possuem um
significados muito similares, esteganografia é formada inicialmente pela palavra grega
steganos, que significa esconder, camuflar ou mascarar.
A diferença principal entre esteganografia e criptografia está na forma ou
sistema para tornar a mensagem oculta à leitores indesejáveis, na criptografia a
mensagem permanece escrita de forma visível e geralmente utiliza o alfabeto corrente
apenas transpondo ou substituindo caracteres de forma a tornar a mensagem
indecifrável àqueles que não tenham permissão para a leitura da mensagem. Por
outro lado, a esteganografia oculta a mensagem seja um texto ou até mesmo imagens
em outras imagens ou sons em materiais fonográficos de forma que olhos e ouvidos
humanos não possam perceber.
Imagem 1 - Esteganografia
Fonte: Banco Central do Brasil, 2017.
Outro aspecto importante a ser bem compreendido é o da classificação da
mensagem, pois uma vez que ela será codificada se tornará em um outro tipo de
mensagem, a mensagem escrita original, usualmente é classificada ou denominada
como mensagem clara ou texto plano, e a mensagem resultante do processo
criptográfico é identificada como mensagem codificada ou cifrada, já o processo de
codificação de um texto pode ser chamado de encriptação ou cifragem.
9
É comum nas técnicas de cifragem haver a fragmentação do texto claro em
valores unitários que são identificados como caracteres, os caracteres podem ser
letras, números, símbolos como arroba, cifrão, entre outros, cada caractere deve ser
transformado em um novo para evitar a quebra do código de encriptação.
Em consequência à criptografia ou codificação de textos desenvolveu-se a
criptoanálise que busca decifrar mensagens, em algumas bibliografias o termo decifrar
assume significado diferente do termo decodificar ou dedriptar, pois em um processo
de comunicação por mensagens criptografadas, tanto o emissor quanto o receptor
são capazes de decodificar mensagens de forma geralmente simples e pré-definida
por conhecerem o processo que cifra a mensagem e o processo que o torna claro
novamente, decifrar pode implicar em descobrir a cifra utilizada na codificação da
mensagem ignorando previamente qualquer tipo de senha, chave ou fórmula utilizada
para cifragem.
Existem inúmeros processos de criptografia que foram sendo desenvolvidos de
acordo com a necessidade de obter mais segurança ou até mesmo pela quebra do
sistema de cifragem tornando-a obsoleta, esses processos são agrupados em alguns
tipos básicos, os mais comuns são: simétrico, assimétrico, transposição e
substituição.
A criptografia por transposição consiste no deslocamento dos caracteres de um
determinado texto claro ou plano, há diversos meios de fazer este tipo de cifra que
foram implementados gradualmente para dificultar a quebra da cifra e serão
abordados mais detalhadamente no capítulo sobre técnicas de criptografia.
Imagem 2 - Criptografia por transposição
Fonte: autoral
As técnicas de criptografia por substituição utilizam caracteres externos ao
texto claro ou plano, geralmente as formulas atribuem um caractere determinado para
cada letra, o que torna esse tipo de cifra, em sua forma mais básica, um pouco mais
simples de ser quebrada do ponto de vista da criptoanálise, isso se torna possível por
10
contagens de letras mais frequentes no idioma em que o texto claro foi escrito, por
este motivo também foram implementadas várias técnicas para tornar a quebra da
cifra mais difícil, essas técnicas serão vistas adiante no capítulo de técnicas de
criptografia.
Imagem 3 - Criptografia por substituição
Fonte: autoral
A criptografia simétrica, grosso modo, utiliza uma senha que faz com que o
texto plano seja cifrado, a senha é única e por este motivo pode ser mais vulnerável aquebras, por outro lado, os tipos de criptografia assimétrica possuem duas chaves,
uma chamada de pública e outra privada, a pública é compartilhada eletronicamente
sem que haja uma preocupação de mantê-la em total segredo, já a chave privada é
de conhecimento exclusivo de emissor e receptor obtida por cálculos matemáticos que
serão detalhados um pouco melhor em técnicas de criptografia.
11
6 TÉCNICAS CRIPTOGRÁFICAS MAIS UTILIZADAS E CONHECIDAS
6.1 Cifra de César
Historicamente, um dos primeiros registros que se tem de um processo de
criptografia de textos é a chamada cifra de César, tornou-se assim conhecida por seu
uso para comunicação entre Júlio César e seus soldados de alta patente ou políticos
de forma que o teor das mensagens não pudesse ser compreendido caso alguém
fizesse a interceptação delas no caminho.
O funcionamento é bastante simples, isso porque a escrita por si só já é um
tipo de código e na época do império romano, não era tão comum que todos soubesse
ler e escrever como nos dias de hoje, além disso, os processos de criptoanálise para
quebrar os códigos de cifragem forçaram a evolução das técnicas pois a cada quebra
elas tornaram-se obsoletas e uma nova forma deveria ser criada para aumentar a
dificuldade de descoberta do conteúdo das mensagens.
Pode-se definir o código de cifragem como Texto Cifrado=Texto clato+3, ou
seja, cada caractere era substituído por um correspondente no alfabeto em 3 letras
consecutivas, conforme demonstrado na imagem a seguir, o caractere “B” foi
substituído pelo caractere “E”.
Imagem 4 - Criptografia de César
Fonte: ZOCHIO, 2016.
Além de ser considerada um tipo de cifra de substituição por usar caracteres
externos ao texto claro para cifragem, pode ser classificada como monoalfabética ou
12
simples, pois utiliza apenas um correspondente fixo para cifrar cada caractere do texto
claro, como se um novo alfabeto fosse usado que inicia na letra D, ou seja:
Alfabeto claro: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Alfabeto cifrado: DEFGHIJKLMNOPQRSTUVWXYZABC
Imagem 5 - Exemplo aplicando criptografia de César
Fonte: autoral.
6.2 Crifra de Vigenère
A cifra de Vigenère é uma técnica de criptografia por substituição poli alfabética
que utiliza uma série de cifras de César diferentes, baseadas nas letras de uma
palavra-chave.
6.2.1 Funcionamento da cifra
Essa cifra consiste em várias cifras de César utilizadas em sequência, com
valores de deslocamento diferentes obtidos a partir de uma palavra-chave (uma
espécie de "senha").
Entre as cifras de substituição, a cifra de Vigenère se assemelha às técnicas
de transposição geométricas pois utiliza a distribuição de caracteres em forma de
matriz, porém ela é pré-definida pela ordem alfabética horizontalmente e
verticalmente, é tida como polialfabética pois o alfabeto inicia sempre em uma letra
subsequente, além disso, assim como técnicas de transposição que usam chave
numérica obtida por uma palavra, a cifra de Vigenère usa uma palavra ou texto chave
posicionado horizontalmente no topo das colunas combinado ao texto claro que é
posicionado na primeira coluna à esquerda e como num diagrama ou como
coordenadas em um plano cartesiano a letra substituta é definida conforme pode-se
observar na régua de Saint-Cyr adotada para facilitar na codificação e decodificação
13
de textos, um texto claro “U” é cifrado utilizando a chave “H” e como saída a letra “C”,
o nome da cifra refere a autoria de Blaise de Vigenère nascido em 1523, há registros
de que sua cifra tenha sido quebrada somente em 1854 pelo matemático Charles
Babbage, porém nenhum documento oficial foi publicado para notificar a quebra da
cifra, somente em 1863 tal registro foi formalmente registrado por Kaisiski.
Imagem 6 - Régua de Saint-Cyr
Fonte: Ufscar, 2017.
6.3 Enigma
Enigma é uma máquina desenvolvida pelo alemão Arthur Scherbius por volta
de 1918, a invenção teve a finalidade de criptografar mensagens com instruções para
movimentações das tropas alemãs, locais que seriam atacados, entre outras
14
informações pertinentes para o avanço do exército nazista, foi utilizada principalmente
durante a segunda guerra mundial.
O sistema de cifra, que pode ser classificado como de substituição,
proporcionou grande segurança à criptografia pelo número de variações possíveis
provenientes dos rotores que se movimentavam simultaneamente a cada letra
digitada em seu teclado similar ao de uma máquina de escrever, um modelo de 3
rotores poderia ser ajustado em cerca de 1,07*10^23 maneiras diferentes, algo
comparável com uma chave de 77bits (ZOCHIO, 2016, p.43), para quebrar a
criptografia e tentar barrar o progresso dos nazistas, o exército inglês recrutou uma
equipe de matemáticos e linguistas e resultou no desenvolvimento da máquina
conhecida como a Bomba de Turing, Alan Turing e Gordon Welchman foram os
responsáveis pela construção da máquina e também pela forma de operação de modo
a decriptar os textos alemães que tinham a troca de senha diariamente.
Imagem 7 - Máquina Enigma e 3 rotores usados para criptografar
Fonte: Enigma, 2017.
6.4 Criptografia Simétrica
Desde a década de 70 já eram utilizadas técnicas de criptografia simétricas, a
principal característica dessas técnicas é a utilização de uma mesma chave para
15
criptografar e para decodificar, seu tamanho é determinado em bits e quanto mais bits,
maior a possibilidade de combinações e segurança, uma chave de 3 bits tem 2^3
combinações possíveis, ou seja, 8 combinações possíveis, desta forma, uma chave
de 128 bits pode ter milhões e milhões de combinações.
DES é uma das cifras simétricas mais usadas e conhecidas e foi desenvolvida
com base na cifra de Feistel que dividia caracteres no formato binário em duas partes
R e L, desta forma a cifra DES trabalha alterando os caracteres na forma binária em
grupos de 64 bits utilizando bits verificadores em cada um dos 8 bytes gerando uma
chave de 56 bits.
Mesmo com todo o processo para elaborar as chaves e também o tamanho em
bits gerando as combinações, a substituição é feita de forma monoalfabética e as
chaves são iguais para cifrar e decodificar, o que contribuiu para que com o auxílio de
computação em grande escala possa quebrar a cifra por tentativa e erro.
6.5 Criptografia Assimétrica
A principal característica de funcionamento da criptografia assimétrica é a
utilização de uma chave pública para fazer a cifragem e outra privada para fazer a
decodificação, resumidamente, essas chaves são relacionadas por operações
matemáticas que tornam possível a utilização de números diferentes não
compartilhados publicamente, que por meio dessas operações matemáticas
compartilhadas publicamente, geram uma chave única em comum para emissor e
receptor, tal chave torna-se privada pois ela insere os números privados escolhidos
por emissor e receptor nas operações matemáticas compartilhadas publicamente
gerando um novo número comum para os dois sem que emissor conheça o número
inserido pelo receptor nas operações matemáticas e vice e versa, o algoritmo inicial
utilizando esse sistema foi desenvolvido Whitfield Diffie e Martin Hellman (ZOCHIO,
2016, p.111) e é conhecido como algoritmo de Diffie-Hellman.
De forma simplificada, as operações matemáticas são potência e módulo em
uma fórmula de ((base^potência)mod(módulo), os passos para se obter uma chave
privada por meio do algoritmo Diffie-Hellman podem ser compreendidos com o uso de
números pequenos conforme a seguir:
16
1 – Emissor e receptor escolhem publicamente números primos base=3 e módulo=7;
2 – Emissor escolhe um número secreto que nem mesmo o receptor saiba que é
usado para a potênciae efetuar o cálculo e enviar o resultado que é o resto da divisão
ao receptor. Potência=4. Então 3^4mod7=4.
3 – Receptor também escolhe um número secreto para usá-lo como potência e realizar
o cálculo na mesma fórmula básica para ser enviado ao emissor. Potência=11. Então
3^11mod7=5.
4 – Emissor utiliza o número enviado pelo receptor na mesma fórmula, porém
substituindo a base pelo número enviado pelo emissor, ou seja, 5^4mod7=2.
5 – Receptor utiliza o número enviado pelo emissor na mesma fórmula, porém
substituindo a base pelo número enviado pelo receptor, ou seja, 4^11mod7=2.
No final do processo do algoritmo Diffie-Hellman, a chave privada comum para
emissor e receptor cifrarem e decodificarem mensagens é 2, este método serviu de
fundamento para que, por volta de 1976, R.S. Rivest, A. Shamir e L. Adleman
(COUTINHO, 2005, p.3) desenvolvessem, no Instituto de Tecnologia de
Massachusetts (MIT), o algoritmo RSA que tem o nome formado pelas iniciais de seus
desenvolvedores.
Os passos envolvendo operações matemáticas são um pouco mais complexos que
no algoritmo Diffie-Hellman, mas é possível que uma chave pública seja distribuída
para cifragem de mensagens e a chave que decodifica as mensagens, que é privada,
é diferente da pública, o que pode tornar a criptografia mais segura.
Assim como no algoritmo de Diffie-Helmman, são utilizados números primos, para
ilustrar os passos serão utilizados números pequenos, mas quanto maiores os
números escolhidos para compor as chaves, maior a segurança pois para que seja
descoberta a chave privada o número de combinações é muito maior, a seguir os
passos resumidos para obter as chaves pública e privada pelo algoritmo RSA:
1 – Com dois números primos iniciais é calculada a chave pública, primeiramente o
que será usado como módulo que será representado neste exemplo pela letra M,
como já foi dito anteriormente, quanto maiores os números, mais segurança a chave
terá, neste caso os números serão A=3 e B=7, números primos pequenos apenas
para ilustrar os passos e facilitar os cálculos.
17
M = A*B --- M = 3*7 --- M=21
2 – Em seguida é calculada a potência que comporá a chave pública, como a chave
privada usará um valor diferente como potência, serão diferenciadas P1 e P2 para as
chaves pública e privada respectivamente, para calcular P1 é necessário fatorar um
número obtido pelo produto entre A-1 e B-1 ou seja (3-1 e 7-1) que é 12.
12 = 2*2*3
Para se definir um número para P1 de forma que M=21 e P1 sejam primos entre si,
ou seja, P1 não necessariamente deve ser primo, mas deve-se evitar que seja divisível
por 2 ou 3, então P1=17.
3 – Para se definir a potência da chave privada (P2) deve-se primeiro encontrar o
máximo divisor comum entre (A-1*B-1) e P1 analisando o resto para que
posteriormente aplique-se no algoritmo estendido de Euclides.
P1/(A-1*B-1)
17/12 = 1 --- resto 5;
12/5 = 2 --- resto 2;
5/2 = 2 --- resto 1;
2/1 = 2 --- resto 0;
Aplicando o resto no algoritmo estendido de Euclides
5 = (1*17) – (1*12)
2 = (1*12) – (2*5)
1 = (1*5) – (2*2) || (1*5) – 2*((1*12) + (2*5)) || (1*5) – (2*12) + (4*5) || (5*5) – (2*12)
P2 = 5
Chave Pública – M=21 e P1=17
Chave Privada – M=21 e P2=5
4 – Para que a mensagem seja cifrada utiliza-se a chave pública, digamos que um
texto seja cadastrado em um vetor e corresponda a 2 e um outro a 11, o caractere
cadastrado na posição 2 poderá ser substituído pelo cadastrado na posição 11, o
18
mesmo pode ser aplicado utilizando a tabela ASCII convertendo cada caractere do
texto claro por um valor decimal e aplicando-o à fórmula para criptografá-lo utilizando
o resultado decimal para localizar o correspondente na tabela ASCII.
Texto Cifrado = 2^17 mod21 = 11
Texto Decodificado = 11^5 mod21 = 2
Uma característica relevante e diferencial do algoritmo RSA em relação às
técnicas de substituição com uma fórmula fixa que relaciona um caractere a outro é
que a modularidade pode relacionar números diferentes a um número resultante igual,
por exemplo: 49 (mod 21) = 7 e 70 (mod 21) = 7, nesse caso dois caracteres
correspondentes aos valores decimais 49 e 70 seriam substituídos pelo novo
caractere correspondente a 7.
6.6 Criptografia nas redes sem fio
Com o avanço da internet e das conexões das redes surgiu a necessidade de
desenvolvimento de mecanismos de segurança que atendessem aos novos desafios,
uma rede com fios, se comparada a uma rede sem fios, é mais segura pois sua
conexão à LAN (ponto de acesso à rede), que anteriormente eram feitas em
roteadores com conexões por cabo, atualmente são acessados por ondas em
equipamentos que combinam modem e roteador por wi-fi, ou seja, por frequências de
ondas e não por cabo, é exatamente neste ponto que foi aberta uma porta
aparentemente sem muito controle para qualquer tipo de ataque, pois qualquer um
com acesso à frequência de conexão wi-fi pode interceptar o tráfego das informações
sem um mecanismo de segurança que previna esse tipo de ação.
6.7 WEP ( Wired Equivalent Privacy)
Essa técnica usa chave secreta compartilhada e o algoritmo de criptografia
RC4. O roteador wireless ou ponto de acesso, bem como todas as estações que se
conectam a ele devem usar a mesma chave compartilhada.
19
Basicamente o sistema envolve um “desafio” (STALLINGS, 2015, p.463) que
implica na troca de informações ou pacotes entre o ponto de acesso e o equipamento
que deseja se conectar à rede wi-fi, este equipamento, que pode ser um notebook,
desktop, celular, tablet, entre outros, solicita a conexão por meio de autenticação que
por sua vez recebe uma chave de 128 bits do equipamento de ponto de acesso, essa
chave é um texto claro que deve ser devolvido ao ponto de acesso como um texto
cifrado, o ponto de acesso confere se a chave (texto claro) foi devidamente encriptada
fazendo a decodificação e comparando com o texto claro enviado ao equipamento
que solicita a conexão, se estiverem iguais a conexão é liberada.
Embora soluções como a combinação das chaves com os endereços dos
equipamentos de ponto de acesso e do usuário tenham aumentado a segurança, o
fato de a chave usar apenas 128 bits e os avanços subsequentes da computação a
tornaram pouco segura, o que levou ao desenvolvimento da WPA e WPA2.
6.8 WPA e WPA2
Esses dois certificados de segurança são baseados no padrão da Wi-Fi Alliance
para redes locais sem fio e utilizados por muitas empresas e até em redes domésticas.
Eles permitem autenticação mútua para verificação de usuários individuais e
criptografia avançada. A WPA fornece criptografia para empresas, e a WPA2 –
considerada a próxima geração de segurança Wi-Fi, vem sendo usada por muitos
órgãos governamentais em todo o mundo.
6.9 Assinatura digital
Um recurso conhecido por Assinatura Digital é muito usado com chaves
públicas. Trata-se de um meio que permite provar que um determinado documento
eletrônico é de procedência verdadeira.
A pessoa que recebe um documento assinado digitalmente usa a chave pública
fornecida pelo emissor para se certificar da origem. Além disso, a chave é integrada
20
ao documento, isso implica que qualquer alteração realizada nas Informações vai
invalidar o documento.
6.10 Criptografia quântica
Tem se apresentado como uma técnica criptográfica inquebrável devido a seu
tipo de implementação baseada na mecânica quântica e a viabilidade de troca de
chaves secretas sem contato prévio entre emissor e receptor.
As características provenientes da mecânica quântica são em relação ao
fenômeno de polarização da luz e a análise dos fótons que a compõem, essa análise
consiste no posicionamento da polarização dos fótons e a leitura deles entre emissor
e receptor, a polarização é feita em ângulose a leitura também, ambos podem
coincidir ou não, porém, quando há uma angulação de diferença próxima de 45 graus
pode ser que o fóton passe ou não passe pelo filtro de leitura, então ele é
desconsiderado na geração das chaves, são considerados apenas os que tenham
angulação consideradas iguais ou diferentes, as iguais assumem valor 1 e as
diferentes assumem valor 0, a segurança pode ser conferida também pela publicação
dos resultados, o receptor dos fótons publica o grau da leitura de cada fóton, desta
forma, emissor e receptor podem gerar uma única chave sem precisar publicá-la, pois
o emissor pode conferir pelo ângulo de leitura publicado quais foram os fótons
corretos, incorretos e quais foram desconsiderados e obter a mesma chave que o
receptor.
Apesar de os estudos de implementação dessa técnica de criptografia serem
da década de 80, ainda há problemas de infraestrutura para sua implementação em
escala, pois o envio dos fótons gera muitos erros e depende de um tipo de fibra óptica
de alta qualidade e custo elevado.
6.11 Monogrâmicas
Como cada um dos caracteres do texto claro é substituído por um outro, o
comprimento da mensagem cifrada é igual ao comprimento da mensagem original e
21
a frequência de ocorrência das letras (números ou símbolos) do criptograma é a
mesma que a frequência de ocorrência das letras da língua usada no texto claro.
6.12 Poligrâmicas
A substituição monoalfabética poligrâmica tem as mesmas características da
substituição simples, com a diferença de que se substitui grupos de caracteres do
texto original por um ou mais caracteres. Portanto, o comprimento da mensagem
cifrada nem sempre é o mesmo da mensagem original.
6.13 Homofônicas
Na criptologia, é uma cifra que substitui cada um dos caracteres do texto claro
por um de vários símbolos possíveis, todos com o mesmo significado. Apesar de
vários substitutos para cada um dos caracteres, o comprimento do texto cifrado é igual
ao do texto claro. Um exemplo de substituição homofônica é a cifra de Babou.
6.14 Tomográficas
Sistemas tomográficos, também conhecidos como tomogrâmicos, são aqueles
nos quais cada caractere é substituído por um grupo de duas ou mais letras ou
números. O comprimento do criptograma é maior do que o do texto original. Exemplos
clássicos do método tomográfico são o Código de Políbio e a cifra de Bacon.
6.15 Criptografia Hash
A técnica de criptografia chamada Hash faz uma redução de determinada
informação, independente de seu tamanho, após criptografada assumirá um tamanho
padronizado de acordo com o tipo, informações de 1 Mb ou de 1 Tb, por exemplo,
assumem o mesmo tamanho de saída com 16 bytes se submetidas a um Hash do tipo
22
MD5 ou 512 Bytes se submetidas a um Hash Wrilpool ou SHA 512, ou seja,
independente do tamanho original da informação, a saída sempre terá o mesmo
tamanho. Seja uma função HASH H, e x uma string qualquer, teremos que H(x) será
o valor HASH para a string x.
As características básicas de uma função HASH são:
O valor de entrada da função possui qualquer tamanho;
O valor de saída da função possui tamanho fixo;
H(x) é relativamente fácil de ser computado, para qualquer valor de x;
H(x) é uma função “one-way”;
H(x) é livre de colisão.
6.16 Combinaçâo dos tipos
Com os dois tipos de Chaves (Simétrica e Assimétrica) tendo suas vantagens
e desvantagens, era natural o surgimento um método que buscasse mixar as
vantagens de cada um, eliminando assim, suas desvantagens. Os protocolos TLS
(Transport Layer Security) e SSL (Secure Sockets Layer) são exemplos desse mix.
A predefinição de uma chave pelo tipo de criptografia simétrico apresenta certa
fragilidade, por outro lado, o uso exclusivo e em larga escala da criptografia
assimétrica necessita de um grande esforço computacional pelo tamanho das chaves
em bits pois disso depende a segurança de uma chave assimétrica, uma solução
encontrada é a combinação das duas técnicas, reduzindo o uso de força
computacional e aumentando a segurança em relação à chave simétrica.
Como o algoritmo de chave pública garante que a negociação foi realizada em
um canal seguro, não havendo a necessidade da troca periódica da chave (problemas
no caso da Chave Simétrica), todo o restante do processo pode passar a ser realizado
utilizando algoritmos de chave simétrica, o que diminui potencialmente a necessidade
do poder computacional, permitindo seu uso em uma comunicação mais intensa
(problemas encontrados na Chave Assimétrica).
23
7 DISSERTAÇÃO
7.1 Estruturação, conceitos e fundamentação.
Para o desenvolvimento do algoritmo de criptografia, e a correspondente
decodificação, foram observados aspectos de técnicas de criptografia variadas
descritas anteriormente tais como de transposição e substituição que é de principal
importância para a estruturação.
Uma criptografia de substituição permite uma diversidade de variações para a
substituição de caracteres usados no texto claro, isso pode ser constatado nas
técnicas descritas de Vigenère ou da máquina Enigma, são inúmeras combinações
possíveis que tornam a quebra do código por tentativa ou criptoanálise um trabalho
muito mais complexo, isso ocorre pelas diversas combinações entre texto claro e texto
cifrado por caractere, ou seja, a simplicidade de uma cifra de substituição no
estabelecimento de um padrão básico para substituir caracteres é quebrada por um
padrão adicionado à cifra que faz a variação da substituição, dessa forma, um
caractere “A” substituído inicialmente pelo caractere “T”, assume um outro
correspondente para a substituição cada vez que se repetir no texto claro.
Para se obter este conceito de diversos correspondentes para um determinado
caractere do texto claro foi utilizado um procedimento similar ao das cifras mais
comuns de substituição em que é definida por uma posição numérica (Num) que
calcula o novo caractere, ou seja, o caractere “A” corresponde a 65 em valor decimal
na tabela ASCII, se Num=1 temos (65=65+1), o que garante a variação é a soma
constante para cada caractere do texto claro combinado a uma chave numérica inicial.
Imagem 8 - Linhas de código incrementam a posição
Fonte: autoral.
24
O procedimento matemático de modularidade visto nas técnicas de criptografia
assimétricas também foi utilizado para gerar uma chave numérica inicial mencionada
anteriormente, desta forma, o código calcula uma variável a partir de um número
randômico entre 0 e 1000 e em seguida o aplica ao módulo 255 que é o número de
caracteres da tabela ASCII estendida utilizada para relacionar cada caractere a um
valor decimal, esse procedimento resulta em um recurso similar adotado pela Enigma
que era reposicionada diariamente para iniciar contagem em uma das 26 letras do
alfabeto para criptografar e decodificar as mensagens, desta forma, no programa
desenvolvido inicia a substituição em um caractere (Num) com valor aleatório e vai
sendo incrementado em uma posição a cada caractere cifrado (Num=Num+1) e o
valor de (Num) é calculado por Num (mod255).
Imagem 9 - Linhas de código que calculam a posição inicial
Fonte: autoral.
7.2 Benefícios em relação às técnicas anteriores.
Em relação às técnicas de criptografia de substituição com uma chave
numérica simples, ou com uma chave repetida constantemente, os recursos utilizados
para o desenvolvimento do programa proporcionam maior segurança e complexidade
do ponto de vista de criptoanálise se utilizado o critério de frequência de caracteres,
identificamos a letra “A” com maior índice de frequência, em seguida temos, “E”, “O”,
“S”, “R”, “I”, “N” e assim por diante, conforme o quadro a seguir.
25
Imagem 10 - Frequência de caracteres na língua portuguesaFonte: ZOCHIO, 2016.
Esse tipo de análise de frequência é mais confiável com textos de maior
conjunto de caracteres, ou seja, para textos curtos, como palavras ou senhas de 6
dígitos é pouco funcional, se tomarmos como exemplo a frase: “Venha para a Unip, a
preferida no mercado profissional” podemos constatar a frequência de A=8, E=4, O=4,
R=4, I=4, S=2 e assim por diante, se fosse utilizada uma técnica de criptografia de
substituição com chave simples de C=X+7, em que 7 é a chave, X o texto claro e C o
texto cifrado, a letra “A” seria substituída pela letra “I” e surgiria por 8 vezes no texto
cifrado, isso facilitaria a criptoanálise, se fosse utilizada alguma técnica de
transposição, por exemplo, a criptoanálise por frequência seria ainda mais rápida pois
indicaria a letra “A” de imediato, restando apenas identificar o posicionamento original.
Com a utilização da chave randômica combinada ao incremento da chave de
cifragem a cada caractere foi possível superar essa fragilidade, podemos observar no
texto cifrado pelo programa que o caractere “A” foi substituído por correspondentes
diferentes, conforme quadro a seguir, pode-se verificar a substituição por “a”, “C”, “E”,
“G”, “h” e “?”.
Imagem 11 - Texto criptografado pelo programa desenvolvido
Fonte: autoral.
26
7.3 Aplicações que fazem ou fizeram uso da técnica.
A técnica utilizada para o desenvolvimento do código de encriptação do
presente trabalho é feita com base nas técnicas de substituição, as técnicas de
substituição podem ser consideradas as mais antigas formas de cifrar mensagens,
historicamente pode ser vista sua utilização no império Romano na Cifra de César, ou
em um passado mais recente nas primeira e segunda guerras mundiais, os comandos
que teriam de ser passados para os membros do exército eram criptografados, para
caso o inimigo conseguisse captar as ordens não fosse possível a compreensão do
que seria feito. Uma grande e famosa máquina também usava um método de
substituição, porém muito mais complexo que as antigas cifras de substituição, era a
Enigma, que por um grande período da segunda guerra mundial conferiu
confidencialidade dos comandos e táticas de ataque das tropas nazistas, já que era
uma grande invenção feita pelos alemães e os países inimigos não conseguiam
descobrir os locais que seriam bombardeados ou invadidos, a segurança da Enigma
era conferida pela constante mudança nos símbolos de representação.
As cifras de substituição podem ser aparentemente básicas, mas se bem
elaboradas podem ser de complexa decifragem se submetida a ataques de
segurança, resultados otimizados podem ser obtidos se a troca de símbolos
correspondentes se altera com certa rapidez, mesmo que se consiga quebrar a
criptografia em uma mensagem isolada, ela irá se alterar, assim como um looping
contínuo de codificação e decodificação. Essa técnica é utilizada até os dias atuais, e
desde a segunda guerra já foram criadas diversas criptografias substitutivas, assim
como a criptografia de “césar”, “vigenère”, dentre outras.
Embora haja a impressão de que cifras de substituição tenham caído em
desuso pelo surgimento de técnicas bem elaboradas matematicamente como a
assimétrica RSA ou a simétrica DES, elas também terminam aplicando a substituição
de caractere, porém com formas de calcular chaves de formas diferenciadas.
27
7.4 Discussão comparativa entre esta técnica e outras conhecidas
A substituição é uma técnica simples de ser compreendida, pois a ideia que ela
traz é de que os caracteres serão substitutos por outros como se ao invés de
escrevermos se utilizar um alfabeto comum é utilizado um alfabeto que inicia em outra
letra que não é o caractere “A”, o resultado é a total falta de inteligibilidade do texto,
entretanto, historicamente as técnicas de substituição evoluíram para tornarem a
quebra da codificação mais trabalhosa, a técnica utilizada para desenvolver o código
de encriptação do presente trabalho observou algumas formas de incrementar as
técnicas de substituição mais simples como a de César tornando o processo de
substituir os caracteres por diversos caracteres correspondentes recorrendo à
característica própria da técnicas de criptografia polialfabéticas, muito similar à cifra
de Vigenère em que cada caractere era cifrado combinado a uma chave porém com
o aumento de complexidade combinando duas chaves ao invés de uma.
A forma clássica de conseguir quebrar criptografias de substituição é a análise
de frequência de caracteres que se repetem dentro da mensagem codificada sendo
levado em consideração o idioma, pois para cada um há alguns caracteres que se
repetem, desta forma um hacker pode quebrar uma cifra de substituição simples, o
que não ocorre facilmente em cifras de substituição tidas como polialfabéticas.
7.5 Vulnerabilidades e falhas
Algumas técnicas de criptografia simétricas atuais oferecem inúmeras
combinações de chaves como pôde ser visto na técnica DES, são milhões e milhões
de combinações possíveis e mesmo com o alto nível de combinações pôde ser
descoberta por força bruta, ou seja, tentativa e erro, com o auxílio do uso de
computação em grande escala.
No código desenvolvido, por mais que haja a chave randômica que é alterada
a cada inicialização do programa, a variação ocorre apenas entre números de 0 a
1000 mod 255, isso para que se obtenha uma chave de inicialização correspondente
a um caractere da tabela ASCII estendida que possui 255 caracteres, em comparação
aos milhões e milhões de combinações que já foram quebradas da cifra RSA, a chave
28
randômica inicial do código desenvolvido pode representar certa vulnerabilidade se
submetida a ataques com uso de força bruta.
7.6 Melhorias propostas e/ou implementadas
Em comparação com o projeto inicial do código de encriptação desenvolvido
com o projeto final, uma melhoria importante pode ser destacada no sentido do
aumento da complexidade de quebra da cifra, é a adição de uma chave inicial
randômica que é alterada cada vez que o código é iniciado para encriptar um
determinado texto claro, inicialmente havia apenas uma chave numérica inicial fixa
semelhante a criptografia de César que era incrementada a cada caractere tornando
a repetição de caracteres correspondentes com variação limitada e ainda fácil de ser
descoberta, bastaria testar algumas palavras e analisar o texto claro em relação ao
cifrado para descobrir o padrão de incremento da chave inicial que se repetia a cada
inicialização de execução do código.
Algumas melhorias ainda poderiam ser incrementadas como o aumento do
números de variações possíveis da chave randômica inicial somada ao incremento
simples de +1 a cada caractere codificado que faz com que os caracteres não sejam
substituídos por um mesmo correspondente, um estudo de procedimentos
matemáticos poderia resultar em uma forma de cálculo variável constantemente a
cada caractere para dificultar a descoberta desta segunda chave, pois mesmo que a
chave randômica inicial mude a cada inicialização do código, uma criptoanálise mais
detalhada pode identificar que após a primeira chave inicializar a substituição é
incrementada sempre em +1.
29
8 PROJETO DO PROGRAMA
No código de criptografia desenvolvido, foi utilizada a técnica de criptografia
conhecida como "substituição", como já visto anteriormente, nesta técnica os
caracteres são substituídos por outros caracteres não necessariamente constantes no
texto claro, no programa desenvolvido tomou-se como base a tabela ASCII estendida.
Para ser definida a técnica de criptografia a ser utilizada foi levado em conta a
questão da quantidade de informações acessíveis para sua compreensão e
implementação, além da constatação das limitações encontradas no conhecimentode
procedimentos matemáticos elaborados em algumas técnicas que terminam
resultando igualmente em substituição. Para embasamento foram vistos
documentários, filmes, e por ela ser uma das técnicas utilizadas desde muito tempo,
assim como a máquina Enigma, tão famosa e de grande importância na segunda
guerra mundial.
Apesar da utilidade militar vista em muitas cifras de substituição, o que foi
abordado é a lógica em si, pode-se ressaltar que foi uma grande evolução, mesmo
que mecanicamente como na Enigma, a mudança diária das cifras, isso tornou muito
complexa a vida dos seus inimigos de guerra, neste trabalho tentamos produzir algo
similar, porém, com uma implementação mais fluída e dinâmica que é permitido pelo
atual acesso à equipamentos e sistemas computacionais mais desenvolvidos,
entretanto objetivou-se simultaneamente a complexidade de quebra da cifra obtida
pelo programa.
O programa tem basicamente duas interações com o usuário, uma para que o
usuário digite a palavra que deseja criptografar, que logo será alterada pelos
caracteres da tabela, e outra para que o usuário consiga decodificar o texto
inicialmente digitado. Ele leva uma lógica de mudança rápida na representação de
cada cifra, assim se torna algo mais difícil de ser quebrado. O programa trabalha de
forma simples e ágil para que o usuário não tenha dificuldade, ele apenas digita o
texto e tecla “ENTER” e ele é criptografado, após pressionar a tecla "ENTER" ele pode
obter a decodificação novamente.
30
Imagem 12 – Sequência de execução do programa de criptografia
Fonte: autoral.
Foram utilizados laços de repetição para a cifragem dos caracteres bem como
para a decodificação, desta forma, quando um determinado texto entra nos laços, tem
a saída apenas quando todos os caracteres são cifrados ou substituídos por novos
caracteres ou decodificados no segundo processamento do programa.
Para que o texto digitado pelo usuário seja alocado em determinados espaços
da memória foi utilizado o vetor com seu tamanho determinado pelo comando Length
associado à variável de entrada de texto “palavra”, desta forma os caracteres puderam
ser tratados de individualmente e substituídos corretamente. Durante a criação dos
laços houve alguns empecilhos com a lógica por trás deles, mas com auxílio das
técnicas de construção e desenvolvimento obtidas nas disciplinas de Linguagem de
Programação Estruturada e Lógica de Programação Aplicada foi possível implementá-
los de acordo com o função e resultado final desejado.
Imagem 13 – Linha de código para inserção do texto claro em vetor
Fonte: autoral.
Na forma bruta do programa, ele é executado da seguinte forma, o usuário
digita o texto que deseja criptografar, assim como já foi descrito acima, e o programa
usa um valor entre 0 e 1000 (mod 255) para calcular as possibilidades de cifras de
31
substituição para serem utilizadas, o módulo é utilizado em correspondência ao
número de caracteres da tabela ASCII estendida, por exemplo, se o valor for definido
na chave inicial resultar em "15", então a caractere que irá aparecer será resultante
do caractere do texto claro a ser cifrado correspondente na tabela ASCII somado ao
valor da chave, como o caractere “A” na tabela ASCII é 65 a substituição resulta de
(65+15 = 80) sendo que 80 corresponde ao caractere “P”, para cifrar os caracteres
seguintes de um texto claro o laço soma +1 à chave inicial, desta forma, se houvesse
dois caracteres A consecutivos no texto claro, um seria substituído pelo valor 80 e o
próximo pelo valor 81 que corresponde ao caractere “Q“ na tabela conforme abaixo:
Imagem 14 – Fragmento da tabela ASCII
Fonte: autoral.
A variável para receber a chave inicial randômica foi implementada para que a
mesma varie e não fique sempre um caractere fixo substituindo outro, o que torna
mais complexa a quebra da cifra. Como foi dito a cima, essa foi uma das medidas para
que o código apresentasse um resultado de segurança mais efetivo quando analisado
com a intenção de descobrir o método de cifragem.
32
A decodificação do texto cifrado é obtida pelo vetor em que o texto claro é
armazenado, desta forma, quando o usuário tecla “ENTER” o programa executa o laço
de leitura do vetor do texto claro em caracteres isolados e o converte novamente em
texto corrido.
Imagem 15 – Linhas de código que apresentam o texto decodificado
Fonte: autoral.
33
9 RELATÓRIO DE LINHAS DE CÓDIGOS
static void Main(string[] args)
{
string palavra, crip = "";
Random rdn = new Random();
int num;
num = (rdn.Next(0, 1000)) % 255;
Console.Write("\nEntre com a palavra que deseja criptografar: ");
palavra = Console.ReadLine().ToLower();
for (int i = 0; i < palavra.Length; i++)
{
int ASCII = (int)palavra[i];
int ASCIID = ASCII + num;
num = num + 1;
crip += Char.ConvertFromUtf32(ASCIID);
}
Console.WriteLine("\nEsta é sua palavra codificada: " + crip);
crip = "";
34
for (int i = 0; i < palavra.Length; i++)
{
int ASCII = (int)palavra[i];
int ASCIID = ASCII;
crip += Char.ConvertFromUtf32(ASCIID);
}
Console.Write("\nPressione 'enter' para descriptografar");
palavra = Console.ReadLine().ToLower();
Console.Write("\nEsta é sua palavra decodificada: {0}", crip);
Console.ReadKey();
}
35
10 APRESENTAÇÃO DO PROGRAMA
Imagem 16 – Programa em execução solicitando texto para criptografar
Fonte: autoral.
Imagem 17 - Programa em execução apresentando texto criptografado
Fonte: autoral.
Imagem 18 - Programa em execução apresentando texto decodificado
Fonte: autoral.
36
BIBLIOGRAFIA
Banco Central do Brasil. Museu de Valores do Banco Central. Disponível em:
<http://www.bcb.gov.br/?cedmuda>. Acesso em: 5 de novembro de 2017.
COUTINHO, S.C. Números inteiros e criptografia RSA. 2. ed. Rio de Janeiro:
IMPA, 2005.
Enigma. A máquina de cifra Alemã Enigma. Disponível em: <
http://users.telenet.be/d.rijmenants/en/enigma.htm>. Acesso em: 16 de novembro de
2017.
STALLINGS, William. Criptografia e segurança de redes: princípios e práticas. 6.
ed. São Paulo: Pearson Education do Brasil, 2015.
UFSCAR. A cifra de Vigenère. Disponível em:
<https://www.dm.ufscar.br/profs/caetano/iae2004/G6/cifra.htm>. Acesso em: 5 de
novembro de 2017.
ZOCHIO, Marcelo Ferreira. Introdução à criptografia. 1. ed. São Paulo: Novatec,
2016.
37
FICHA DE ATIVIDADES PRÁTICAS SUPERVISIONADAS
38
39
40
41