Você está na página 1de 9

21/03/2016

Entendendo(deverdade)acriptografiaRSAParteII|BlogsdaLambda3

OUTROS

Entendendo (de verdade) a criptogra a RSA


Parte II
16 DE DEZEMBRO DE 2012 | FERNANDO OLIVEIRA | 16 COMENTRIOS

Follow

Tweetar

2
Share

Ol pessoal. No post anterior eu falei sobre como era o funcionamento do RSA e se vocno o
leu recomendo que d uma espiada nele antes de continuar lendo este aqui. Neste post eu vou
comear a mostrar a matemtica usada no RSA, por isto recomendo que voc peguem
umpapel, um lpis e uma calculadora

1. De nir valores para os caracteres


Vamos criar uma tabela atribuindo a cada letra um nmero. Isto necessrio pois o RSA
codi ca somente nmeros. Poderamos usar a tabela ASCII, mas para facilitar as contas vamos
criar a nossa prpria:

http://blog.lambda3.com.br/2012/12/entendendodeverdadeacriptografiarsaparteii/

1/9

21/03/2016

Entendendo(deverdade)acriptografiaRSAParteII|BlogsdaLambda3

Tabela de valores para letras

2. Escolhendo os primos
A estratgia para a escolha dos primos simples: quanto maior melhor. Para se ter uma ideia, a
RSA Data Security, que faz a padronizao do RSA, recomenda que se utilize chaves de 2048
bits (o que d um nmero com 617 dgitos!) se voc quiser garantir que sua chave no seja
quebrada at 2030. Para nosso exemplo vamos usar primos bem pequenos, que nossas
calculadoras conseguem processar. Os primos sero

p=17,q=41

Multiplicando-os ns obtemos um nmero n:

n=p*q

Sendo assim, no nosso caso:

n=17*41=697

Este n o tamanho do nosso conjunto. necessrio termos um conjunto nito de valores para
que possamos fazer o caminho inverso ao realizado para cifrar nossa mensagem. Podemos,
chamar nosso conjunto de Z697.

3. A funo totiente
Agora temos que calcular a funo totiente, ou (x) [pronuncia-se ] de Euler o
matemtico, no o lho do vento. O que faz esta funo? Eu diria que ela o cerne do
RSA, ela me diz a quantidade de co-primos de um numero que so menores que ele mesmo.
http://blog.lambda3.com.br/2012/12/entendendodeverdadeacriptografiarsaparteii/

2/9

21/03/2016

Entendendo(deverdade)acriptografiaRSAParteII|BlogsdaLambda3

Co-primos ou Nmeros primos entre si


Dois nmeros so primos entre si quando o Mximo Divisor Comum (MDC) entre eles 1.
Calcular a quantidade de co-primos de um nmero que so menores que ele um trabalho to
ou mais difcil quanto calcular seus fatores primos Exceto quando eu j conheo os fatores
primos deste nmero. Para nmeros formados por dois fatores primos ela ca com a seguinte
forma:

(x)=(p1)*(q1)

No nosso caso queremos calcular a funo totiente do n.

(n)=(p1)*(q1)
(697)=(171)*(411)
(697)=640

4. Calculando a chave pblica


Devemos escolher um nmero e em que 1 < e < (n), de forma que e seja co-primo de (n). Em
outras palavras, queremos um e onde o MDC((n), e) = 1, sendo e > 1.
Para encontrar este nmero podemos ir tentando sequencialmente, iniciando os testes
com o nmero 2:

MDC(640,2)=2
MDC(640,3)=1

O nmero 3 atende aos requisitos, mas podemos continuar calculando e usar qualquer
co-primo que atenda os requisitos. Para este exemplo vamos usar o nmero 13.

Chavepblica=(n,e)
Chavepblica=(697,13)

Beleza! Descobrimos nossa chave pblica! No nosso exemplo ela ser os nmeros 697 e13.

5. Cifrando a mensagem

http://blog.lambda3.com.br/2012/12/entendendodeverdadeacriptografiarsaparteii/

3/9

21/03/2016

