Buscar

As técnicas criptográficas%2C conceitos%2C usos e aplicações 28 11 2012 (1)

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

As técnicas criptográficas, conceitos, usos e aplicações
 de vinnybrapesus | trabalhosfeitos.com
 UNIVERSIDADE PAULISTA – UNIP
 INSTITUTO DE CIÊNCIAS E TECNOLOGIAS
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
ATIVIDADES PRÁTICAS SUPERVISIONADAS
“AS TÉCNICAS CRIPTOGRÁFICAS, CONCEITOS, USOS E APLICAÇÕES”
São Paulo
2010
UNIVERSIDADE PAULISTA – UNIP
 INSTITUTO DE CIÊNCIAS E TECNOLOGIAS
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
ATIVIDADES PRÁTICAS SUPERVISIONADAS
“AS TÉCNICAS CRIPTOGRÁFICAS, CONCEITOS, USOS E APLICAÇÕES”
 Atividades Práticas Supervisionadas – trabalho apresentado como exigência para a avaliação do segundo bimestre, em disciplinas do 2º semestre, do curso de Ciência da Computação da Universidade Paulista, sob orientação dos professores do semestre.
São Paulo
2010
Sumário
Objetivo	04
Introdução	05
Criptografia	06
 Chave Simétrica e Assimétrica	07
Técnicas criptográficas mais utilizadas	11
O Conceito e a Estruturação	15
Benefícios da Criptografia RSA	17
Sua funcionalidade no sistema	18
Aplicações do algoritmo RSA	19
Vulnerabilidade e Falhas	20
Melhorias propostas e/ou implementadas	23
Relatório do programa	24
Projeto (estrutura) do programa	28
Conclusão	39
Bibliografia	41
Objetivo
 O objetivo deste trabalho é aprimorar e expandir o conhecimento sobre o tema discutido de todos os envolvidos no grupo. Durante o desenvolvimento do mesmo, foram analisadas técnicas, usos e aplicações da criptografia. Este trabalho expandiu nossas ideias sobre o assunto em questão, podemos perceber a importância da criptografia, pois graças ao avanço da tecnologiada informação, a internet se fez um dos instrumentos de comunicação mais utilizados em nosso cotidiano, porém a questão da privacidade, e segurança na transmissão de dados se tornou um fator fundamental para a sua utilização. Podemos concluir que a criptografia é de suma importância para garantirmos a integridades das informações e a nossa segurança.
