Você está na página 1de 6

Fbrica de Noobs

Criptografia Criptografia RSA


A Criptografia RSA um dos algoritmos de encriptao mais
seguros e populares existentes na atualidade. Seu funcionamento
baseia-se em princpios matemticos, e se trabalhado com chaves
grandes o suficiente, sem dvida um excelente algoritmo para se
implementar.
Aqui vou tentar explicar o processo de encriptao e
encriptao manual, o que vai envolver alguns conceitos
matemticos, que considero melhor explicar antes.
Nmero primo qualquer nmero que seja divisvel somente
por 1 e por ele mesmo. Por exemplo, 17,11,37,41.
Podemos indicar restos de divises utilizando congruncias.
Por exemplo:
8 3 mod(5)
(l-se 8 congruente a 3 mdulo 5)

A notao acima mostra que 8 apresenta o mesmo resto que 3


ao ser dividido por 5. Veja outros exemplos:
101 1 mod(100)
478 3 mod(5)
256 4 1 mod(3)
2 0 mod(2)
23 0 mod(2)

O ramo da Matemtica que trabalha com tais propriedades


chama-se Aritmtica Modular, e onde toda a criptografia RSA est
baseada.
Para codificar uma mensagem, o primeiro passo transformar
todo o texto em nmeros. Para isso, usamos a conhecida tabela
ASCII:
Por exemplo, codificaremos morte ao miojo da seguinte
forma:
109 111 114 116 101 032 097 111 032 109 105 111 106 111
Aqui, terminamos o processo de pr-codificao e passamos
para a codificao propriamente dita.
Importante: conveniente, para evitar uma possvel (apesar de
improvvel) quebra por frequncia lingustica, que o texto a ser
codificado esteja em alguma cifra que no haja repetio de letras.
Por exemplo, cifra de Vigenre.
Agora precisamos encontrar dois parmetros RSA. Vamos
cham-los de p e q. Esses nmeros precisam ser necessariamente
primos. Em situaes reais, esses nmeros so astronmicos (algo
no mnimo da ordem de 10100 ), o que impossibilita qualquer tentativa
de decodificao sem a chave. Aqui tem alguns
http://compoasso.free.fr/primelistweb/page/prime/liste_online_en.ph
p. Mas no nosso caso, usaremos esses:
= 17
= 23
Depois, determinamos o produto desses dois nmeros, e
chamamos tal produto de n.
=
= 17 23
= 391

Vamos chamar n de chave pblica do cdigo. Ela pode ser


divulgada para qualquer pessoa que queira criptografar e lhe enviar
uma mensagem.
J p e q so chaves privadas, e no devem ser reveladas. Se n
for um nmero pequeno, fcil deduzir os outros valores, mas isso
impossvel para valores grandes.
Agora, vamos determinar a chamada funo totiente em n, que
no nada mais que:
() = ( 1) ( 1)
No caso:
() = (16) (22)
() = 352
Da, basta escolhermos um nmero que satisfaa 1 > >
() e () () ou seja, que esteja entre 1 e o valor que
encontramos anteriormente e no possua divisores comuns (alm do
1, claro) com ele. Para facilitar a codificao, vou escolher 3.
=3
Depois, precisamos encontrar um nmero d que satisfaa:
1 mod()
No nosso exemplo:
3 1 mod(352)
Em aritmtica modular, d chamado de inverso multiplicativo
de : (). Felizmente, temos calculadoras online que j fazem esse
servio.
Basta acessarmos http://www.cs.princeton.edu/~dsri/modular-
inversion-answer.php, informarmos o valor de e na primeira caixa e
de () na segunda:

Como nos mostrou, o resultado :


= 235
Ao final do processo, terminamos com os seguintes valores:
Chaves pblicas: (; )
Chaves privadas: (; ; )
Ou, no nosso caso:
Chaves pblicas: (391; 3)
Chaves privadas: (17,23,235)

s depois de ter esses 5 valores que realizamos a codificao


propriamente dita.
Voltamos a mensagem pr-codificada originalmente:
109 111 114 116 101 032 097 111 032 109 105 111 106 111
Vamos denotar cada conjunto de nmeros por bloco, e
chama-los, um por um, de M. A formula para codificar cada bloco M
:
= mod ()
Sendo C o bloco codificado que obteremos aps aplicar a
frmula.
Veja o exemplo:
= 1093 mod (391)
Tambm felizmente, podemos fazer isso com uma calculadora
de restos (http://www.calculadoraonline.com.br/divisao-polinomios) ,
tornando o trabalho infinitamente mais fcil:

Logo:
1093 mod (391) = 37
E da temos nosso primeiro bloco codificado. Devemos repetir
o processo para todos os outros blocos. Realizando-o, temos a
seguinte mensagem codificada j em RSA:
37 304 45 24 16 315 79 304 315 37 265 304 30 304
Se quisermos decodificar, podemos faz-lo utilizando outra
frmula:
= mod ()
No caso do primeiro bloco:
= 37235 mod (391)
O que tambm pode ser feito usando a calculadora de restos,
e d:

Logo:
109 = 37235 mod (391)
Que o valor do primeiro bloco. Realizando o processo
completo, temos novamente:
109 111 114 116 101 32 97 111 32 109 105 111 106 111
Comparando com a tabela ASCII, chegamos no resultado
original e deciframos a mensagem.
Se quisermos automatizar o processo podemos usar esse
site,
https://www.cs.drexel.edu/~introcs/Fa11/notes/10.1_Cryptography/R
SA_Express_EncryptDecrypt.html que oferece um codificador e
decodificador automtico de RSA com base na tabela ASCII.
Basta informarmos os valores de n e e para codificar, e de d
para decifrar:

Você também pode gostar