Baixe o app para aproveitar ainda mais
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
Compartilhar