sexta-feira, setembro 29, 2006

Site bem explicado sobre RSA

https://www.redes.unb.br/security/criptografia/rsa/rsa.html

HASH

Um hash é uma seqüencia de letras ou números geradas por um algorítmo de hashing.

Essa seqüencia busca identificar um arquivo ou informação unicamente. Por exemplo, um e-mail, uma senha, uma chave ou mesmo um arquivo. Ele é um método para transformar dados de tal forma que o resultado seja (quase) exclusivo. Além disso, funções usadas em criptografia garantem que não é possível a partir de um valor de hash retornar à informação original.

Como a seqüencia do hash é limitada, muitas vezes não passando de 512 bytes, existem diversas colisões (seqüencias iguais para dados diferentes). Quanto maior for 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. Enquanto o ideal seria gerar identificadores únicos para os valores de entrada, isso normalmente não é possível: na maioria dos casos, o contra-domínio de nossa função é muito menor do que o seu domínio, ou seja, x (o tipo de entrada) pode assumir uma gama muito maior de valores do que hash(x) (o resultado da função de hash).

Os mais usados algoritmos de hash são os 16 bytes: MD2, MD4, MD5 ou o SHA-1, de 20 bytes. Características de alguns algoritmos:

  1. MD4: Desenvolvido em 1990/91 por Ron Rivest, vários ataques foram detectados, o que fez com que o algoritmo fosse considerado frágil.
  2. SHA-1 (Secure Hash Algorithm): Desenvolvido pelo NIST e NSA e é considerado como o mais seguro atualmente.

O processo é unidirecional e impossibilita descobrir o conteúdo original a partir do hash. O valor de conferência ("check-sum") muda se um único bit for alterado, acrescentado ou retirado da mensagem.


Criptografia de chave pública

Origem: Wikipédia, a enciclopédia livre.

A criptografia de chave pública ou criptografia assimétrica é um método de criptografia que utiliza um par de chaves: uma chave pública e uma chave privada. A chave pública é distribuída livremente para todos os correspondentes via e-mail ou outras formas, enquanto a chave privada deve ser conhecida apenas pelo seu dono.

Em um algoritmo de criptografia assimétrica, uma mensagem cifrada (encriptada é um termo incorrecto) com a chave pública pode somente ser decifrada pela sua chave privada correspondente. Do mesmo modo, uma mensagem cifrada com a chave privada pode somente ser decifrada pela sua chave publica correspondente.

Os algoritmos de chave pública podem ser utilizados para autenticidade e confidencialidade. Para confidencialidade, a chave pública é usada para cifrar mensagens, com isso apenas o dono da chave privada pode decifra-la. Para autenticidade, a chave privada é usada para cifrar mensagens, com isso garante-se que apenas o dono da chave privada poderia ter cifrado a mensagem que foi decifrada com a 'chave

Criptografia RSA

Criptografia RSA

Para criar uma chave RSA precisamos escolher dois números primos grandes, geralmente este numeros sao maiores que 10^100, mas para facilitar vamos escolher dois números pequenos que serão associados a "p" e "q".

p = 3
q = 11

Depois vamos calcular dois novos números com base nos dois números primos escolhidos

n = p * q
z = (p - 1) * (q - 1)

Os resultados serão

n = 33
z = 20

Note que o valor "n" vai ser importante quando relacionarmos os caracteres a numeros pois os valores de cada caracter não podera eceder este valor.
Em seguida deveremos escolher um número primo em relação a "z" que será associado a "d", o único requsito é que não haja fatores comuns entre eles, por exemplo:

d = 7

O número 7 não tem fator comum com 20 por isso foi escolhido. Agora complica um pouco e seus conhecimentos em matemática serão requisitados. Voce deverá encontrar um número que será associado a "e" na seguinte formula:

(e * d) mod z = 1

Substituindo "d" e "z" pelos seus valores. Bom voce vai pensar: "Putz até dá para fazer, mas acho que esse mod vai complicar". Não se preocupe "mod" nada mais é do que o módulo do resto de uma divisão, ou seja 5 dividido por 3 vai restar 2 certo, então escrevemos assim: 5 mod 3 = 2
Entendeu? Então vamos testar, iremos escolher o número 1 para associarmos a "e":

e = 1
(1 * 7) mod 20 = 1
O valor retornado será 7 e não 1 então não pode ser 1

e = 3
(3 * 7) mod 20 = 1
O valor retornado será 1 então o nosso número será o 3

Bom já temos os valores das chaves privadas e publicas, ambas são compostas por dois valores, v1 e v2 que aplicados na seguinte fórmula genérica faz a criptografia ou descriptografia:

saída = entrada ^ v1 mod v2

Os valores "e" e "n" formam a chave pública e "d" e "n" formam a chave privada. Substituindo v1 por "e" e v2 por "n" você terá a formula de emcriptação

texto criptografado = texto original ^ e mod n

Logo o inverso será a formula para descriptografar, substituindo v1 por "d" e v2 por "n" que é a chave privada:

texto original = texto criptografado ^ d mod n

Para usar as chaves públicas e privadas é necessário associar um número a cada letra do alfabeto, por exemplo:

A = 1; B = 2; C = 3; D = 4; E = 5; F = 6; G = 7; H = 8; I = 9; J = 10; K = 11; L = 12; M = 13; N = 14;
O = 15; P = 16; Q = 17; R = 18; S = 19; T = 20; U = 21; V = 22; X = 23; Y = 24; W = 25; Z = 26

Com exemplo vamos encriptar de desencriptar a letra "m", para isso veremos qual o número correspondente na tabela acima e verificamos que é o número 13, então:

texto criptografado = 13 ^ e mod n
texto criptografado = 13 ^ 3 mod 33
texto criptografado = 19

Convertendo o valor para a tabela padronizada anteriormente teremos a letra "S". O destinatário ao receber a mensagem deverá descriptografá-la usando a fórmula usando os dados da chave privada:

texto original = 19 ^ d mod n
texto original = 19 ^ 7 mod 33
texto original = 13

O número 13 é equivalente a letra "M" na tabela padronizada anteriormente.