Introdução
 O trabalho foi realizado através de inúmeras pesquisas e leituras sobre o tema discutido, através do material pesquisado foi possível a elaboração de textos explicativos que compõe o trabalho.
 Dentre o conteúdo do trabalho veremos os conceitos de criptografia, a sua utilização, os métodos mais utilizados para se criptografar, a estrutura dos algoritmos simétricos e assimétricos, entre outros.
 O grupo optou pelo método de criptografia RSA, onde foi realizada uma pesquisa mais aprofundada sobre o assunto, o que nos possibilitou analisar seu funcionamento, seus benefícios, suas aplicações, além das suas falhas e vulnerabilidade. Elaboramos um programa capaz de criptografar e descriptografar mensagens, baseando-nos no sistema RSA.
 Estes e outros temas dentro da criptografia seguem no trabalho de uma forma bem clara e de fácil entendimento.
 CRIPTOGRAFIA
 Criptografia vem do Grego “kryptós” e “Graphein” que significa, “ Escrita oculta” ou “Escrita Secreta”. Trata-se de um conjunto de conceitos e técnicas que tem como objetivo codificar uma mensagem de forma que o acesso seja restrito apenas ao destinatário pretendido. Poucos se dão conta de que acriptografia faz parte da nossa vida, protegendo nossas informações e mantendo em segredo dados confidenciais.
 Os métodos criptográficos também garantem a origem e a autenticidade de documentos, principalmente de grande circulação. Os processos de codificação e decodificação são realizados via uso de algoritmos com funções matemáticas. Os primeiros métodos criptográficos existentes usavam apenas um algoritmo de codificação, assim bastava que o receptor da informação conhecesse esse algoritmo para poder extraí-lo. Os processos criptográficos sempre dependeram essencialmente da tecnologia disponível.
 As técnicas mais conhecidas na computação envolvem o conceitos de chaves que são um conjunto de bits, que se baseia em um determinado algoritmo capaz de codificar e de decodificar informações. As chaves de 64 bits e de 128 bits são bastante conhecidas, quanto mais bits forem utilizados, mais segura será a criptografia. Se usarmos 128 bits ou mais para chaves, teremos uma quantidade grande de combinações e assim deixando ainda mais segura as informações criptografadas. Criptografia só pode ser considerada como tal se quatro princípios básicos forem seguidos e oferecidos: Integridade, autenticidade, não repúdio e sigilo.
 Chave Simétrica e Chave Assimétrica
 Chave Simétrica
 É um tipo de chave mais simples, onde o emissor e o receptor fazem uso da mesma chave. Uma única chave é usada para codificar e decodificar a mensagem.
 O algoritmo de chave simétrica tem como característica a rapidez na execução, porém não permitem a assinatura e a certificação digital. Existem vários algoritmo os que usam as chaves simétricas,como o DES, o IDEA, e o RC.
 [pic]
 DES (Data Encryption Standard): Criada pela IBM em 1977, o DES usa chaves de 56 bits, permitindo até 72 quatrilhões de combinações. Apesar disso, foi “quebrado”, utilizando-se as chamadas técnicas de “força bruta” (tentativa e erro). Trata-se de um sistema de codificação simétrico por blocos de 64 bits. O algoritmo consiste em efetuar combinações, substituições e permutações entre o texto a codificar e a chave.
 IDEA (International Data Encryption Algorithm): O IDEA é um algoritmo simétrico que utiliza uma chave de 128 bits. Este algoritmo e usado tanto para a cifragem de uma mensagem quanto para a decifração e, como outras cifras de bloco, usa a confusão e a difusão para produzir o texto cifrado. Este algoritmo foi desenvolvido em 1990, na ETH Zurique – Suíça, por James L. Massey e Xueija Lai.
 RC (Ron’s Code ou Rivest cipher): Criado por Ron Rivest na empresa RSA Data Security, esse algoritmo é muito utilizado em e-mails e usa chaves
 de 8 a 1.024 bits. Há várias versões: RC2, RC4, RC5 e RC6. Cada uma delas difere da outra por trabalhar com chaves de maior complexidade.
 Existem ainda outros tipos de algoritmos, como o AES (Advanced Encryption Standard), que são baseados no DES ; 3DES; o Twofish; e sua variante, o Blowfish. Com o uso das chaves simétricas temos algumas desvantagens. No caso de informação muito valiosa seria necessário usar uma quantidade de chaves relativamente grande, sendo assim sua utilização não é adequada nessas situações.
 Chave Assimétrica
 Conhecida como “chave pública”, esse tipo de chave assimétrica trabalha com dois tipos de chave: Uma chamada chave pública eoutra denominada chave privada. Neste caso, um emissor deve criar uma chave de codificação e enviar para o receptor (chave pública), e uma chave privada para a decodificação. Vários algoritmos foram desenvolvidos baseando-se neles. Os mais conhecidos são:
 RSA (Rivest, Shamir e Adleman): É um doa algoritmos de chave assimétrica mais usados. Números primos são usados da seguinte forma: Dois números primos são multiplicados para se obter um terceiro valor. A chave privada são os números multiplicados e a chave pública é o valor obtido.
 ElGamal : Criado por Taher ElGamal, esse algoritmo usa um problema matemático conhecido por
“logaritmo discreto” para se tornar seguro é freqüente em assinaturas digitais.
 Diffie – Hellman : Desenvolvido por whitfield Diffie e Martin Hellman em 1976. Esse algoritmo permite a troca de chaves públicas entre duas ou mais partes, permitindo que as pessoas que recebam a chave pública usem a mesma para criptografar o conteúdo da mensagem para enviar a pessoa que forneceu a chave pública.
 Assinatura Digital
 É um mecanismo eletrônico que faz uso da criptografia, mais precisamente de chaves criptográficas. Para o funcionamento das assinaturas digitais é necessário que o emissor tenha um documento eletrônico e a chave pública do destinatário. O processo de assinatura digital de documentos eletrônicos usa um conceito conhecido como função hash. A função hash faz com que todo documento a ser assinado seja analisado e com base e, com base nisso, um valor de tamanho fixo é gerado. No entanto o emissor usa a chave pública do receptor para assinar digitalmente o documento.
 Criptografia hash : “Criptografia hashpermite que, através de uma string de qualquer tamanho, seja calculado um identificador digital de tamanho fixo, chamado de valor hash”. Como a sequência do hash é limitada, muitas vezes não passando de 512 bits, existem colisões (sequências iguais para dados diferentes). Quanto maior forem a dificuldade de se criar colisões intencionais, melhor é o algoritmo. Uma função de hash recebe um valor de um determinado tipo e retorna um código para ele.
 [pic]
 Certificado Digital
 A certificação digital é um tipo de tecnologia de identificação, ela permite que algumas transações eletrônicas sejam feitas considerando sua confidencialidade, de forma que evite adulterações ou fraude. Essa certificação funciona com base em um documento eletrônico que se chama certificado digital.
 Os certificados digitais são um dos elementos que tem como base a criptografia de chave pública. “Quando a criptografia de chave pública é utilizada, as chaves públicas de usuários ou sistemas podem estar assinadas digitalmente por uma autoridade certificadora (Certification Authority – CA)”.
Técnicas criptográficas mais utilizadas
Algoritmos Simétricos
DES
 O algoritmo DES (Data Encryption Standard) é um dos mais antigos e famosos, desenvolvido pela IMB na década de 70. Seu desenvolvimento foi baseado no algoritmo de Lucifer quer foi inventado por Horts Feistel.
 O DES utiliza apenas uma chave de 64 bits, ou seja, trabalha apenas com 64 bits de dados a cada vez, 56 são de dados e o restante de paridade, além dessa divisão a chave se divide em 16 sub chaves e separada em 48 bits,esse processo é demonstrado através de ciclos como nome de Ciclos de Fiestel. O esquema abaixo mostra como é feito a esquema do DES.