Entendendo(deverdade)acriptografiaRSAParteII|BlogsdaLambda3

5. Cifrando a mensagem
Com a chave pblica em mos, bem simples cifrar uma mensagem. Mas antes temos que
fazer uma pausa e entender o que e como funciona a Aritmtica modular e vocs vo
perceber que no estou louco quando digo que 13 vezes 9 pode ser 7.
Diviso inteira
Pode parecer estranho, mas importante termos uma viso bem clara do que uma diviso
inteira para podermos realizar operaes modulares. Vejam:
Se y divide x, podemos dizer que

x:y=c

portanto, existe um c tal que

x=c*y+r

onde r o resto da diviso. Por exemplo:

23:7=c
23=c*9+r
23=3*7+2

Esta de nio nos ajuda a perceber o que acontece quando o divisor maior que o
dividendo, por exemplo:

5:18=c
5=c*18+r
5=0*18+5

portanto

5:18=0
5mod18=5
Aritmtica modular
http://blog.lambda3.com.br/2012/12/entendendodeverdadeacriptografiarsaparteii/

4/9

21/03/2016

Entendendo(deverdade)acriptografiaRSAParteII|BlogsdaLambda3

No dia a dia ns fazemos clculos em conjuntos numricos de tamanho in nito.


Mas, como poderamos fazer os mesmos clculos em um conjunto de tamanho nito?
Deixe eu explicar melhor:

13*9=117

Ok, at agora nada de mais. Mas, e se eu tivesse um conjunto que fosse de 0 a 22?
Vamos chamar o nosso conjunto de Z22.

Z22={0,1,2,...,22}

Temos um problema, 117 no existe no conjunto Z22. Agora, dentro do conjunto Z22,
como fazemos aquela conta? Simples, s pensarmos que o nosso conjunto funciona como
um relgio. No relgio, depois das 12 que seu valor mximo ele volta para o 1.
Seguindo a lgica, no Z22 quando passarmos de 22 voltamos para o 0.Para realizarmos uma
multiplicao modular seguimos os seguintes passos:
1. Realizamos a multiplicao comum

13*9=117

2. Calculamos o resto da diviso inteira do resultado pelo tamanho do conjunto

117mod22=7

No RSA as operaes modulares so extremamente importantes, principalmente a


exponenciao. Ela funciona de maneira bem parecida com a multiplicao, vamos ver um
exemplo (ainda em Z22):

4^3mod22=4*4*4mod22

portanto

64mod22=20
http://blog.lambda3.com.br/2012/12/entendendodeverdadeacriptografiarsaparteii/

5/9

21/03/2016

Entendendo(deverdade)acriptografiaRSAParteII|BlogsdaLambda3

Com estas de nies em mente, basta aplicar a seguinte frmula a cada letra:

c=m^emodn

onde e a chave pblica e m o valor numrico da letra. Adaptando para o nosso exemplo, ela
ca:

c=m^13mod697

Agora que j sabemos como, vamos cifrar uma mensagem? Este foi considerado o ano de Alan
Turing, pai da computao e grande criptolgo. Vamos cifrar seu nome:
T

19 ^ 13 mod 697

15

20 ^ 13 mod 697

692

17 ^ 13 mod 697

391

09 ^ 13 mod 697

501

13 ^ 13 mod 697

421

07 ^ 13 mod 697

176

Ok, ciframos o texto e obtivemos o seguinte cdigo:

15692391501421176

No prximo post vamos fazer o caminho oposto. Vamos calcular a chave privada e ver como
tornar um texto criptografado com nossa chave pblica legvel novamente. At semana que
vem!
Clique aqui para ler a parte III
Follow

Tweetar

2
Share

http://blog.lambda3.com.br/2012/12/entendendodeverdadeacriptografiarsaparteii/

6/9

21/03/2016

Entendendo(deverdade)acriptografiaRSAParteII|BlogsdaLambda3

Relacionado:

Entendendo (de verdade) a


criptogra a RSA
10 de dezembro de 2012
Em "Outros"

CRIPTOGRAFIA

MATEMTICA

16Comentrios

