|
Usuários |
|
70 Usuários Online
|
|
[Artigos]
Criptografia de chaves assimétricas - Introdução |
Publicado por icemagno : Terça, Agosto 17, 2004 - 06:21 GMT-3 (18074 leituras)
2 Comentários Enviar para um amigo Versão para impressão
|
ALGORITMO DE CRIPTOGRAFIA RSA
Muitos programadores desejam implementar sistemas que utilizam criptografia em empresas, mas não conhecem realmente as técnicas. Isto pode acarretar prejuízo ao cliente, pois o mesmo acredita estar usando um sistema seguro quando na realidade tem apenas um contratempo para um hacker.
A seguir apresenta-se os conceitos do algoritmo RSA e os conceitos de Criptografia de Chave Pública necessários para o estudo do mesmo, o que fornecerá base para criação de sistemas seguros utilizando assinatura digital e criptografia.
No modelo que vou propor futuramente, um sistema não precisará somente de senha, mas de um arquivo particular de chave também, elevando a segurança ao máximo de proteção.
Conceitos de Criptografia de Chave Pública: Esse conceito foi apresentado por Diffie e Hellman no artigo “New Directions in Cryptography” para minimizar a necessidade de transmissão de chaves por redes ou canais seguros e fornecer assinatura digital.
Com o uso de criptografia de chave pública uma mensagem é cifrada com uma chave E (Encription key) e só pode ser decifrada com uma chave D (Decription key) e o calculo de D a partir de E é computacionalmente difícil. Com esse sistema a chave E pode ser publicada sem comprometer a segurança.
Conceitos do Algoritmo RSA: O RSA é um sistema de criptografia de chave assimétrica ou criptografia de chave pública que foi inventado por volta de 1977 pelos professores do MIT (Massachsetts Institute of Technology) Ronald Rivest, Adi Shamir e o professor da USC (University of Southern California) Leonard Adleman.
O sistema consiste em gerar uma chave pública (geralmente utilizada para cifrar os dados) e uma chave privada (utilizada para decifrar os dados) através de números primos grandes, o que dificulta a obtenção de uma chave a partir da outra. Quanto maior os números primos utilizados para a criação da chave, maior é a segurança proporcionada por esse algoritmo.
Hoje em dia os números primos que são utilizados têm geralmente 512 bits de comprimento e combinados formam chaves de 1024 bits. Em algumas aplicações como por exemplo bancárias que exigem o máximo de segurança a chave chega a ser de 2048 bits.
Com o passar do tempo, a tendência é que o comprimento da chave aumente cada vez mais. Esse fenômeno acontece, em grande parte, pelo avanço nos sistemas computacionais que acompanham o surgimento de computadores que são capazes de fatorar chaves cada vez maiores em um tempo muito baixo.
Os algoritmos para a geração da chave pública e privada usadas para cifrar e decifrar as mensagens são simples. Observe-os a seguir: (1) Escolhe-se dois números primos grandes (p e q); (2) Gera-se um número n através da multiplicação dos números escolhidos anteriormente (n = p . q); (3) Escolhe-se um número d, tal que d é menor que n e d é relativamente primo à (p-1).(q-1); (4) Escolhe-se um número e tal que (ed-1) seja divisível por (p-1).(q-1). Para realizar esse cálculo é necessário o algoritmo de Euclides estendido.
Os valores e e d são chamados de expoentes público e privado, respectivamente. O par (n, e) é a chave pública e o par (n, d) é a chave privada. Os valores p e q devem ser mantidos em segredo ou destruídos.
Para cifrar cada bloco é realizado o cálculo: C = Te mod n, onde C é a mensagem cifrada e T é a mensagem original.
Para T = 0920, temos:
C = 092097 mod 3233 = 2546;
Para T = 1900, temos:
C = 190097 mod 3233 = 1728;
Para T = 0112, temos:
C = 011297 mod 3233 = 0514;
Para T = 1200, temos:
C = 120097 mod 3233 = 0210;
Para T = 0718, temos:
C = 071897 mod 3233 = 2304;
Para T = 0505, temos:
C = 050597 mod 3233 = 0153;
Para T = 1100, temos:
C = 110097 mod 3233 = 2922;
Para T = 2015, temos:
C = 201597 mod 3233 = 2068;
Para T = 0013, temos:
C = 001397 mod 3233 = 1477;
Para T = 0500, temos:
C = 050097 mod 3233 = 2726,
Assim temos a mensagem cifrada:
2546 1728 0514 0210 2304
0153 2922 2068 1477 2426
Similarmente, para decifrar cada bloco é realizado o cálculo: T = Cd mod n, onde T é a mensagem original e C é a mensagem cifrada.
Para C = 2546, temos: T = 2546193 mod 3233 = 0920; Para C = 1728, temos: T = 1728193 mod 3233 = 1900;
Para C = 0514, temos: T = 0514193 mod 3233 = 0112; Para C = 0210, temos: T = 0210193 mod 3233 = 1200;
Para C = 2304, temos: T = 2304193 mod 3233 = 0718; Para C = 0153, temos: T = 0153193 mod 3233 = 0505;
Para C = 2922, temos: T = 2922193 mod 3233 = 1100; Para C = 2068, temos: T = 2068193 mod 3233 = 2015;
Para C = 1477, temos: T = 1477193 mod 3233 = 0013; Para C = 2726, temos: T = 2726193 mod 3233 = 0500,
Assim temos a mensagem decifrada, que corresponde à mensagem original:
0920 1900 0112 1200 0718
0505 1100 2015 0013 0500
Para cifrar uma mensagem com esse algoritmo é realizado o seguinte cálculo: C = Te mod n, onde C é a mensagem cifrada, T é o texto original, e e n são dados a partir da chave pública (n, e). A única chave que pode decifrar a mensagem C é a chave privada (n, d) através do calculo de: T = Cd mod n.
Exemplo de Funcionamento: Nosso exemplo do RSA realiza a criptografia da mensagem “ITS ALL GREEK TO ME” utilizada pelos autores do RSA como exemplo utilizando-se de chaves diferentes.
Satisfazendo a etapa 1 de criação de chaves descrita acima, são escolhidos dois números primos aleatórios p = 53, q = 61. No nosso exemplo utilizamos números pequenos para que possam ser representados facilmente. Pela etapa 2 n = p . q, portanto n = 53 . 61 = 3233; Pela etapa 3 escolher um número d tal que d seja menor que n e relativamente primo a (p-1).(q-1) para tanto basta escolher um número primo aleatório maior que p e q. Para o nosso exemplo escolhemos d = 193. Pela etapa 4 escolhe-se um número e tal que (ed-1) seja divisível por (p-1).(q-1), para realizar tal calculo é utilizado o algoritmo de Euclides Estendido. Fazendo o uso desse algoritmo calculamos que e = 97.
Portanto, em nosso exemplo, os valores importantes do algoritmo RSA são: p = 53, q = 61, n = 53 . 61 = 3233, d = 193 e e = 97. No artigo as chaves utilizadas foram: p = 47; q = 59; n = 2773; d = 157; e = 17.
Para realizar a criptografia adotamos a tabela abaixo para representar numericamente as letras maiúsculas do alfabeto. Uma outra implementação, talvez mais usada, utiliza-se da tabela ASCII que não é utilizada neste exemplo para simplificar os cálculos.
(por motivos de formatação eu excluí a tabela, mas considere que o ESPAÇO é 00, A=01, B=02, ... ,W=23, X=24, Y=25, Z=26).
Usando os valores indicados na tabela, a frase “ITS ALL GREEK TO ME” seria representada numericamente como:
09 20 19 00 01 12 12 00 07 18 05 05 11 00 20 15 00 13 05 00
Como nosso n = 3233, a mensagem pode ser criptografada em blocos de duas letras pois o valor máximo que pode aparecer na frase original é o eqüivalente à seqüência “ZZ” = 2626 que é menor que n (3233). Portanto, agrupando a mensagem em grupos de duas letras temos:
0920 1900 0112 1200 0718
0505 1100 2015 0013 0500
Em artigo futuro, mostrarei como aplicar criptografia realmente segura em Delphi, usando componentes gratuitos e com fonte aberto.
Observação: Carlos Magno Oliveira de Abreu.
Icemagno@hotmail.com
http://www.magnoabreu.kit.net
|
|
Comentários | |
| | Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos. |
|
|
Edição 112 |
|
|
50 Programas Fontes |
|
|
Produtos |
|
|