[pic]
 Estas rodas são feitas através de substituições, onde cada dado é substituído por chaves, acredita-se que as operações de substituição ocorrem dentro das caixas. A segurança desse algoritmo resulta em não demonstrar qualquer semelhança entre o texto cifrado e o texto original, assim que essa linguagem não revela absolutamente nada, e as operações acrescentam outra camada de segurança misturando a mensagem.
 Falhas surgiram com o DES por ter um tamanho de chave muito curto e não resistir às forças brutas, Whitfield Diffie e Martin Hellman, declararam em 1979 que o DES seria inútil e não passaria de 10 anos de utilidade, ambos estavam enganados, pois, o algoritmo só não resistiu ao ataque da força bruta em 1997.
 O primeiro ataque aconteceu em um período de quatro meses por uma rede de maquinas, em 1998, a Eletronic Frontier Foundation (EFF), quebrou o DES em menos de três dias com um computador apelidado de “Deep Crack”.
 Apesar desses 20 anos de existência a única forma de quebrar o DES foi pela força bruta, pois não existem relatos de outras quebras.
AES (Rijndael)
 Logo após a queda do DES, a NIST anunciou pesquisas para o novo sucessor do DES, o Advanced Encryption Standard (AES). Entre as características para os grandes candidatos do negocio de criptografia estavam:
 • AES seria um cifrador de blocos simétricos com chave pública e privada;
 • AES precisava ser mais forte e mais rápido do que o 3-DES;
 • AES exigia uma expectativa de vida de pelo menos 20 a 30 anos;• AES aceitaria tamanhos de chave de 128 bits, 192 bits e 256 bits;
 • AES estaria disponível a todos – sem royalties e sem patentes.
 Alguns meses depois havia 15 candidatos, mas quase que automaticamente 6 deles foram descartados pois não seguiam o parâmetro apresentado pela NIST. Por fim, em 1999 os finalistas foram escolhidos e entre eles estavam o grande vencedor, Rijndael, foi apresentado como o vencedor em 2000.
 O AES funciona da seguinte maneira, ao invés de usar ciclos como o DES em cada rodada, ele utiliza rodadas repetitivas como o IDEA. Eles são agrupados em quatro grupos com 128 bits, o número de rodada também depende do tamanho da chave, assim o modo de 128 bits possuem 9 rodadas, os de 192 bits possuem 11 rodadas e as chaves de 256 bits possuem 13 rodadas. Cada roda é substituída por uma caixa S por bit de dados, em seguida os bits são misturados entre os grupos, logo após, cada grupo é multiplicado em uma matriz padrão e os resultados são somados as sub chaves para essa rodada.
IDEA
 O IDEA é o sucessor do DES na Europa. Em principio o seu nome era Proposed Encryption Standard (PES), ele foi utilizado em 1991 pra aumentar a força contra os ataques criptoanálise diferencial, sendo renomeado em 1992 com o nome de International Data Encryption AlgorithmIDEA).
 Além de ser mais novo do que o DES é mais seguro e rápido, sua velocidade vem do modo de que cada rodada é muito mais simples do que passar pelos ciclos de Fiestel no DES.
 O IDESA trabalho com uma chave de 128 bits e blocos de 64 bits, seu processo de criptografia e descriptografia utiliza apenas 8 rodadas, com 6 sub chaves e 16 bits por rodada. Este algoritmo épatenteado nos EUA e Europa, mas seu uso não comercial gratuito é permitido.
Algoritmos Assimétricos
RSA
 O RSA é mais rápido do que o algoritmo de Diffie- Hellman, tendo como vista o campo de criptografia assimétrica. É baseado na multiplicação e fatoração de inteiros grandes.
 Este foi o algoritmo que escolhemos para nos aprofundar e ter um melhor entendimento. Ao desenvolver do trabalho citações e exemplos serão dadas sobre o algoritmo de RSA.
Diffie – Hellman
	 No ano de 1976 foi apresentado o algoritmo de Diffie – Hellman, ele foi o primeiro a ser apresentado como chave pública, talvez um dos maiores avanços da área de criptografia. Este algoritmo não deve ser utilizado para uma criptografia de uma mensagem completa, pois é de 10 a 1.000 vezes mais lento o que o DES, dependendo do modo de que for usado.
 O algoritmo de Diffie – Hellman funciona da seguinte maneira:
 * As duas partes combinam dois números, um deles é um número primo grande, e a outra é um inteiro menos que o primo. Elas podem fazer isso ás claro e não afetarão a segurança;
 * Cada uma das duas partes gera separadamente outro número, que elas mantêm em segredo. Esse número é equivalente a uma chave privada. Um cálculo é feito envolvendo a chave privada e os dois números públicos anteriores. O Resultado é enviado à outra parte. Esse resultado é efetivamente uma chave publica;
 * As duas partes trocam suas chaves publicas. Elas então realizam, de forma privada, um cálculo envolvendo sua própria chave e a chave pública da outra parte. O número resultante é a chave da sessão
 * A chave da sessão pode
