Buscar

APS Criptografia

Prévia do material em texto

UNIVERSIDADE PAULISTA
CIÊNCIA DA COMPUTAÇÃO
DANILO DE SALES SANTANA – C3228B1
EVANDSON SILVA DA CRUZ – A58DDF0
RICARDO FERNANDES SOUTO – C13CHI5
WANDERSON MARTINS OLIVEIRA – C202754
YURY RODRIGUES A NUNCIAÇÃO – C203360
AS TÉCNICAS CRIPTOGRÁFICAS, CONCEITOS, USOS E APLICAÇÕES:
Desenvolvimento de um programa de criptografia utilizando a Cifra de
Vigenère
SÃO PAULO
2014
SUMÁRIO
1 INTRODUÇÃO...........................................................................................................2
2 OBJETIVOS...............................................................................................................4
2.1 Geral........................................................................................................................4
2.2 Específicos.............................................................................................................4
3 CRIPTOGRAFIA........................................................................................................5
3.1 Definição................................................................................................................5
3.1 Segurança da informação....................................................................................7
4 TÉCNICAS CRIPTOGRÁFICAS MAIS UTILIZADAS E CONHECIDAS..................8
4.1 Criptografia simétrica...........................................................................................8
4.1.1 Data Encrypt Standard (DES)............................................................................8
4.1.2 Triple-Data Encryption Standard (3DES).........................................................9
4.1.3 Advanced Encryption Standard (AES) e Rijndael...........................................9
4.1.4 Ron's Code ou Rivest Cipher (RC)...................................................................9
4.1.5 Rivest Cipher 5 (RC5).........................................................................................9
4.1.6 Rivest Cipher 6 (RC6).......................................................................................10
4.1.7 International Data Encryption Algorithm (IDEA)...........................................10
4.1.8 Blowfish.............................................................................................................10
4.1.9 Twofish..............................................................................................................10
4.2 Criptografia assimétrica.....................................................................................10
4.2.1 RSA....................................................................................................................11
4.2.2 ElGamal.............................................................................................................12
4.2.3 Diffie-Hellman...................................................................................................12
4.3 Protocolos de segurança de redes Wi-Fi..........................................................12
4.3.1 Wired Equivalent Privacy (WEP).....................................................................12
4.3.2 Wi-Fi Protected Access (WPA)........................................................................13
4.3.3 Wi-Fi Protected Acces II (WPA2).....................................................................14
4.4 Assinatura digital................................................................................................14
4.5 Certificado digital................................................................................................14
4.6 Função Hashing...................................................................................................15
4.6.1 MD5 (Message Digest 5)..................................................................................15
4.6.2 SHA-1 (Secure Hash Algorithm).....................................................................15
5 CIFRA DE VIGENÈRE.............................................................................................16
5.1 Estruturação, conceitos e fundamentação......................................................16
5.2 Benefícios em relação às técnicas anteriores.................................................18
5.3 Onde foi ou ainda é utilizada esta técnica........................................................18
5.4 Comparação entre esta técnica e outras conhecidas.....................................19
5.5 Vulnerabilidades e falhas...................................................................................20
5.6 Melhorias propostas e implementadas.............................................................21
6 CONTRIBUIÇÃO DO TRABALHO NA NOSSA FORMAÇÃO...............................22
6.1 Interdisciplinaridade envolvida.........................................................................22
7 PROJETO DO PROGRAMA...................................................................................24
8 RELATÓRIO COM AS LINHAS DE CÓDIGO DO PROGRAMA............................28
9 APRESENTAÇÃO DO PROGRAMA EM FUNCIONAMENTO EM UM 
COMPUTADOR...........................................................................................................31
REFERÊNCIAS...........................................................................................................35
2
1 INTRODUÇÃO
Nestas últimas décadas, com a grande expansão da internet e sua utilização
em larga escala pela população, e a crescente adoção das redes de computadores
pelas organizações, sejam elas comerciais ou não, passou-se a ser praticamente
obrigatório a implantação de sistemas cada vez melhores com o objetivo de
aumentar a segurança das transações e armazenamento das informações sigilosas.
Os entusiastas e amantes de tecnologia, já estão familiarizados com a
importância da segurança, principalmente por causa das notícias dos diversos
ataques que grandes empresas e órgãos governamentais sofreram. Os demais
usuários da internet, preocupam-se com este tema, principalmente, quando tem que
acessar contas bancárias ou realizar compras em algum site.
Empresas e organização, conectadas a alguma rede de computador, estão
constantemente preocupadas com um eventual ataque que possa expor informações
confidências. Os atacantes com o passar do tempo, estão adquirindo conhecimentos
e meios cada vez mais eficazes para burlar a segurança das comunicações e ter
acesso a conteúdos que deveriam ser acessados somente por pessoas autorizadas.
Segurança da informação, nesta era digital e globalizada, é uma das
principais preocupações dos desenvolvedores e administradores de sistemas. Ter
informações violadas, pode, em muitos casos, significar a perda de credibilidade de
uma empresa ou organização, e reparar o dano levará muito tempo, ou, em casos
graves, não será possível.
A criptografia é uma das maneiras mais utilizadas para proteger informações
sigilosas de acessos não autorizados. Sendo realizada pela cifragem ou codificação
de uma informação, possibilitando que somente os destinatários passam
compreendê-las. Os dados codificados e decodificados pelas técnicas criptográficas,
permitem que os mesmos possam ser transmitidos, armazenados e lidos sem que
ocorra alterações no conteúdo ou sejam interceptados e compreendidos por
atacantes.
Não importa se as informações serão transmitidas em rede ou somente
armazenadas, pode-se utilizar as diversas técnicas criptográficas para protegê-las
de ataques. Em comunicações através da rede, a criptografia tem como objetivos
garantir a privacidade das informações, a não alteração dos dados e a autenticidade
dos mesmos.
3
Todas as mensagens cifradas devem ser privadas, somente o remetente e o
destinatário devem compreender o conteúdo da informação. Igualmente importante,
é que o método de criptografia deve permitir queas mensagens possam ser
assinadas. Possibilitando que a destinatório consiga confirmar o autor e verificar se a
mensagem não foi alterada.
As assinaturas digitais surgiram com o objetivo de sanar este problema, elas
permitem que se possa verificar quem é o autor de um documento, se este é o
verdadeiro e se não houve alteração no conteúdo do mesmo.
Os atuais métodos criptográficos são caracterizados pela alta segurança e
eficiência, utilizando uma ou mais chaves. Sendo esta última, uma sequência de
caracteres, podendo ser alfanumérica e conter símbolos, assemelhando-se, neste
sentido, a uma senha de login de uma conta de e-mail. Esta chave é utilizado pelos
métodos criptográficos para cifrar e decifrar uma mensagem.
A criptografia de chave simétrica e a criptografia de chave assimétrica, são as
duas grandes subdivisões em que podem ser classificados os métodos criptográficos
modernos. 
Este trabalho foi desenvolvido tendo como objetivos dissertar sobre os
conceitos gerais da criptografia, as técnicas criptográficas mais utilizadas, a
criptografia simétrica e assimétrica, as funções hash, a criptografia nas redes sem
fio, a assinatura e o certificado digital. Será também explicado os conceitos e
estruturação da cifra de Vigenère, seus benefícios e suas falhas, e onde foi utilizada.
Outro objetivo deste trabalho é desenvolver um programa que cifra e decifra
mensagens utilizando a cifra de Vigenère.
4
2 OBJETIVOS
2.1 Geral
Pesquisar e dissertar sobre as técnicas criptográficas, seus conceitos, usos e
aplicações. Ao final, elaborar um programa utilizando a linguagem de programação C
e a cifra de Vigenère, que permita ao usuário criptografar e descriptografar uma
mensagem.
2.2 Específicos
São objetivos específicos deste trabalho: 
• Pesquisar e dissertar sobre os conceitos gerais da criptografia;
• Pesquisar e dissertar sobre a criptografia simétrica;
• Pesquisar e dissertar sobre a criptografia assimétrica;
• Pesquisar e dissertar sobre as funções hash;
• Pesquisar e dissertar sobre a criptografia nas redes sem fio;
• Pesquisar e dissertar sobre os principais algoritmos criptográficos;
• Pesquisar e dissertar sobre a assinatura e o certificado digital;
• Pesquisar e dissertar sobre a cifra de Vigenère;
• Desenvolver um programa com base nas dissertações utilizando a linguagem 
de programação C e a cifra de Vigenère;
5
3 CRIPTOGRAFIA
3.1 Definição
Em sua origem está a junção de duas palavras gregas, kriptos = escondido(ou
oculto) e grifo = grafia. A criptografia trata das técnicas que permitem transformar
informações legíveis em, aparentemente, ilegíveis. Tendo como objetivo tornar a
informação privada, escondendo-a de indivíduos não autorizados.
Ao processo de transformar uma mensagem em outra, escondendo a
informação original e tornando o texto praticamente oculto, damos o nome de cifrar.
E ao texto resultante do processo de cifragem, chamamos de mensagem cifrada.
Sendo o processo inverso, o de retornar a mensagem para a forma original,
tornando a informação compreensível, chamado de decifragem.
Criptografar mensagens através de códigos ou cifras, são as duas maneiras
básicas de esconder informações. Pelo método de códigos, as palavras são
substituídas por outras com significados totalmente desvinculados da original. É
basicamente a criação de um novo “idioma” para utilizar na troca de mensagens. Ao
invés, por exemplo, de escrever a palavra “carro”, escrevemos “morango”. O maior
problema desta técnica é que se for muito utilizada, e um indivíduo não autorizado
tiver acesso às algumas dezenas de textos criptografados nesta técnica, é possível
que ele consiga identificar o significado verdadeiro de cada palavra. Outro problema
é que as partes envolvidas na troca de mensagens precisam conhecer previamente
o vocabulário do novo “idioma”.
O segundo método, o da cifra, é o mais utilizado. Esta técnica cifra a
mensagem original misturando e/ou substituindo as letras. Assim como no método
do código, a decifragem é realizada fazendo o processo inverso. Cifras de
transposição e cifras de substituição são os principais tipos deste método.
Nas cifras de transposição o conteúdo da mensagem permanece o mesmo,
no entanto, as letras são embaralhadas. Se na mensagem estiver escrita a palavra
“Brasil”, após a cifragem o texto passaria a ser, por exemplo, “isabir”.
No outro tipo de cifra, a de substituição, as letras, individuais ou em grupos de
mesmo tamanho, são substituídas por outras, de acordo com uma tabela de
substituição. Podendo serem subdivididas em: cifra de substituição simples, cifra de
substituição polialfabética, cifra de substituição de polígramos e cifra de substituição
6
por deslocamento.
A cifra de substituição simples, também conhecida como Cifra de César ou
cifra de substituição monoalfabética, é, como o próprio nome indica, uma cifra de
substituição, onde a letra original é trocada por outro caractere de acordo com uma
tabela. Geralmente é realizado o deslocamento das letras dentro alfabeto da tabela
de substituição. Ficou largamente conhecida como Cifra de César, por ser utilizada
no envio de mensagens secretos pelo imperador romano. O imperador deslocava
cada letra 3 casas a frente do alfabeto, a letra “A” tornava-se “D”, consequentemente
a letra “B” seria “E” e assim suscetivamente.
A cifra de substituição polialfabética é um melhoramento da Cifra de César,
utilizando diversas cifras de substituição simples para cifrar o texto. Quando se
utiliza uma única cifra é monoalfabética, com mais de uma, polialfabética.
Nas cifragens onde um grupo de letras é substituído por outro grupo de letras,
chamamos de cifra de substituição de polígramos. Ao contrário das anteriores, onde
cada letra era trocada por outro caractere, neste tipo de cifra a troca é entre grupos.
Por exemplo, poderíamos trocar a palavra “CARRO” por “LIVRO” ou “MESA” por
“BOLA”.
Por último, temos a cifra de substituição por deslocamento, que é uma
melhoria da cifra de César. Neste tipo não é utilizado um único valor para indicar o
deslocamento do alfabeto, e sim vários valores, um para cada letra da mensagem
original. A chave para cifrar e decifragem a mensagem cifrada, indica a rotação de
cada letra. Para cifrar a palavra “MESA” utilizando a chave “358”, por exemplo,
devemos substituir a letra “M” pela letra que está 3 posições a frente, ou seja, a letra
“P”. A letra “E” por “J”, que está 5 posições a frente no alfabeto, e assim
suscetivamente, até que todas as letras tenham sido substituídas.
A utilização das cifras ao invés dos códigos, tem a vantagem de não limitar a
quantidade de palavras utilizadas na mensagem e a mensagem cifrada ser mais
difícil de decifrar. Estes são os motivos pelos quais os algoritmos de criptografia
atuais utilizam as cifras.
Os algoritmos de criptografia utilizam as cifras junto com chaves para
cifragem e decifragem das mensagens. As chaves são grandes sequências de letras
e/ou números que serão responsáveis pelo resultado final da mensagem cifrada.
Embora o tipo de cifra utilizado seja o mesmo, se a chave utilizada for diferente, o
resultado final também será.
7
3.1 Segurança da informação
A segurança da informação é a grande preocupação da criptografia. Pode-se
obtê-la de diversas formas, tudo dependerá da situação e das necessidades
requisitadas. Ao longo dos séculos, até recentemente, as informações sigilosas e de
grande valor eram escritas, certificadas, guardadas e transmitidas através do papel e
da tinta.
Com o desenvolvimento das mídias de armazenamento magnético, das
telecomunicações e principalmente dos computadores, passou a existir a
possibilidade de criação de milhares de cópias de um mesmodocumento,
impossibilitando a identificação do original. Criou-se então, várias técnicas, entre
elas a criptografia moderna, para poder identificar, autenticar e validar um
documento. 
Atualmente existem diversos algoritmos e tecnologias que utilizam técnicas
criptográficas avançadas para poder garantir a segurança das informações. Temos,
como exemplo, a criptografia simétrica e assimétrica, as funções hash, as
criptografias de redes sem fio, a assinatura digital e o certificado digital.
8
4 TÉCNICAS CRIPTOGRÁFICAS MAIS UTILIZADAS E CONHECIDAS
4.1 Criptografia simétrica
Levando-se em conta a utilização das chaves, os tipos de criptografia podem
ser divididos em dois grupos. O primeiro deles é formado pelos sistemas de
criptografia de chave simétrica, que cifram e decifram uma mensagem utilizando
uma mesma chave.
Também conhecida como criptografia de chave secreta, este foi o primeiro
tipo de criptografia criada. Neste modelo, o remetente e o destinatário devem
conhecer a chave secreta previamente e guardá-la em segurança, pois se alguém
descobrir a chave poderá ler todas as mensagens trocadas entre as partes.
Uma das principais vantagens da criptografia simétrica é o menor tempo para
cifrar e decifrar uma mensagem, se comparada com a criptografia assimétrica. Além
disto, como trabalha com apenas uma chave, é mais simples desenvolver um
sistema que utiliza este modelo. 
Existem duas grandes desvantagens neste modelo: o primeiro é a
necessidade de utilizar-se de chaves complexas, caso contrário será facilmente
descoberta através do método da força bruta(tentativa e erro). A outra, é a grande
necessidade de compartilhar a chave através de um meios seguros.
4.1.1 Data Encrypt Standard (DES)
O DES é uma cifragem composta que cifra blocos de 64 bits em blocos de 64
bits, utilizando uma chave composta por 56 bits mais 8 bits de igualdade. Para cada
chave, o Data Encrypt Standard realiza substituições monoalfabéticas por intermédio
de um alfabeto de 264 letras. Os procedimentos publicados de quebra de
substituição monoalfabética abrange apenas alfabetos pequenos.
Entre 1972 e 1974 foi desenvolvida a versão final do Data Encrypt Standard
por um grupo comandado por Walter Tuchman. Eles partiram do LUCIFER(algoritmo
antecessor), com o objetivo de extinguir suas falhas.
Era utilizado por órgãos governamentais com implementação em hardware, e
sua usabilidade ficava restrita à cifragem de dados não confidenciais.
9
4.1.2 Triple-Data Encryption Standard (3DES)
Faz uso de três chaves de 64 bits (56 bits compõem cada uma das chaves e
8 bits são de igualdade) em três estágios de codificação cascateada. O algoritmo
pode ter chaves de até 192 bits. Os dados são criptografados com a primeira chave,
descriptografados com a segunda chave e criptografados novamente com a terceira
chave. Por esse motivo 3DES é mais lento que o DES original, por outro lado
oferece maior segurança.
4.1.3 Advanced Encryption Standard (AES) e Rijndael
Em uma proposta de substituir o Data Encrypt Standard, o NIST realizou uma
disputa para que um algoritmo obtivesse o nome de AES (Advanced Encryption
Standard).
AES não é exatamente o mesmo que Rijndael já que o mesmo suporta
maiores tamanhos do bloco e de chave. O Advanced Encryption Standard possui um
bloco fixo de 128 bits e utiliza-se de uma chave que pode ser de 128, 192 ou 256
bits. O Rijndael trabalha com chaves e blocos de tamanhos múltiplos de 32 bits, com
um mínimo de 128 bits e um máximo de 256 bits.
4.1.4 Ron's Code ou Rivest Cipher (RC)
Foi desenvolvido por Ron Rivest na empresa RSA Data Security, a criptografia
é muito usada em e-mails e utiliza chaves entre 8 e 1024 bits com um padrão de 128
bits, também existem outras versões, que se diferenciam por trabalhar com chaves
maiores. Faz uso um gerador pseudo-randômico para criar um fluxo de bits que é
usado como chave.
4.1.5 Rivest Cipher 5 (RC5)
Criptografia em bloco, o RC5 faz uso de uma grande flexibilidade e
possibilidade de parametrização. Com o Rivest Cipher 5 os blocos de entrada
podem ter qualquer tamanho pré-determinado, a chave também, e pode-se
predeterminar o número de iterações do algoritmo.
10
Como é muito flexível, é necessário o ajuste de uma série de parâmetros para
atender as necessidades particulares de cada caso. 
4.1.6 Rivest Cipher 6 (RC6)
RC6 tem um tamanho de bloco de 128 bits e suporta tamanhos de chaves de
128, 192 e 256 bits. RC6 é muito semelhante ao RC5 na estrutura apesar de utilizar
uma operação de multiplicação extra que não existe na RC5, a fim de fazer a
rotação dependente de todos os bits em uma palavra, e não apenas os poucos bits
menos significativos.
4.1.7 International Data Encryption Algorithm (IDEA)
 Desenvolvido em 1991, por James Massey e Xuejia Lai, segue a mesma