Entendendo (de verdade) a


criptogra a RSA Parte III
3 de janeiro de 2013
Em "Outros"

RSA

C#: Um suporte a funes


19 de maio de 2014
Em "Desenvolvimento"

SEGURANA

Lambda3

Recommend 2

Compartilhar

Entrar

OrdenarporMaisrecente

Jointhediscussion
Engnow 6mesesatrs

Muitobom!!!
Segueumexemplonaprtica!!!
http://g1.globo.com/Noticias/T...

Responder Compartilhar

francisco umanoatrs

ParabensFernando,materialbemlegal.Sumpequenodetalhequenalinha"23=c*9+r"
achoqocorretoseria"23=c*7+r",no?

Responder Compartilhar

CaioLorpa 2anosatrs

mtemquesermenorquen,n?

Responder Compartilhar

FernandoOliveira>CaioLorpa 2anosatrs

Porquepensaisto?Nomeparecequefaadiferenaseonmaiorqueom...

Responder Compartilhar

Evandro 2anosatrs

Umacorreo:oMDC(640,3)=3enoMDC(640,3)=1comomostrado.

Responder Compartilhar

http://blog.lambda3.com.br/2012/12/entendendodeverdadeacriptografiarsaparteii/

7/9

21/03/2016

Entendendo(deverdade)acriptografiaRSAParteII|BlogsdaLambda3

FernandoOliveira>Evandro 2anosatrs

OiEvandro:)
OMDCentre640e3iguala1...dumaconferidanoWolfran:
https://www.wolframalpha.com/i...

Responder Compartilhar

Guedes 2anosatrs

tenhoaschavescriadas.precisoassinarumtextocomachaveprivadaedeseguidafazero
encodingparab64.comofaoistocomvbnet?

Responder Compartilhar

CaioLorpa>Guedes 2anosatrs

Talvezissoajude:http://www.macoratti.net/vb_cr...
Nofinalzinhoelefaladeassinatura.EledumexemplodeBlowfish,parecequenesse
exemploeleusab64,seissoforumproblematambmpodeajudar.

Responder Compartilhar

lucas 2anosatrs

ondeartigo?issoumemaranhadodecpias.

Responder Compartilhar

FernandoOliveira>lucas 2anosatrs

Noentendi...

Responder Compartilhar

RodrigoConceio 2anosatrs

Caraca,muitomuitobom!estoulendootutocompulsivamentexD
1

Responder Compartilhar

FernandoOliveira>RodrigoConceio 2anosatrs

Obrigado!

Responder Compartilhar

DouglasWEB 2anosatrs

OlPessoal,
Alguempoderiamedizeralgumas/umaaplicaoquefizesseusorealdacriptografiaRSA?
Grato!

Responder Compartilhar

Miguel 3anosatrs

@FernandoOliveiraFernando,tudobom?
EstouprecisandodeumalgoritmoquecriptografeumvalornoPythoneoabranoC#.
Tenteiencontrarcontedosobreissoenoachei.Jliseumaterial(muitobom)paratentar
http://blog.lambda3.com.br/2012/12/entendendodeverdadeacriptografiarsaparteii/

8/9

21/03/2016

Entendendo(deverdade)acriptografiaRSAParteII|BlogsdaLambda3
Tenteiencontrarcontedosobreissoenoachei.Jliseumaterial(muitobom)paratentar
implementar,masestbastantedifcil.Vocpodemedarumaluz?
Obrigado.

Responder Compartilhar

JulianoMarcon 3anosatrs

Muitolegal!Estficandomuitoboaasrieemuitoexplicativo.Quemsabenopossafazer
umacontribuiocomaWikipediacomessecontedo?
1

Responder Compartilhar

FernandoOliveira>JulianoMarcon 3anosatrs

Valeu,Juliano!Eunotinhapensadonisto...quandoeuterminarasrievouvercomo
funcionaaediodaWikipdia.

Responder Compartilhar

http://blog.lambda3.com.br/2012/12/entendendodeverdadeacriptografiarsaparteii/

9/9

Você também pode gostar