ser usada como uma chave secreta pra outra cifra.Um dos pontos positivos da criptografia pelo algoritmo de Diffie-Hellman é que pode se conhecer as chaves públicas do emissor e do destinatário sem que a segurança da mensagem seja afetada. Este algoritmo tenha a função de “desvendar “ funções matemáticas complexas, que são fáceis de se realizar para frente , porém extremamente difíceis de descobrir na direção contrária.
O Conceito e a Estruturação
 O algoritmo RSA necessita de dois números primos para poder fazer sua criptografia, o seu principal fundamento é a utilização de chaves públicas e privadas. Para que a mensagem seja descriptografada é necessário um processo de pré-codificação, ou seja, é o momento em que transforma a mensagem em números.
 É sempre possível descobrir a outra chave quando se tem conhecimento de uma delas, então o fundamental é que a lógica matemática seja muito bem aplicada, pois assim dificultará o acesso.
 Primeiramente é necessário escolher dois números primos distintos esses números serão denominados com os seguintes nomes p e q, o n trata- se de um módulo propriamente do RSA, então n = pq. Para que a segurança do algoritmo seja mais eficiente, as escolhas dos números devem ser do mesmo tamanho. Entretanto a fatoração de números grandes torna- se um problema difícil de solucionar.
 • n = (p-1) (q-1)
 As chaves são implementadas apartir das seguintes expressões:
 • C = Me mod N
 • M = Cd mod N
 C: Resultado dos processos de cifragem;
 M: Mensagem a ser codificada;
 e/d: São os parâmetros escolhidos para a equação.
 Para codificar a mensagem M, ela é dividida em blocos menores que N, issoocorrerá se p e q forem equivalentes a 100 dígitos, N será menor que 200 dígitos, assim como os blocos ambos serão menores que 200.
 O exemplo abaixo está de acordo com a citação do Professor Hélio Crestana Guardia da Universidade Federal de São Carlos – UFSCar
 Exemplo:
 Dado: p = 47 e q =71.
 Então: n= pq = 3337.
 *Chave de codificação:
	(p-1)(q-1) = 46*70= 3220
 * Escolha e (aleatoriamente) para ser 79.
	d = 79^-1 mod 3220 = 1019
 O número foi calculado utilizando o algoritmo de Euclides. Publique e e mantenha d e descarte p e q.
 Para codificar a mensagem:
	m = 6882326879666683
 Primeiro divida em pequenos blocos. Blocos de três dígitos funcionaram bem neste caso. A mensagem é colocada em seis blocos m:
	m = 688
	m = 232
	m = 687
	m = 966
	m = 668
	m = 003
 O primeiro bloco é codificado como:
 	c = 688^79 mod 3337 = 1570
	c = 232^79 mod 3337 = 2756
	c = 687^79 mod 3337 = 2091
	c = 966^79 mod 3337 = 2276
	c = 668^79 mod 3337 = 2423
	c = 003^79 mod 3337 = 158
 Repetindo a mesma operação nos blocos subseqüentes, geramos uma mensagem codificada:
	c = 1570 2756 2091 2276 2423 158
 Decodificar a mensagem requer a repetição da mesma exponenciação usando a chave de decodificação de 1019, então:
	m = 1570 ^1019 mod 3337 = 688
	m = 2756 ^1019 mod 3337 = 232
	m = 2091 ^1019 mod 3337 = 687
	m = 2276 ^1019 mod 3337 = 966
	m = 2423 ^1019 mod 3337 = 668
	m = 158 ^1019 mod 3337 = 003
 O que faz a quebra do sistema acontecer é a grandeza de números utilizados na geração do algoritmo.