estrutura do DES e possui patente da suíça ASCOM Systec. Funciona em blocos de
64 bits (subdividido em blocos de 16 bits) e possui chave criptográfica de 128 bits. É
usado em mercado financeiro e no PGP, o programa para cifragem de e-mail
pessoal mais utilizado no mundo.
4.1.8 Blowfish
O Blowfish foi criado em 1993 por Bruce Schneier. É
uma criptografia simétrica de blocos que pode substituir o DES ou IDEA, tomando
uma chave de tamanho variável.
4.1.9 Twofish
Buscando melhorar Blowfish, ele (Bruce Schneier) desenvolveu o Twofish,
que faz uso de blocos de 128 bits e chaves de até 256. Sendo um dos mais rápidos
da atualidade, mesmo tendo vulnerabilidades, ninguém conseguiu quebrá-lo.
4.2 Criptografia assimétrica
A criptografia assimétrica, também conhecida como criptografia de chaves
11
pública, é o modelo mais utilizado e eficiente. Ele utiliza duas chaves, uma para
cifrar e outra para decifrar as mensagens. A chave pública pode ser compartilhada
com todos, sendo utilizada para cifrar as mensagens que serão enviados ao dono da
chave privada. A chave privada deve ser mantida em segurança e em segredo pelo
dono. Uma mensagem cifrada através de uma chave pública somente pode ser
decifrada com a chave privada correspondente.
Este modelo tem como vantagens a distribuição das chaves públicas através
de qualquer meio, não precisando utilizar um meio seguro para a transferência,
como é o caso da criptografia simétrica; maior segurança da criptografia e permite a
utilização de assinaturas digitais.
Sua desvantagem é um maior tempo para cifrar e decifrar mensagens,
quando comparada com o modelo de chave secreta.
4.2.1 RSA
O RSA é o algoritmo de chave assimétrica mais conhecido e utilizado,
levando em seu nome as iniciais de seus criadores, na época pesquisadores do MIT:
Ron Rivest(R), Adi Shamir(S) e Leonard Adleman(A). É um dos mais seguros
atualmente e permite a implementação de assinatura digital.
Sendo largamente utilizado na internet, desde as mensagens de e-mails até
as compras em lojas virtuais, permitindo uma navegação segura pela rede,
mantendo a privacidade dos usuários, autenticando e-mails, mantendo conexões
remotas protegidas e nas compras via cartão de crédito
No RSA, é utilizada a multiplicação de dois números primos para gerar as
chaves pública e privada. O resultado desta operação será disponibilizado ao
público, e caso o número seja grande, não comprometerá a segurança da
criptografia. Pois, fatorar este resultado, para adquirir os números primos utilizados
na multiplicação e quebrar a criptografia, leva muito tempo, até mesmo anos.
Portanto, é possível quebrar a criptografia do RSA, mas, isto levará muitos
anos ou até mesmo décadas, dependendo dos números primos utilizados, o que
torna esta tarefa ineficiente e até mesmo inviável deser praticada. Este é o segredo
por trás da criptografia e da segurança do RSA.
12
4.2.2 ElGamal
Criado pelo grupo egípcio Taher Elgamal em 1984, sua segurança é baseada
no problema do logaritmo discreto. Obtendo sua segurança, na grande dificuldade
de calcular logaritmos discretos de tamanho finito. Sendo muito parecido com o
problema de fatoração utilizado pelo RSA.
4.2.3 Diffie-Hellman
Foi um dos pioneiros na utilização de chave assimétrica, antecedendo o
algoritmo RSA. Desenvolvido por Whitfield Diffie e Martin Hellman, no ano de 1976,
o Diffie-Hellman é específico para troca de chaves.
Tendo sua fundamentação na troca de chaves de cifragem de forma
altamente segura, impedindo que indivíduos não autorizados consigam deduzi-la.
Baseando-se na exponenciação discreta, sendo a função oposta, para quebrar a
chave, os logaritmos discretos, que é altamente complexo de se calcular.
Este método permite que mais de duas pessoas possam interagir e trocar
mensagens de forma segura. Cada membro do grupo tem sua própria chave secreta
e realizam a troca de informações, de onde é originada uma nova chave,
denominada chave de sessão, que será utilizada na troca de mensagens entre os
participantes.
4.3 Protocolos de segurança de redes Wi-Fi
A facilidade de conexão de uma rede sem fio é a sua principal vantagem, se
comparada as redes cabeadas. Sua vantagem também é um de seus pontos fracos,
por ser tão prática, ela acaba não garantindo a segurança que é necessária.
Para sanar este problema, foram criados protocolos de segurança, que
protegem os utilizadores da rede Wi-Fi e impedi o acesso de usuários não
autorizados.
4.3.1 Wired Equivalent Privacy (WEP)
No mundo, o algoritmo de segurança mais utilizado WEP, foi criado no ano de
13
1999 e é adaptável aproximadamente a todos os dispositivos Wi-Fi acessível no
mercado. WEP é um modelo padrão de encriptação de dados para redes wireless,
que nos oferece um nível de segurança compatível à das redes cabeadas. Na
prática existem muitos defeitos no WEP e é relativamente fácil de quebrar, mas sem
deixar de ser uma camada de proteção básica que os usuários sempre devem
manter ativa.
Função do WEP: Tem como responsabilidade de encriptar os dados
recebidos através da rede. O WEP possui dois padrões: Um de 64 e outro de 128
bits. O padrão de 64 bits sustenta qualquer ponto de acesso que siga o padrão Wi-
Fi, o que inclui todos os produtos comercializados nos dias de hoje. Já o padrão de
128 bits não é suportado por todos os produtos porém, é bem menos inseguro. Sua
habilitação pode ser feita desde que todos os componentes utilizados na sua rede
suportem o padrão, caso ocorra o contrário os nós que sustentarem somente o
padrão de 64 bits ficarão ausentes da rede.
4.3.2 Wi-Fi Protected Access (WPA)
Com a saída de circulação do WEP, o WPA ocupou o seu lugar na indústria
como o protocolo-padrão. Formalmente aplicado em 2003.
Função do WPA: Uma segurança muito elevada para as redes e a
encriptação 256 bits. Além de muitas outras funções podemos contar com o sistema
de análise de pacotes – para verificar invasões e alterações – e algumas outras
ferramentas foram complementadas para melhorar a segurança, As novidades que o
WPA nos trouxe, foram estas citadas. Porém, o problema é que a arquitetura WPA
foi feita de forma que, os dispositivos WEP não se tornam obsoletos, e sim
atualizáveis. Por consequência, muitos elementos do protocolo antigo foi reutilizado
e, com ela, diversos dos defeitos do antecessor também acabaram presentes na
mais nova versão. Podemos encarar como uma ameaça a revelação de senhas por
meio de processamento, mas não acontece diretamente do mesmo jeito que no
antecessor. Ao invés de usar algum tipo de força bruta para encontrar senhas, os
delinquentes podem atingir diretamente sistemas suplementares, vindos do
protocolo WEP, que servem para agilizar a configuração e conexão entre
equipamentos modernos e antigos.
14
4.3.3 Wi-Fi Protected Acces II (WPA2)
O sistema-padrão na atualidade e também o mais seguro de todos, elaborado
pela Wi-Fi Alliance no ano de 2006. A maneira como o sistema lida com senhas e
algoritmos é a diferença em que temos aqui, retirando completamente qualquer
possibilidade de ataques de força bruta. Concluímos que na atualidade, esse é o tipo
mais seguro. Segundo especialistas, a ameaça de invasões em usuários domésticos
com WPA2 é praticamente igual a zero. Isso se deve a influência de duas outras
siglas. O AES (Advanced Encryption Standard), essa sigla cabe a um novo padrão
de segurança das informações, e o CCMP (Counter Cipher Mode), é um mecanismo
de encriptação que mantém seguro os dados que fluem pela rede. O WPA2 é tão
complexo que vários dispositivos, mesmo sendo recentes, não são compatíveis com
o mesmo. Poucas das vulnerabilidades conhecidas acertam diretamente os usuários
corporativos e requer que o atacante tenha acesso normal à rede sem fio. Uma vez
que estiver conectado, o hacker poderia controlar outros dispositivos ligados à rede,
inclusive os dados contidos neles ou transferidos a partir dos equipamentos. Por sua
vez, essa vulnerabilidade vem de alguns programas que permitem a ligação entre
roteadores modernos e antigos.
4.4 Assinatura digital
É um modo de analisar se o emissor de um serviço ou documento é
realmente quem ele diz ser. Com isso, pode ser feito pelo usuário a navegação pela
internet e acessar sites que usam os seus dados pessoais sem a preocupação de
ser roubado ou enganado. A assinatura digital é um recurso eletrônico que faz uso
de uma criptografia, mais especificamente, de chaves criptográficas.
4.5 Certificado digital
A certificação digital é um modelo de tecnologia de identificação que nos
permite fazer transações eletrônicas dos mais diversos tipos, considerando sua
integridade a todo instante, sua confidencialidade e sua autenticidade, de modo que
possa evitar que adulterações sejam feitas, que ocorram captura de dados privados
ou qualquer outro tipo de ação indevida.
15
4.6 Função Hashing
Para que a assinatura digital seja empregada da melhor maneira possível,
além da criptografia assimétrica, é necessário um outro mecanismo fundamental,
este mecanismo é a função hashing.
É necessário a utilização desta função nas assinaturas digitais, pois os
algoritmos assimétricos são lentos, quando comparados aos simétricos vemos a
superioridade do último neste quesito: os simétricos são 1.000 vezes mais rápidos
do que os assimétricos.
Desta forma, é impraticável a utilização somente de algoritmos de chave
pública, ficando mais evidente quando é necessário cifrar mensagens grandes, o
que pode levar vários minutos ou mesmo horas. Para sanar este problema, é
utilizada uma função hashing, que gera valor fixo e pequeno a partir da mensagem
que se pretende assinar.
Este valor garante que o conteúdo da mensagem, de onde foi gerado, não
tenha sofrido alteração. Qualquer modificação no conteúdo, por menor que seja,
será revelada. Assim que for realizado um novo cálculo para descobrir o valor hash
do conteúdo alterado, terá como resultado um novo valor hash, totalmente diferente
do original, e portanto, indicará alteração no conteúdo da mensagem.
4.6.1 MD5 (Message Digest 5)
Para uma mensagem de qualquer tamanho, este algoritmo devolve um valor
hash de 128bits. Inventado por Ron Rivest, do MIT, ele foi desenvolvido com foco em
rapidez, simplicidade e segurança. Mesmo tendo sido descoberta uma falha em
parte do MD5, até o momento, não afetou a sua segurança. O seu principal ponto
fraco é produzir um valor hash pequeno.
4.6.2 SHA-1 (Secure Hash Algorithm)
Esta função foi desenvolvida pelaNSA, e para qualquer mensagem, de
qualquer tamanho, ela resulta em um valor hash de 160bits. Até o momento, não foi
descoberto nenhum tipo de ataque que funcione contra o SHA-1. Devido ao seu
tamanho, 160bits, até mesmo o método da força bruta torna-se impraticável.
16
5 CIFRA DE VIGENÈRE
5.1 Estruturação, conceitos e fundamentação
A cifra de Vigenère utiliza chaves, podendo ser tanto palavras quanto frases,
para realizar as substituições dos caracteres da mensagem clara. Neste método é
utilizado diversos alfabetos cifrantes(polialfabética), no entanto, apenas é aplicado
um deles a cada caractere que se deseja substituir(monogrâmica). Sendo, então,
uma cifra de substituição polialfabética monogrâmica.
O funcionamento deste método é muito simples, embora trabalhoso de se
fazer manualmente. Primeiramente é criada uma tabela com o alfabeto cifrante. A
primeira linha será utilizada para o cabeçalho, e conterá o alfabeto na ordem original,
sem alterações. Em seguida é feita uma coluna lateral na margem esquerda, sendo
utilizada para definir o deslocamento dos alfabetos das linhas abaixo do cabeçalho.
Esta coluna será preenchida com números que vão de 0 até o total de letras do
alfabeto menos 1. Se o alfabeto tiver 26 letras, então os valores serão de 0 até 25.
O próximo passo é preencher as linhas depois do cabeçalho, para isto, é
criado um alfabeto onde as letras serão deslocadas de acordo com a coluna da
esquerda. Por exemplo, na linha 0, o alfabeto não sofrerá alterações, e começará
com a letra A. Na linha 1, as letras do alfabeto serão deslocadas em 1 posição,
portanto, será iniciado na letra B. Já o alfabeto da linha 2, será iniciado na letra C. E
assim suscetivamente, até a tabela está totalmente preenchida.
O processo de substituição das letras do texto original, é muito simples. Por
exemplo, se a primeira letra do texto for M e a primeira letra da chave for D, então,
deve-se procurar a letra do texto no cabeçalho da tabela e na segunda coluna da
esquerda a letra da chave. Após este processo, procura-se a letra que se encontra
na intersecção da coluna(da letra do texto claro) e da linha(da letra da chave). Neste
exemplo, a letra M deve ser substituída pela letra encontrada na tabela, que neste
caso é a letra P(Figura 1).
Este processo deve ser feito para todas as letras do texto que se deseja cifrar.
Justamente por isto, quando feito manualmente pode acarretar erros, por causa de
alguma leitura incorreta do cifrante, principalmente depois de muito tempo realizando
este processo. Mesmo utilizando uma régua para ajudar nesta tarefa, isto se torna
cansativo. Para sanar este problema, os criptólogos após o ano de 1880,
17
começaram a utilizar uma ferramenta que tornar mais simples este processo de
leitura do alfabeto cifrante, a Régua de Saint-Cyr.
Figura 1 – Alfabeto cifrante
 