Benefícios da Criptografia RSA
 A vantagem de se usar a criptografia assimétrica, é quequalquer pessoa pode mandar uma mensagem secreta com segurança utilizando somente a chave pública de quem irá receber. Pelo fato da chave pública está disponível, não há necessidade de envio de chaves como é feito no sistema simétrico. Outro beneficio com relação a chave pública é a assinatura digital, que garante a autenticidade do emissor da mensagem associado à integridade do conteúdo, assim assegurando muito mais segurança aos usuários.
 Sua funcionalidade no sistema
 [pic]
 Esta imagem retrata como é feita a criptografia de um sistema de RSA, a mensagem sendo criptografada e descriptografada.
 Aplicações do algoritmo RSA
 A técnica de criptografia RSA é utilizada em laptops, smartphones, media players, servidores e outros aplicativos. Os bancos também utilizam se dessa técnica para a segurança de seus clientes online.
 Alguns cientistas descobriram que essa técnica poderia ser alterada através de uma variação de tensão na alimentação da detenção da chave privada. Porém os ataques seriam feitos através de aparelhos de consumidos com o foco de varejistas e bancos. Seria improvável a utilização da alteração desses ataques pelos hackers em grandes instituições, afirmam especialistas na área. Os ataques aconteceriam empresas de mídia e fabricantes de dispositivos móveis.
 As aplicações também são feitas através dos Certificados de Segurança, as Assinaturas digitais, S/Mime e PGP (usados para implementações de e-mails) e protocolo SSL e TLS (tem a função de fazer uma comunicação segura entre o cliente e o servidor), IPsec (ligação de um IPsobre outro IP).
 Vulnerabilidade e Falhas
 Atualmente, o método criptográfico mais utilizado, principalmente em protocolos de serviços dos nossos dias, é o de RSA.
 Um dos fatores que mais motivam esses sistemas a usarem esse método criptográfico é decorrente de sua alta confiabilidade e segurança, pois ele é quase impossível de ser decifrado, dependendo do tamanho de suas chaves.
 Existem duas principais formas de se quebrar um algoritmo de criptografia. Uma delas é pela criptoanálise, a outra é por força bruta.
 Denomina-se criptoanálise o estudo que busca formas de adivinhar, através de estudos e métodos, decodificar textos cifrados, sem conhecer a lógica envolvida nem as chaves criptográficas. Os criptoanalistas (como são conhecido as pessoas que manipulam essa prática), usam de diversas técnicas pré-estudadas e testadas, embora em cada caso algo novo e incrementado ou removido, mas o desafio não é apenas decifrar a mensagem, eles buscam “quebrar” o algoritmo de criptografia.
 Apesar de parecer a quem vê panoramicamente que a criptoanálise é algo destrutivo e ruim, isso é uma inverdade, pois a criptoanálise contribuí na manutenção e no desenvolvimento de uma criptografia mais confiável, segura e autentica.
 A criptoanálise pode ser bastante efetiva em muitos algoritmos criptográficos, porém em algoritmos mais complexos ela acaba sendo ineficaz, pois a três fatores que se deve pensar ao desenvolver a criptoanálise: o tempo das operações a serem efetuadas, a memória de armazenagem necessária para efetuar o ataque, os dados do algoritmo. Em RSA, por exemplo, essa alternativa não seriaviável.
 Denomina-se força bruta a reunião de todas as possibilidades de satisfazer o problema proposto.
 A implementação da força bruta e relativamente fácil porém sem muita efetividade pois dependendo do número de possibilidades o tempo para achar a solução cresce exponencialmente, e isso exige um poder computacional elevado,veja no quadro abaixo o tempo para cada uma das condições,desenvolvido pelo 7zip:
 |Tamanho da senha (letras minúsculas latinas) |Ataque |
|1 |2 Segundos |
|2 |1 Minuto |
|3
|30 Minutos |
|4 |12 Horas |
|5 |14 Dias |
|6 |1 Ano |
|7 |10 Anos |
|8 |19 Anos |
|9 |26 Anos |
|10 |37 Anos |
|11|46 Anos |
|12 |55 Anos |
|13 |64 Anos |
|14 |73 Anos |
|15 |82 Anos |
|16 |91 Anos |
|17 |100 Anos |
 Portanto ela é efetiva dependendo da capacidade computacional de processamento. No algoritmo RSA que trabalha com fatoração de chaves de números altos, este método se torna também pouco viável.
 Como falamos anteriormente o RSA é um método criptográfico altamente confiável, um dos melhores atualmente, mas nem um sistema é totalmente seguro e inviolável e apesar de bom, até quando ele agüenta?
 A única solução achada para “quebrar” o RSA é o que foi proposto por Peter Shor, um professor americano do Instituto de Tecnologia de Massachusetts (MIT), conhecido por seus estudos em computação quântica, em especial pelo algoritmo de shor capaz de fatorar exponencialmente mais rápido do que qualquer outro algoritmo conhecido hoje rodando em um computador clássico.
 Encontrar todos os números primos de um número grande é uma tarefa árdua, porém um computador quântico poderia fazer isso em segundos. Ele funciona compropriedades da mecânica quântica, porém este computador é apenas teórico, isto é, ele não existe de fato, e o tempo esperado é apenas probabilístico. Através deste computador várias cifras criptográficas seriam quebradas, inclusive a de RSA. O algoritmo RSA só permaneceria em segurança se o tamanho de sua chave fosse maior do que o melhor computador quântico existente, se esta possibilidade dor verdadeira, então o RSA continuaria inviolável.
 Abaixo, foi proposto a fatoração de números grandes com o objetivo de quebrar sistemas de criptografia, incluindo RSA. Obteve-se:
|Comprimento do número a ser fatorado (em |Tempo de fatoração por algoritmo clássico |Tempo de fatoração com algoritmo de shor |
|bits) | | |
|512 |4 dias |34 segundos |
|1024 |100 mil anos |4,5 minutos |
|2048 |100 mil bilhões de anos |36 minutos |
|4096 |100 bilhões de quatrilhões de anos |4,8 horas |
 Nos Estados Unidos o algoritmo proposto pelo professor shor é utilizado em algumas empresas para comunicação e recepção óptica, entretanto sem o poder de computação quântica.
 Diante disso, podemos concluir que o algoritmo RSA atende todos os requisitos para efetuar uma boa criptografia, entretanto com a possívelchegada de computadores quânticos ele será facilmente violado, perdendo sua eficiência.
 Melhorias propostas e/ou implementadas
 A vantagem do sistema baseado em chave pública é que eles podem fornecer um método para assinaturas digitais.
A desvantagem é a velocidade, o método de chave pública é muito mais lento na cifragem do que o método de chave secreta.
 Para que as transações sejam efetuadas sem prejuízo para o consumidor e até mesmo para o servidor. A criptografia na internet ja se tornou uma necessidade, diariamente tenta-se implementar algoritmos cada vez mais poderosos e difíceis de serem decifrados por pessoas não autorizadas.
 A principal motivação de sistemas de criptografia é proporcionar segurança a todos os usuários e evitar que a transação possa ser decifrada por pessoas não autorizadas, especialmente transações bancárias e de compras.
o trabalho de criptografia em RSA foi feito na linguagem em C,
buscamos um meio fácil e completo para criptografar uma palavra ou uma frase. Primeiro deve-se achar as chaves, ou seja, as "senhas" para seu programa estar seguro. Essas chaves serão calculadas no programa por uma lógica muito conhecida e usada em vários meios de criptografia.
 Entre as suas vantagens e desvantagens a criptografia em RSA esta muito bem conceituada e acredita-se que será usada por algum tempo até desenvolverem algo muito mais eficiente.
Relatório do programa
1: Incluímos a biblioteca “stdio.h”;
2: Incluímos a biblioteca “stdlib.h”;
3: Incluímos a biblioteca “conio.h”;
4: Incluímos a biblioteca “string.h”;
5: O arquivo cifrar.txt guarda o texto a sercifrado;
6: O arquivo cifrado.txt guarda o texto já cifrado;
7: O arquivo decifrado.txt guarda o texto já cifrado;
8: Função secreta serve apenas para converter string em ASCII;
9: Serve para calcular o (m) void chave ( );
10: Protótipo de apresentação;
11: Protótipo para saída;
12: Protótipo de verificação de números primos;
13: Protótipo para gerar chaves;
14: Protótipo para cifrar;
15: Protótipo para decifrar;
16: Variável global usado em todos os for ( );
17: Contador para a apresentação. Com isso, ele aparece somente uma vez ao decorrer do programa;
18: Função principal;
20: Opção de escolha do usuário para criar chave, cifrar ou decifrar;
23: Tela de apresentação;
27: Escolha do usuário;
28: Escolha do usuário;
29: Escolha do usuário;
30: Escolha do usuário;
32: Escolha do usuário;
36: Apaga todas as informações da tela;
43: Escolha do usuário;
44: Escolha do usuário;
45: Escolha do usuário;
46: Escolha do usuário;
48: Escolha do usuário;
51: Chama a função “Cria as chaves”;
53: Obtém as chaves públicas e a chave privada;
55: Chama a função “Cifra”;
57: Cifra o arquivo usando as chaves públicas;
59: Chama a função “Decifra”;
61: Decifra o arquivo e salva em outro arquivo;
77: Criar chaves públicas e chave privada;
79: Armazena o valor do número primo (p);
80: Armazena o valor do número primo (q);
81: O resultado do cálculo (p*q) é armazenado aqui. Também é uma das chaves públicas;
82: O resultado do cálculo ((p-1)*(q-1)) é armazenado;
83: Uma das chaves públicas;
84: Chave privada;
89: Irá verificar se o (p) é um número primo;
92: Irá verificar se o (q) é um número primo;
103: Irá verificar se o (p) é um número primo;
106: Iráverificar se o (q) é um número primo;
108: A chave pública (n) vem do resultado de (p*q);
111: Limpa a tela;
113: Para que mm sejam primos entre si, o valor dele não pode se divisível pelos
números múltiplos de mm;
114: Irá percorrer o (d) até que chegue ao resultado igual a um;
116: Irá parar quando chegar a um número que o resultado seja um;
131: Cifra algum texto ou palavra. Essa função serve para cifrar algo. Ele irá pedir o número das chaves públicas. Para cifrar algo não precisa da chave privada, pois o mesmo só é usado para decifrar algo.
133: Chaves públicas que o usuário irá digitar;
134: Chaves públicas que o usuário irá digitar;
135: Representação de ASCII;
136: Armazena cada valor criptografado da representação ASCII;
139: Serve para a leitura do arquivo (r). Ele contém o conteúdo a ser cifrado;
140: Testa se o arquivo foi identificado. Caso ele não seja identificado, ele cria o arquivo;
146: Cria o arquivo para escrita;
147: Testa se ele foi criado;
154: Fecha o arquivo e abre em seguida;
161: Grava o conteúdo do arquivo “cifrar”, já cifrado;
162: Testa se o arquivo cifrado foi criado;
170: Entra com os valores da chave pública (n) e (m);
182: Enquanto não chegar o fim do arquivo, ele vai cifrando e percorrendo o arquivo;
184: Passa do que está no arquivo para a variável “senha”;
185: Calcula o tamanho de caracteres do arquivo;
188: Guarda na variável a representação em ASCII de cada caracter da senha, ou seja, o caracter que está no atual momento da variável “senha” já é guardada na variável RepAscii com o seu número.
189: Tem que ser inicializado com um, pois no cálculo abaixo, se for inicializado com zero a multiplicação sempre serázero.
190: O (m) é o expoente da fórmula abaixo. Substitui a formula “(RepAscii elevado a m (mod n))”;
192: Cada caracter será criptografado e armazenado na variável (N);
194: Escreve no arquivo cada conjunto do código;
199: Fecha o arquivo “cifrado”;
200: Fecha o arquivo “cifrar”;
214: Decifra algo já cifrado. Irá pedir a chave privada e a chave pública;
216: Armazena cada código cifrado para poder decifrar;
217: Chave privada. Usada para decifrar alguma mensagem;
218: Chave pública. Usado para decifrar alguma mensagem. Armazena o código decifrado;
219: Lê o texto para ser decifrado;
220: Testa se o arquivo cifrado.txt foi identificado;
232: Armazena o código decifrado;
233: Testa se o arquivo decifrado.txt foi criado;
247: Trabalha em todo o arquivo cifrado.txt para decifrar cada caracter;
249: Trabalha em todo o conjunto de números e pára em cada espaço;
250: Tem que ser inicializado com um, pois no cálculo abaixo, se for inicializado com zero a multiplicação sempre será zero.
255: Grava cada parte decifrada no arquivo “decifrado.txt”;
257: Fecha o arquivo “cifrado.txt”;
258: Fecha o arquivo “decifrado.txt”;
266: Calcula um número primo. Aqui se descobre se o número é primo ou não;
268: Percorre do dois até o número em dúvida;
279: Depois de acusar o erro, retornará para a função chave;
284: Tela de apresentação do programa;
301: Mínimo múltiplo comum. Essa função serve para procurar algum valor que não seja dividido pelos resultados do MMC. Essa função serve para calcular o MMC do tamanho para que os valores obtidos sejam guardados em um “array”, para que depois, escolha algum número que não seja divisível pelos valores desse “array”;
303:Valor a ser fatorado;
304: Contador para o “array”;
305: Para guardar os resultados, vai aumentando conforme o cont aumenta;
306: Na primeira vez ele vai armazenar o maior valor do “array” e depois irá armazenar o valor esperado;
307: Percorre do dois até o valor de entrada para fazer o MMC;
311: Armazena o valor dividido pelo i;
315: Volta o i no número se o número for novamente divisível pelo i atual;
321: Armazena o maior número do “array”;
322: Encontra algum número que não é divisível pelos números armazenados no “array”;
324: Testa se o PorEnquanto é divisível por cada elemento do “array”. Se for divisível, irá mudar o valor para mais um e fazer novamente o cálculo;
330: Retorna para a função chamadora na “chave()”
 Projeto (estrutura) do programa