Fonte: Elaborada pelos autores
Vamos então, cifra um texto simples: Curso de Ciência da Computação.
Utilizaremos a palavra “UNIP” como a chave da cifragem:
Texto claro: CURSODECIENCIADACOMPUTACAO
Chave: UNIPUNIPUNIPUNIPUNIPUNIPUN
Cifrado: WHZHIQMRCAKXUQIRIZXJNNW
18
5.2 Benefícios em relação às técnicas anteriores
A técnica criptográfica mais conhecida é a cifra de César, justamente por isto,
será realizada uma comparação entre ela e a cifra de Vigenère. Em termos de
complexidade o método de Vigenère leva vantagem, trazendo melhores benefícios
para a mensagem cifrada. A de César, embora mais simples, para a sua época foi
extremamente útil.
A cifra de César é monoalfabética, pois apenas um alfabeto é utilizado no
ciframento da mensagem. Vigenère, inspirado pela criptografia de César, inventou
uma criptografia polialfabética, que utiliza mais de um alfabeto.
Substituição monoalfabética: também conhecida como substituição
simples, utiliza apenas uma tabela de substituição, que contém os caracteres que
serão utilizados na substituição e os caracteres que serão substituídos. Esta tabela
também é chamada de cifrante ou alfabeto cifrante. 
Substituições polialfabéticas: utiliza-se mais de um alfabeto para a cifragem
da mensagem. Como no caso da cifra de Vigenère, onde as letras são deslocadas
por quantidades diferentes, utilizando uma palavra ou frase como a chave de
criptografia.
Comparando a criptografia de Vigenère com a de César, nota-se que a
primeira é muito mais segura, isto se deve a utilização de mais de um alfabeto e ao
uso de uma chave de codificação. Para a época, a segurança da cifra de Vigenère
era alta, sendo preciso mais 300 anos para que, separadamente, Charles Babbage,
na Inglaterra, e Kasiski, na Alemanha, conseguissem quebrá-la.
5.3 Onde foi ou ainda é utilizada esta técnica
A cifra de Vigenere foi utilizada durante a guerra civil americana (1861-1865),
no sul, com o uso de discos de bronze (agora em exposição no Museu da NSA em
Fort Meade) para implementar a cifra. 
O exército confederado dos Estados Confederados da América fazia uso de
chaves como: IN GOD WE TRUST, MANCHESTER BLUFF e COME
RETRIBUTION.
Em normatização do FCC, a cifra de Vigenere ainda é utilizada na telefonia
móvel nos EUA e era utilizada em aplicativos como o Microsoft Office Excel e o
19
Microsoft Office Word, nas versões 2000 e anteriores.
5.4 Comparação entre esta técnica e outras conhecidas
Notam-se algumas semelhanças quando comparamos a cifra de Vigenère
com outras, levando-se em conta a maneira como são usadas, aplicadas e
decifradas:
A Tabula Recta de Trithemius era usada da seguinte forma: ele utilizava a
primeira linha para cifrar a primeira letra da mensagem clara, a segunda linha com a
segunda letra, a décima quinta linha com a décima quinta letra e assim
gradativamente. Quando alcançava o limite da tabela, reiniciava com a primeira
linha.
O cilindro de Jefferson, na sua forma natural, é constituído por 26 discos de
madeira que rodavam voluntariamente ao redor de um eixo central feito de metal.
Aleatoriamente as vinte e seis letras do alfabeto são inscritas no plano mais externo
de cada disco de maneira em que cada um deles possua um seguimento diferente
de letras. Para obter as mensagens, devem-se girar os discos.
Em substituições polialfabéticas, temos a Cifra Playfair que utiliza um bloco
bigrâmico (ou digrâmico). Nesta troca, as letras são ocupadas duas a duas (bloco
bigrâmico), de acordo com as regras aplicadas a uma tabela de cinco por cinco que
contém o alfabeto cifrante.
Na cifra de Políbio, São colocadas as letras em um tabuleiro de 5x5. De modo
que o alfabeto grego possui 24 letras, Políbio sugeriu que a 25ª, posição do tabuleiro
tivesse de ser utilizada como indicação de sincronização – início e fim da
transmissão. A representação de cada letra é feita pela combinação dos dois
números que represente à posição ocupada pela letra. Deste modo, pode-se
substituir A por 11, B por 12, L por 32, e assim por diante, e a mensagem clara é
alterada numa continuidade de números que variam de 11 a 15, 21 a 25, 31 a 35, 41
a 45 e 51 a 55.
Todas os métodos criptográficos antigos descritos, utilizavam uma tabela para
representar as letras pelas quais as letras da mensagem clara seriam trocadas. O
mesmo se aplica a cifra de Vigenère. Sendo esta considerada, para a sua época,
uma das mais seguradas, quando comparada as opções que haviam disponíveis.
20
5.5 Vulnerabilidades e falhas
Para a criptografia, a cifra de VIGENERE utiliza apenas uma chave. Por este
motivo, caso um usuário tenho acesso à mesma, se torna fácil quebrar a cifra.
Na sua época, era considerada muita alta a sua segurança – hoje já é
considerada baixa pelo avanço das demais. A primeira vez que foi exposto como
quebrar a cifra foi em 1863 pelo criptólogo alemão Kasiski. No entanto, a cifra já
haviasido quebrada em 1854, pelo matemático inglês Charles Babbage, este fato
ficou desconhecido durante muito tempo, pois o matemático não publicou sua
descoberta.
Depois de descobrir como quebrar a criptografia, o soldado alemão Friedrich
Wilhelm Kasiski (1805-1881) introduziu um método para determinar o comprimento
das palavras-chave – o chamado “Kasiski-Test”. Abaixo um exemplo simples deste
método:
Normal: theappleisinthecornerandthepearistheretoo
Chave: catcatcatcatcatcatcatcatcatcatcatcatcatca
Mensagem cifrada: vhxcpinebuigvhxeokpekcnwvhxrettilvhxtemqo
Para quebrá-la tem de se procurar repetições de combinações de letras
contidas na mensagem cifrada (neste caso, “VHX”). Ele então conta as distâncias
entre essas combinações de letras (ou seja, 12, 9, 21, 33). Essas distâncias são
múltiplos do comprimento da palavra-chave. Portanto, a seu maior divisor comum é
o comprimento desejado da palavra-chave (isto é, 3). Assumindo que o comprimento
de palavra-chave é 3, a análise de frequência é aplicada aos 3 grupos de palavras.
As letras cifradas em mesmos grupos decorrem de letras simples que foram
deslocados pelo mesmo número de posições. Assim, as letras cifradas mais
frequentes em cada grupo é muito provavelmente o ponto para se adquirir a chave.
Consequentemente, a cifra de Vigenère é quebrada.
Um dos principais problemas com cifras de substituição simples é que elas
são muito vulneráveis a análise de frequência. Dado um texto cifrado
suficientemente grande, ele pode ser facilmente quebrado por mapear a frequência
das suas palavras repetidas. Portanto, para tornar as cifras mais seguras,
criptógrafos têm desenvolvido técnicas de encriptação que são imunes a análise de
frequência. Uma das abordagens mais comuns é a de suprimir os dados de
frequência normal, usando mais de um alfabeto para criptografar a mensagem. A
21
cifra de substituição polialfabética envolve a utilização de dois ou mais alfabetos
cifrados. Em vez de haver uma relação um-para-um entre cada letra e seu
substituto, faz-se então um-para-muitos com a utilização polialfabética.
5.6 Melhorias propostas e implementadas
A principal melhoria da cifra de Vigenère foi desenvolvida por Gilbert Sandford
Vernam. Ele inventou uma máquina de cifragem que se utiliza da substituição
polialfabética, e sua grande vantagem está no uso de chaves totalmente aleatórias e
que nunca se repetem.
Uma nova versão aperfeiçoada desta cifra foi criada, sendo chamada de One-
Time-Pad. Na One-Time-Pad, a chave é randômica, tendo o mesmo comprimento
que a mensagem a ser cifrada, e é utilizada uma única vez, o que a torna uma cifra
inquebrável! Sendo muitas vezes utilizada em assuntos militares e diplomáticos.
22
6 CONTRIBUIÇÃO DO TRABALHO NA NOSSA FORMAÇÃO
Este trabalho permitiu colocar em prática o conteúdo aprendido durante o
curso de Ciência da Computação. Desde a fase ainda teórica, onde são buscados os
requisitos do programa, o que ele deve ou não deve fazer, os erros que devem ser
tratados e qual será a lógica utilizada no programa; até a parte prática, na
codificação e resolução dos problemas encontrados durante esta etapa.
6.1 Interdisciplinaridade envolvida
Este trabalho, embora com um grau de complexidade baixa, envolveu
diversas disciplinas, desde aquelas estudadas no semestre anterior, até as que
estudamos durante este semestre. Aplicamos na prática os conceitos estudados em
sala de aula, e entendemos o porquê de termos estas disciplinas na grade curricular.
Ciências Sociais, embora não tenha tido uma partição direta, ainda assim,
estava presente, principalmente durante a fase primária do trabalho, nas pesquisas
sobre os conceitos e a história criptografia, e consequentemente, a sua aplicação e
importância dentro das diversas sociedades, que foi evoluindo conforme o passar
das décadas e séculos.
A disciplina de Comunicação e Expressão foi a mais utilizada. Os conceitos e
técnicas estudados em sala de aula, principalmente sobre textos argumentativos, a
intertextualidade e a resenha, foram de grande importância para conseguirmos
dissertar neste trabalho de forma clara e objetiva, além de permitir uma melhor
elaboração dos textos que foram utilizados no programa.
Lógica Matemática, estava presente na construção do algoritmo.
Praticamente todos os conceitos estudados nesta matéria foram aplicados na
construção do programa. Um exemplo que ilustra bem isto, é quando utilizamos
laços de repetição e estruturas de decisão, onde são aplicados os conceitos da
tabela verdade.
A matéria de Paradigma de Linguagens de Programação, teve grande papel
no desenvolvimento deste trabalho. Conceitos como o Paradigma de Linguagem
Estruturada, foram utilizados na prática, desde a criação de variáveis e a definição
de seus tipos, até os comandos de decisão e laços de repetição.
Lógica de Programação e Algorítimos é uma matéria bastante teórica, como a
23
anterior, e justamente por isto, teve grande importância neste trabalho. Foi colocado
em prática os principais conceitos com relação ao processo de codificação. A lógica
de programação, tanto estuda e desenvolvida durantes as aulas, foi essencial para o
desenvolvimento do programa de criptografia.
Por último, mas não menos importante, está a matéria de Linguagens de
Programação Estruturada. Sendo a mais utilizada na elaboração do código do
programa. Todos os conhecimentos e técnicas estudados no laboratório, foram
aplicados, desde os conceitos e comandos, até a lógica da linguagem C.
24
7 PROJETO DO PROGRAMA
Antes de iniciar o processo de desenvolvimento do programa, foi feito o
levantamento para identificar quais tarefas o programa pode ou não pode realizar.
Sem definir os objetivos claramente, o tempo que se leva para terminar o
desenvolvimento aumenta drasticamente, além, de ao término poder ficar faltando
alguma funcionalidade que deveria ter sido implementada.
O programa final deverá cifrar uma mensagem utilizando a cifra de Vigenère.
A chave para a criptografia, seja ela uma única palavra ou uma frase, deverá ser
digitada pelo usuário. Outra funcionalidade do programa será a possibilidade de
descriptografar algum texto, que junto com sua respectiva chave, deverão ser
fornecidos também pelo usuário.
Existem algumas restrições quanto ao seu uso. A primeira é que o tamanho
máximo tanto do texto quando da cifra é de 128 caracteres. Qualquer caractere a
mais será automaticamente retirado. O programa, pelo fato da cifra de Vigenère
permitir somente o uso de letras, apagará qualquer caractere digitado pelo usuário
que não esteja contido no alfabeto.
Outra restrição, é quanto aos acentos e a letra '‘ç’'. Como a alfabeto cifrante
de Vigenère utiliza apenas letras não acentuadas e não existindo nele, também, a
letra '‘ç’', o programa deverá seguir este padrão, e não aceitará estes tipos de
caracteres.
Logo no início do programa, as primeiras informações apresentadas ao
usuário deverão ser as observações referentes as restrições descritas nos
parágrafos anteriores. De forma clara e direta, para que ele não digite informações
que depois não serão criptografadas ou descriptografadas, e pense, portanto, que o
programa está com erros.
Em seguida, será mostrado um menu com as opções de tarefas que o
executável poderá realizar: 1 – Criptografar; 2 – Descriptografar; 3 – Sair do
programa. São tarefas simples, mas que são os objetivos principais do programa.
Além disto, um programa pequeno e com menos opções, é mais intuitivo para
usuários inexperientes.
Será pedido, então, para que seja digitado o número correspondente a opção
escolhida. Assimque o número é lido, o programa verifica se foi digitado um número
e se é igual à alguma das opções. Caso negativo, é mostrando na tela uma
25
mensagem de erro, e pede-se para que o usuário digite novamente a opção que
deseja. Estas ações serão repetidas até que um número válido seja informado.
Em seguida é realizada uma verificação para descobrir qual opção foi
escolhida. Se foi a opção para sair do programa, ele é simplesmente encerrado, sem
exibir nenhuma mensagem antes disto. Caso tenha sido qualquer uma das outras
duas, é mostrada na tela uma mensagem informando a opção escolhida.
Definido se o programa vai criptografar ou descriptografar, é pedido para o
usuário digitar o texto. Ele será lido pegando automaticamente os primeiros 128
caracteres, deixando de lado qualquer letra excedente. Verifica-se, logo em seguida,
se foi digitado um texto com mais de 3 caracteres. Que deve ser o mínimo para se
criptografar. Textos menores, compromete a segurança da criptografia.
Caso tenha sido digitado uma mensagem com tamanho menor ou igual a 3, é
informado o erro e pede-se para que o usuário digite outro texto. Sendo repetido
este processo até um texto que se encaixe na regra de tamanho tenha sido
informado.
Em seguida, a chave para a criptografia ou descriptografia é pedida. Ela deve
ter mais do que 3 caracteres, e se não tiver, o programa entra em um laço de
repetição, pedindo uma nova chave e verificando se ela tem pelo menos, 4 letras.
Somente saindo do laço, quando a condição for atendida.
Tendo recebido os dados necessários, o programa entra na fase de
ciframento ou deciframento. A primeira etapa é passar todas as letras minúsculas,
tanto da chave quanto do texto, para maiúsculas. Pois, na cifra de Vigenère, todas
as letras têm tamanhos uniformes e o texto resultante do processo de ciframento
contém somente letras maiúsculas.
A próxima etapa é retirar qualquer caractere da chave e do texto que não
esteja contido no alfabeto. Enquanto que na etapa anterior não teve nada de
extraordinário, bastando apenas pegar todas as letras através de um laço de
repetição e utilizar a função toupper, nesta etapa é preciso utilizar uma verificação
simples mas bastante interessante.
Primeiramente, e assim como na primeira fase, é criado um laço de repetição
para pegar todas as letras, logo em seguida é verificado se a letra está contida no
alfabeto, através de uma condição simples: letra>='A' e letra<='Z'. A linguagem C
trata as letras, neste tipo de verificação, utilizando seu valor decimal da tabela ASCII.
Ou seja, a verificação na realidade, está sendo esta: letra>=65 e letra<=90. Se a
26
letra estiver nesta faixa, e portando, está no alfabeto, ela é salva em um novo vetor.
Assim que for verificada todas as letras, da chave, por exemplo, é substituído o
conteúdo do vetor da chave pelo conteúdo do vetor novo(que contém somente letras
alfabéticas). 
Concluída esta etapa passamos para a última fase do ciframento ou
deciframento. É pega todas as letras do texto, através de um laço de repetição, e
para cada caractere é verificado se a opção escolhida é a criptografia ou
descriptografia. Dependendo da escolha, a letra é cifrada ou decifrada.
Para o ciframento é utilizada uma fórmula simples: ((texto[i] - 'A') + (chave[i
% strlen(chave)] - 'A')) % 26 + 'A'. A letra da chave utilizada na fórmula precisa de
um tratamento especial. Supondo que foi digitada uma chave de 4 letras, “UNIP”, por
exemplo, quando for cifrar a 5º letra do texto, a letra da chave tem que voltar para
primeira posição, ou seja, tem que ser utilizada a letra “U” no ciframento. Para que
isto ocorra é utilizada a função mod. Utilizando o exemplo da chave “UNIP”, se
estiver no ciframento da 5º(i) letra do texto(texto[i] == Y ) e o total das letras da
chave é 4, então a fórmula pode ser alterada para: (('Y' - 'A') + (chave[5 % 4] - 'A'))
% 26 + 'A'. Calculando a conta, 5 mod 4, o resultado será 1. A letra da chave na
posição 1 é “U”. Alterando a fórmula novamente: (('Y' - 'A') + ('U' - 'A')) % 26 + 'A'. 
A linguagem C trabalha utilizando o valor decimal de cada letra, e para
explicar o funcionamento da fórmula de ciframento, trocamos então as letras pelos
seus respectivos valores decimais: ((89 - 65) + (85 - 65)) % 26 + 65. Realizamos as
somas e subtrações dentro dos parênteses: 44 % 26 + 65. Como o alfabeto tem 26
letras, utilizaremos o resultado da função mod para o valor decimal da letra cifrada:
18 + 65. A tabela ASCII tem vários valores para diferentes caracteres, sendo que o
alfabeto em letras maiúsculas começa no 65 e vai até 90. O valor 18, então, não
corresponde a uma letra do alfabeto. Para conseguir o resultado desejado,
deslocamos este valor(18) de tal forma que ele se encaixe na faixa de 65 à 90. Isto é
feito somando o número 18 com o valor decimal da primeira letra do alfabeto(“A”),
que no caso corresponde a 65: 18 + 65 = 83. A letra que é representada pelo valor
decimal 83 é a letra “S”. Portanto, o resultado do ciframento da letra “Y” é “S”.
Caso a escolha do usuário tenha sido a descriptografia, o programa utiliza a
seguinte fórmula para decifrar o texto: (texto[i] - chave[i % strlen(chave)] + 26) %
26 + 'A'. Pegando o exemplo passado, e sabendo que letra “S” está cifrada,
substituímos as variáveis na fórmula: ('S' – chave[5 % 4] + 26) % 26 + 'A'.
27
Calculando a conta, 5 mod 4, o resultado será 1. A letra da chave na posição 1 é “U”:
('S' – 'U' + 26) % 26 + 'A'. Trocamos as letras para seus respectivos valores
decimais: (83 – 85 + 26) % 26 + 65. Realizamos as somas e subtrações dentro dos
parênteses: 24 % 26 + 65. Calculando o mod e resolvendo a soma: 24 + 65 = 89. O
valor decimal 89 corresponde a letra “Y”, que era a letra original antes do
ciframento.
Todas as letras, cifradas ou decifradas, dependendo da escolha do usuário,
serão salvas em um novo vetor, que será responsável por guardar o texto completo
no final desta etapa.
Finalizada todas as etapas, é mostrado na tela: o texto original(dependendo
da escolha do usuário, estará criptografado ou não), a chave e o texto final(se foi
escolhida a opção de criptografia, será mostrado o texto criptografado, se foi
escolhida a opção de descriptografia será mostrado o texto descriptografado).
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <ctype.h>
4. #include <string.h>
5.  
6. char crip[128];
7.  
8. void maiusculas(char *texto){
9.     int i;
10.  
11.     for(i=0;i<strlen(texto);i++)
12.     {
13.         texto[i] = toupper(texto[i]);
14.     }
15. }
16.  
17. void somente_letras(char *texto){
18.     int i,j=0;
19.     char texto_novo[128];
20.  
21.     for(i=0;i<strlen(texto);i++){
22.         if(texto[i]>='A' && texto[i]<='Z'){
23.             texto_novo[j] = texto[i];
24.             j++;
25.         }
26.     }
27.  
28.     for(i=0;i<j;i++){
29.         texto[i] = texto_novo[i];
30.     }
31.  
32.     texto[i] = '\0';
33. }
34.  
35. void cifrar(char *texto, char *chave, int op_cifra){
36.     int i;
37.  
38.     maiusculas(texto);
39.     maiusculas(chave);
40.     somente_letras(texto);
41.     somente_letras(chave);
42.  
43.     for(i=0;i<strlen(texto);i++){
44.         if(op_cifra == 1){
45.             crip[i] = ((texto[i] - 'A') + (chave[i % strlen(chave)] -
'A')) % 26 + 'A';
46.         }
47.         else{
48.             crip[i] = (texto[i] - chave[i % strlen(chave)] + 26) % 26
+ 'A';
49.         }
50.     }
51. }
52.  
53. int main(int argc, char *argv[])
54. {
55.     char texto[128],chave[128],m1[128],m2[128];
56.     int op,e,op_cifra;
28
8 RELATÓRIO COM AS LINHAS DE CÓDIGO DO PROGRAMA
57.  
58.     printf("PROGRAMA DE CRIPTOGRAFIA QUE UTILIZAA CIFRA DE VIGENERE
\n");
59.  
60.     printf("\n\nObservacoes, tanto para o texto quanto para a
cifra:");
61.     printf("\n1 - no máximo 128 caracteres;");
62.     printf("\n2 - somente e permitida a utilizacao de letras;");
63.     printf("\n3 - os acentos e a letra 'Ç' nao sao aceitos;");
64.  
65.     printf("\n\n\nOpcoes: ");
66.     printf("\n1 - Criptografar");
67.     printf("\n2 - Descriptografar");
68.     printf("\n0 - Sair do programa");
69.  
70.     do{
71.         printf("\n\nDigite o numero da opcao escolhida: ");
72.         scanf("%d",&op);
73.  
74.         fflush(stdin);
75.         __fpurge(stdin);
76.  
77.         e = 1;
78.  
79.         if(op!=1 && op!=2 && op!=0){
80.             printf("\nOpcao invalida!\n");
81.             e = 0;
82.         }
83.     }
84.     while(e == 0);
85.  
86.     switch(op){
87.         case 0:
88.             return 0;
89.         case 1:
90.             printf("\n\nOPCAO ESCOLHIDA: CRIPTOGRAFAR\n\n");
91.  
92.             op_cifra = 1;
93.  
94.             strcpy(m1, "Texto original");
95.             strcpy(m2, "Texto criptografado");
96.  
97.             break;
98.  
99.         case 2:
100.             printf("\n\nOPCAO ESCOLHIDA: DESCRIPTOGRAFAR\n\n");
101.  
102.             op_cifra = 2;
103.  
104.             strcpy(m1, "Texto criptografado");
105.             strcpy(m2, "Texto original");
106.  
107.             break;
108.     }
109.  
110.     do{
111.         printf("\nDigite o texto: ");
112.         fgets(texto,128,stdin);
113.  
114.         fflush(stdin);
115.         __fpurge(stdin);
116.  
29
117.         if(texto[strlen(texto)-1]=='\n'){
118.             texto[strlen(texto)-1]='\0';
119.         }
120.  
121.         e = 1;
122.  
123.         if(!strlen(texto)){
124.             printf("\nNao foi digitado nenhum texto!\n");
125.             e = 0;
126.         }
127.         else if(strlen(texto) < 4){
128.             printf("\nO texto deve ter no minimo 4 caracteres!\n");
129.             e = 0;
130.         }
131.     }
132.     while(e == 0);
133.  
134.     do{
135.         printf("\nDigite a chave: ");
136.         fgets(chave,128,stdin);
137.  
138.         fflush(stdin);
139.         __fpurge(stdin);
140.  
141.         if(chave[strlen(chave)-1]=='\n'){
142.             chave[strlen(chave)-1]='\0';
143.         }
144.  
145.         e = 1;
146.  
147.         if(!strlen(chave)){
148.             printf("\nNao foi digitada nenhuma chave!\n");
149.             e = 0;
150.         }
151.         else if(strlen(chave) < 4){
152.             printf("\nA chave deve ter no minimo 4 caracteres!\n");
153.             e = 0;
154.         }
155.     }
156.     while(e == 0);
157.  
158.     cifrar(texto,chave,op_cifra);
159.  
160.     printf("\n\n\n%s: \t%s \n",m1,texto);
161.     printf("\nChave: \t\t\t%s \n",chave);
162.     printf("\n%s: \t%s \n",m2,crip);
163.  
164.     printf("\n\n\n");
165.  
166.     getchar();
167.     getchar();
168.     return 0;
169. }
30
31
9 APRESENTAÇÃO DO PROGRAMA EM FUNCIONAMENTO EM UM 
 COMPUTADOR
32
33
34
35
REFERÊNCIAS
ALDEIA NUMABOA. Cifras de Substituição Monoalfabética. Disponível em: 
<http://www.numaboa.com.br/criptografia/cifras/substituicoes/monoalfabeticas>. 
Acesso em: 25 de novembro de 2014.
ALDEIA NUMABOA. Introdução à Criptografia NumaBoa. Disponível em: 
<http://www.numaboa.com.br/criptografia/gerais/153-introducao>. Acesso em: 25 de 
novembro de 2014.
ALDEIA NUMABOA. Algoritmos básicos da criptografia atual . Disponível em: 
<http://www.numaboa.com.br/criptografia/gerais/311-atual>. Acesso em: 25 de 
novembro de 2014.
ALDEIA NUMABOA. Você e a Criptografia. Disponível em: 
<http://www.numaboa.com.br/criptografia/gerais/687-voce>. Acesso em: 25 de 
novembro de 2014.
ALDEIA NUMABOA. Criptografia. Disponível em: 
<http://www.numaboa.com.br/criptografia>. Acesso em: 25 de novembro de 2014.
ALDEIA NUMABOA. Classificação das cifras. Disponível em: 
<http://www.numaboa.com.br/criptografia/gerais/314-classificacao>. Acesso em: 25 
de novembro de 2014.
ALDEIA NUMABOA. A cifra de Vigenère. Disponível em: 
<http://www.numaboa.com.br/criptografia/substituicoes/polialfabeticas/506-
vigenere>. Acesso em: 25 de novembro de 2014.
ALDEIA NUMABOA. Blaise de Vigenère. Disponível em: 
<http://www.numaboa.com.br/criptografia/historia/348-vigenere>. Acesso em: 25 de 
novembro de 2014.
ALDEIA NUMABOA. Alguns exemplos de sistemas secretos. Disponível em: 
<http://www.numaboa.com.br/criptografia/cripto-papers/847-exemplos>. Acesso em: 
25 de novembro de 2014.
ALGORITMY.NET. Vigenère cipher. Disponível em: 
<http://en.algoritmy.net/article/45623/Vigenere-cipher>. Acesso em: 25 de novembro 
de 2014.
ASCII CODE. ASCII Code - The extended ASCII table. Disponível em: 
<http://www.ascii-code.com/>. Acesso em: 25 de novembro de 2014.
ATS, Gustavo. Entenda WEP e WPA, protocolos de segurança de rede Wi-Fi. 
Disponível em: <http://www.techtudo.com.br/artigos/noticia/2012/02/entenda-wep-e-
wpa-protocolos-de-seguranca-de-rede-wi-fi.html>. Acesso em: 25 de novembro de 
2014.
36
DEMARTINI, Felipe. WEP, WPA, WPA2: o que as siglas significam para o seu 
WiFi?. Disponível em: <http://www.tecmundo.com.br/wi-fi/42024-wep-wpa-wpa2-o-
que-as-siglas-significam-para-o-seu-wifi-.htm>. Acesso em: 25 de novembro de 
2014.
DEVMEDIA. Criptografia: Conceito e aplicações - Revista Easy Net Magazine 
27. Disponível em: <http://www.devmedia.com.br/criptografia-conceito-e-aplicacoes-
revista-easy-net-magazine-27/26761>. Acesso em: 25 de novembro de 2014.
DONDA, Daniel. A matemática da Cifra de Vigenère. Disponível em: 
<http://www.mcsesolution.com/Seguran%C3%A7a/a-matematica-da-cifra-de-
vigenere.html>. Acesso em: 25 de novembro de 2014.
FIARRESGA, Victor Manuel Calhabrês. Criptografia e Matemática. Disponível em: 
<http://repositorio.ul.pt/bitstream/10451/3647/1/ulfc055857_tm_Victor_Fiarresga.pdf>
. Acesso em: 25 de novembro de 2014.
MAIA, Luiz Paulo. Criptografia e Certificação Digital. Disponível em: 
<http://www.training.com.br/lpmaia/pub_seg_cripto.htm>. Acesso em: 25 de 
novembro de 2014.
OLIVEIRA, Fernando. Entendendo (de verdade) a criptografia RSA. Disponível 
em: <http://blog.lambda3.com.br/2012/12/entendendo-de-verdade-a-criptografia-
rsa/>. Acesso em: 25 de novembro de 2014.
PROGRAMI. C Program to Remove all Characters in a String Except Alphabet. 
Disponível em: <http://www.programiz.com/c-programming/examples/remove-
characters-string>. Acesso em: 25 de novembro de 2014.
ROSETTACODE. Vigenère cipher. Disponível em: 
<http://rosettacode.org/wiki/Vigen%C3%A8re_cipher#C>. Acesso em: 25 de 
novembro de 2014.
SEKNET. Criptografia. Disponível em: <http://www.seknet.com.br/criptografia.html>. 
Acesso em: 25 de novembro de 2014.
SOUZA, Ranieri Marinho. Conceito de Criptografia. Disponível em: 
<http://blog.segr.com.br/conceito-de-criptografia/>. Acesso em: 25 de novembro de 
2014.
TRINTA, Fernando Antonio Mota. Um Estudo sobre Criptografia e Assinatura 
Digital. Disponível em: <http://www.di.ufpe.br/~flash/ais98/cripto/criptografia.htm>. 
Acesso em: 25 de novembro de 2014.
UNIVERSIDADE DE LISBOA. Criptografia e Segurança das Comunicações: 
Cifras clássicas. Disponível em: <http://comp.ist.utl.pt/ec-csc/Acetatos/1-Cifra/12-
CifraClassica.pdf>. Acesso em: 25 de novembro de 2014.
Valdevino, André. Criptografia Caótica. Disponível em: 
<http://www.ucb.br/sites/100/103/TCC/22006/AndreValdevino.pdf>. Acesso em: 25 
37
de novembro de 2014.
	1 Introdução
	2 OBJETIVOS
	2.1 Geral
	2.2 Específicos
	3 Criptografia
	3.1 Definição
	3.1 Segurança da informação
	4 Técnicas criptográficas mais utilizadas e conhecidas
	4.1 Criptografia simétrica
	4.1.1 Data Encrypt Standard (DES)
	4.1.2 Triple-DataEncryption Standard (3DES)
	4.1.3 Advanced Encryption Standard (AES) e Rijndael
	4.1.4 Ron's Code ou Rivest Cipher (RC)
	4.1.5 Rivest Cipher 5 (RC5)
	4.1.6 Rivest Cipher 6 (RC6)
	4.1.7 International Data Encryption Algorithm (IDEA)
	4.1.8 Blowfish
	4.1.9 Twofish
	4.2 Criptografia assimétrica
	4.2.1 RSA
	4.2.2 ElGamal
	4.2.3 Diffie-Hellman
	4.3 Protocolos de segurança de redes Wi-Fi
	4.3.1 Wired Equivalent Privacy (WEP)
	4.3.2 Wi-Fi Protected Access (WPA)
	4.3.3 Wi-Fi Protected Acces II (WPA2)
	4.4 Assinatura digital
	4.5 Certificado digital
	4.6 Função Hashing
	4.6.1 MD5 (Message Digest 5)
	4.6.2 SHA-1 (Secure Hash Algorithm)
	5 cifra de Vigenère
	5.1 Estruturação, conceitos e fundamentação
	5.2 Benefícios em relação às técnicas anteriores
	5.3 Onde foi ou ainda é utilizada esta técnica
	5.4 Comparação entre esta técnica e outras conhecidas
	5.5 Vulnerabilidades e falhas
	5.6 Melhorias propostas e implementadas
	6 contribuição do trabalho na nossa formação
	6.1 Interdisciplinaridade envolvida
	7 Projeto do programa
	8 Relatório com as linhas de código do programa
	9 Apresentação do programa em funcionamento em um computador
	Referências

Outros materiais

Materiais relacionados

Perguntas relacionadas

Materiais recentes

Perguntas Recentes