1 #include 
2 #include 
3 #include 
4 #include 
5 #define Endereco_cifrar "cifrar.txt"
6 #define Endereco_cifrado "cifrado.txt
7 #define Endereco_decifrado "decifrado.txt"
8 #define Endereco_decifrado "decifrado.txt"
9 int secreto2();
10 int secreto();
11 int mmc(int tamanho);
12 int apresentacao();
13 int saida();
14 int primo(int);
15 int chave();
16 int cifrar();
17 int decifrar()
18 int i,j;
19 int d = 0;
20 int main()
21 {
22 int es;
23 while(!(d))
24 {
25 apresentacao();
26 d++;
27 }
28 printf(" ********* ");
29 printf("\nSe voce ainda nao criou suas chaves, escolha a opcao 1");
30 printf("\nSe voce criou suas chaves e deseja criptografar algum texto ou frase, escolha a opcao 2");
31 printf("\nSe voce cifrou algo e deseja descriptografar, escolha opcao 3");
32 printf("\nSe voce deseja sair doprograma, escolha a opcao 4");
33 printf("\n ********* ");
34 printf("\n\nO que voce deseja fazer:\n\n1 -\
 Criar uma chave.\n2 - Criptografar.\n3 - Descriptografar.\n4 - Sair.\n\nopcao: ");
35 scanf("%d", &es);
36 while((es != 1) && (es != 2) && (es != 3) && (es != 4) && (es != 444))
37 {
38 system("cls");
39 printf("Favor escolher apenas as opcoes validas");
40 printf("\nPrecione qualquer tecla para retornar: ");
41 getch();
42 system("cls");
43 system("color A");
44 printf(" ********* ");
45 printf("\nSe voce ainda nao criou suas chaves, escolha a opcao 1");
46 printf("Se criou as chaves e deseja criptografar algum texto, escolha 2");
47 printf("\nSe voce cifrou algo e deseja descriptografar, escolha opcao 3");
48 printf("\nSe voce deseja sair do programa, escolha a opcao 4");
49 printf("\n ********* ");
50 printf("\n\nO que voce deseja fazer:\n\n1 -\
 Criar uma chave.\n2 - Criptografar.\n3 - Descriptografar.\n4 - Sair.\n\nopcao: ");
51 scanf("%d", &es);
52 }
53 if(es == 1)
54 {
55 chave();
56 }
57 if(es == 2)
58 {
59 cifrar();
60 }
61 if(es == 3)
62 {
63 decifrar();
64 }
65 if(es == 4)
66 {
67 exit(0);
68 }
69 if(es == 444)
70 {
71 secreto();
72 }
73 system("cls");
74 printf("Programa executado com sucesso");
75 printf("\nPressione qualquer tecla para fechar");
76 getch();
77 return 0;
78 }
79 int chave()
80 {
81 int p;
82 int q;
83 int n;
84 intmm;
85 int m = 0;
86 int d = 1;
87 system("cls");
88 printf("\nEscolha 2 numeros primos maiores que 11 para o \"p\" e \"q\"\n");
89 printf("p = ");
90 scanf("%d", &p);
91 primo(p);
92 printf("\nq = ");
93 scanf("%d", &q);
94 primo(q);
95 while((p < 10)||(q < 10))
96 {
97 system("cls");
98 printf("\nSe voce escolher numeros, pequenos, pode ser que ira dar erro.");
99 printf("\nFavor escolher outros numeros");
100 getch();
101 system("cls");
102 printf("\nEscolha 2 numeros primos maiores que 11 para o \"p\" e \"q\"\n");
103 printf("p = ");
104 scanf("%d", &p);
105 primo(p);
106 printf("\nq = ");
107 scanf("%d", &q);
108 primo(q);
109 }
110 n = p*q;
111 printf("\nPrecione qualquer tecla para mostrar seu codigo e suas chaves");
112 getch();
113 system("cls");
114 mm = (p-1)*(q-1);
115 m = mmc(mm);
116 while(((m*d)%mm) != 1)
117 {
118 d++;
119 }
120 printf("C H A V E P R I V A D A - Favor guardar essa chave .\n");
121 printf("d = %d\n\n", d);
122 printf("\n\n\n");
123
printf("C H A V E P U B L I C A - Essa chave pode ser distribuida.\n");
124 printf("n = %d\n", n);
125 printf("m = %d\n", m);
126 printf("\n\nVoce tera que guardar sua chave privada\
 pois ela sera usada quando for decifrar algo.");
127 printf("\nA suas chaves publicas voce pode passar para qualquer pessoa,\
 pois essas chaves sera usada na hora de criptografar algo.");
128 printf("\n\nPrecione qualquer tecla para continuar: ");
129 getch();
130 system("cls");
131 return main();
132 }
133 int cifrar()
134 {
135 int m;
136 int n;
137 int RepAscii;
138 int N = 1;
139 unsigned long int tamanho_senha;
140 charsenha[20000];
141 FILE *CIFRAR = fopen(Endereco_cifrar, "r");
142 if(CIFRAR == NULL)
143 {
144 system("cls");
145 printf("\nERRO - O arquivo de leitura do texto nao foi identificado.");
146 printf("\n\n\nPrecione qualquer tecla para criar o arquivo:");
147 getch();
148 FILE *CIFRAR = fopen("cifrar.txt","w");
149 if(CIFRAR == NULL)
150 {
151 printf("O arquivo cifrar.txt nao pode ser criado.");
152 printf("\nPrecione qualquer tecla para fechar o programa:");
153 getch();
154 return 0;
155 }
156 fclose(CIFRAR);
157 system("cls");
158 printf("Esse foi o arquivo criado, favor digitar o texto para depois ser cifrado.");
159 printf("\n\nSalve e feche o bloco de notas para continuar.");
160 system("cifrar.txt");
161 cifrar();
162 }
163 FILE *CIFRADO = fopen(Endereco_cifrado, "w");
164 if(CIFRADO == NULL)
165 {
166 system("cls");
167 printf("Por algum motivo, o arquivo cifrado.txt nao foi criado.");
168 printf("\n\n\nPrecione qualquer tecla para continuar:");
169 getch();
170 return 0;
171 }
172 system("cls");
173 printf("C I F R A R");
174 printf("\n\nEntre com o valor de n e m\n");
175 printf("n = ");
176 scanf("%d", &n);
177 printf("m = ");
178 scanf("%d", &m);
179 system("cls");
180 printf("Esse sera o texto para ser cifrado.");
181 printf("\nVoce pode acrescentar ou tirar algo do texto, mas salva ao sair.");
182 printf("\n\nFeche o bloco de notas para continuar:");
183 system("cifrar.txt");
184 while(!(feof(CIFRAR)))
185 {
186 fscanf(CIFRAR, " %[^/n]", &senha);
187 tamanho_senha = strlen(senha);
188 for(i=0 ; i

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando