Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ptogg rAAfi
pto
fia
g
o
t
p
i
r
C
24..hacker
24
24.hacker
.hacker
a
i
f
a
gr
por m4t4r13l
Entenda de uma vez por todas como funciona o famoso RSA
esta continuao do
tutorial de criptografia iniciado na Hacker
17, falaremos de um
sistema criptogrfico
de chave pblica muito usado e relativamente complexo: o RSA.
A sigla vem das iniciais dos nomes de
seus criadores, Ron Revista, Adi Shamir
e Len Adleman. Sua encriptao fortemente baseada no problema matemtico da fatorao de um nmero inteiro:
para inteiros suficientemente grandes,
ela um problema bem complicado.
Como aconteceu na primeira parte do
tutorial, apresentamos uma boa dose
de matemtica. Mas, por questo de
espao, vamos remet-lo vrias vezes
literatura para saber como os resultados
mais difceis so demonstrados.
hacker.25
criptogrAfia
Como exemplo do mtodo, considere os
inteiros 1395 e 30 e observe a figura 1.
1395
30
15
NMEROS PRIMOS
Temos dois tipos de inteiros positivos:
os compostos e os primos. Um nmero
inteiro a composto se puder ser fatorado
(decomposto!) em um produto de outros
dois inteiros diferentes de 1.
Por exemplo, 18 composto, pois 18
= 2 x 9.
Por outro lado, um nmero inteiro positivo
p primo se for divisvel apenas por 1 e por
ele mesmo. Os primeiros nmeros primos
so bem conhecidos: 2, 3, 5, 7, 11, ...
Os pontinhos ... so propositais? Sim.
Eles indicam um fato milenar que Euclides
demonstrou.
Teorema: Existem infinitos nmeros
primos.
Demonstrao: consulte as referncias
CRIVO DE ERATSTENES
Eratstenes inventou um crivo que leva
seu nome. Vejamos um exemplo bem
simples de seu funcionamento: tomemos
n = 20 e listemos todos os inteiros at 20
(menos o 1).
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
19 20
Primeiro, marquemos todos os mltiplos do primeiro nmero primo, que
2.
1825
365
73
73
ARITMTICA MDULO N
Se algum dissesse a voc que 21+10=7, o
que voc faria? bem provvel que pensaria que a pessoa est com um parafuso
solto, mas no bem assim. Com certeza,
voc est pensando em clculos com os
nmeros usuais (reais ou racionais, por
exemplo).
Mas existe uma situao em que a
equao citada faz sentido? Claro que
sim! O mundo ocidental dividiu arbitrariamente o dia em 24 horas. Podemos
interpretar a igualdade 21+10=7 como
agora so nove da noite, daqui a dez
horas sero sete da manh. Essa
aritmtica cclica das horas mostra que a validade de uma equao
matemtica depende do contexto; a
chamada Aritmtica Mdulo n um
exemplo de um ambiente matemtico
no qual equaes como as que citamos
podem ocorrer.
Relembrando a primeira parte do nosso
tutorial, dado o conjunto Z dos nmeros
inteiros e n > 1 inteiro, definimos Z/nZ
como sendo o conjunto
Z/nZ = { [x] | x Z}, em que [x] = { x
[0]
[1]
[2]
[0]
[0]
[1]
[2]
[1]
[1]
[2]
[0]
[2]
[2]
[0]
[1]
[0]
[1]
[2]
[0]
[0]
[0]
[0]
[2]
[1] operaes
que ilustram
as[0]
tabelas das
[1]
em Z/3Z:
[2]
[0]
[2]
[1]
Todo este tpico tem sido muito terico, no? Vamos a uma aplicao. Na
matemtica do ensino fundamental, nos
hacker.27
criptogrAfia
ensinam que um nmero inteiro divisvel
por 2 se o algarismo das unidades for par.
Vamos mostrar o por que essa afirmao
verdadeira. Dado um nmero natural
n, ele possui uma decomposio na base
decimal, ou seja:
n = A o + A1( 1 0 ) + A 2( 1 0 )
+...+A k (10) k
Tomando as classes em Z/Z2 de ambos
os membros da equao, temos:
n = A o + A1[ 1 0 ] + A 2[ 1 0 ]
+...+A k [10] k
Mas [10] m = [0] (m=1,2,3...,k) e disso
obtemos:
[n] = [Ao]
Portanto, n divisvel por 2 se e somente
se o algarismo das unidades Ao for par.
A seguir, apresentaremos um conjunto de
teoremas que formam o suporte matemtico para o RSA.
INDUO FINITA E OS
TEOREMAS DE FERMAT
H situaes em matemtica em que se
procura um resultado geral a partir de
uma sequncia de afirmaes particulares
vlidas. Como exemplo, considere: seja a
seqncia de nmeros naturais 1, 2, 3, 4,
... n; a soma desses termos dada pela
frmula Sn = n(n+1)/2
Se tomarmos em seqncia n = 1, 2, 3,
... e substituirmos na frmula acima,
encontraremos:
Porque viajamos com essa idia de princpio da Induo Finita? O motivo que
precisamos desse conceito para mostrar
o seguinte teorema, fundamental (vamos
us-lo posteriormente).
TEOREMA DE FERMAT
SISTEMAS DE CONGRUNCIAS
a p = a (mod p)
Esboo de demonstrao: tomamos a
equao a ser demonstrada como sendo
a afirmao P(n), ou seja, np = n (mod
p) e para n=1 vemos que trivialmente
S1 = 1
S2 = 3
S3 = 6
...
28.hacker
FUNO DE EULER
Como vimos anteriormente, para cada n
inteiro positivo, temos associado um sistema de aritmtica modular Z/nZ. Um caso
muito interessante desse objeto quando
temos n = p, um nmero primo. Nesse
caso, Z/nZ um exemplo de um corpo,
um objeto matemtico que se comporta
do mesmo modo que os nmeros reais
(podemos adicionar, subtrair, multiplicar e
dividir para todo elemento no-nulo).
Mas, se n no primo, podemos perguntar quantos elementos de Z/nZ so
invertveis. A resposta para essa pergunta
dada pela chamada funo de Euler
(ou funo totiente), que definida da
seguinte maneira:
: N {0} N {0}
(n) = # ({m N-{0}, 1m n | mdc
(m,n) = 1})
Ou seja, a funo de Euler calcula, dado um
n, quantos inteiros positivos m menores
do que n so tais que mdc(m,n) = 1.
Exemplos:
(2) = #({1}) = 1
(3) = #({1,2}) = 2
(4) = #({1,3}) = 2
(5) = #({1,2,3,4}) = 4
(6) = #({1,5}) = 2
Dois resultados da funo de Euler so fundamentais para nosso estudo do RSA.
Fato: Para p primo temos que (p) = p-1
Demonstrao: Observando a equao
mdc (m,p) = 1, temos, pela definio de
nmero primo, que todos os m menores
que p so primos com p. Da conseguimos
o resultado.
Teorema: Se m e n so inteiros positivos,
tais que mdc(m,n) = 1, ento
(mn) =(m)(n)
Demonstrao: consulte as referncias
Teorema de Euler: Sejam n > 0 e a nmeros
inteiros. Se mdc(a,n) = 1, ento:
a (n) = 1 (mod n)
Demonstrao: consulte as referncias
E agora, finalmente...
A) ENCRIPTAO
1) Tomamos uma chave pblica (n,e).
2) Representamos a mensagem como um
inteiro m no intervalo [0,n-1].
3) Calculamos c = me (mod n). ( Esta a
funo de encriptao Ee!)
4) Enviamos a mensagem.
B) DECRIPTAO
1) Tomamos a chave privada d e calculamos m = cd (mod n). (Esta a funo de
decriptao Dd!)
Note que o RSA encripta apenas nmeros
em um dado intervalo, ento, se quisermos encriptar um texto convencional,
preciso primeiro fazer uma encriptao
do tipo letra nmero para podermos
aplicar o processo. Outro detalhe a ser
observado que a encriptao RSA
lenta para p e q grandes; por este motivo,
em geral, o RSA usado para encriptar
chaves de um sistema simtrico, sendo
um mtodo seguro para distribuir tais
tipos de chaves.
Vejamos a seguir exemplos que ilustram
o que acabamos de dizer.
Exemplo 1: Encriptao numrica pura
Tomemos p = 19 e q = 31. Ento:
1) Calculamos n = 589 e (n) = (p-1)(q-1)
= 18 x 30 = 540
2) Escolhemos um nmero inteiro e, com
1 < e < 540; tal que mdc(e, 5
40) = 1.
Fazendo e = 7, vemos que as condies
so satisfeitas.
3) Utilizamos o algoritmo de Euclides extendido para calcular o nico inteiro d,
1 < d < 540 , tal que ed = 1 (mod 540).
No nosso caso, 7d= 1 (mod 540) (ver
hacker.29
criptogrAfia
referncias).
Para encontrar d, precisamos encontrar o
inverso de 7 em Z/Z540. Como 7 x 463 =
3241 = (540 x 6) + 1, temos d = 463.
4) A chave pblica o par (n,e) =
(589,7).
5) A chave privada d = 463.
Como exemplo de encriptao puramente
numrico, consideremos m = 25 como
sendo a mensagem de texto comum.
Portanto, a mensagem encriptada
c = 257 (mod 589) =180
Para reverter o processo, calculamos m =
180463 (mod 589).
Aqui, precisamos apresentar alguns esclarecimentos. Efetuamos boa parte dos
clculos modulares usando a calculadora
kcalc do ambiente KDE; o clculo de m,
acima, poderia tambm ser feito com a
kcalc, o problema que, como qualquer
calculadora, assim que ela entra na notao cientfica, a parte inteira truncada!
Com certeza, o resultado fornecido ao final
dos clculos estar errado!
Vamos calcular m manualmente. O truque
o seguinte:
463 = 256 + 128 + 64 + 8 + 4 + 2 + 1 (termos da decomposio binria de 463!)
Ento:
180256 + 128 + 64 + 8 + 4 + 2 + 1 = 180256 x 180128 x
18064 x 1808 x 1804 x 1802 x 1801
Agora:
1801 = 180 (mod 589)
1802 = 5 (mod 589)
1804 = 25 (mod 589)
1808 = 36 (mod 589)
18016 = 118 (mod 589)
18032 = 377 (mod 589)
18064 = 180 (mod 589)
30.hacker
A
E
I
M
Q
U
Y
10
14
18
22
26
30
34
B
A 10
F
B 11
J
C 12
N
D 13
R
E 14
V
F 15
Z
G 16
11
H 17
15
I
18
19
J
19
23
K 20
27
L 21
31
M 22
35
C
G
K
O
S
W
12
16
20
24
28
32
D
N 23
H
O 24
L
P 25
P
Q 26
T
R 27
X
S 28
T 29
13
U 30
17
V 31
21
W 32
25
X 33
29
Y 34
33
Z 35
28 7 = 479
c = me --> cd = mde
Isso quer dizer que todo o nosso estudo at aqui foi em vo? De maneira
alguma! A chave pblica do RSA-155
foi quebrada (ou seja, encontrados p
e q!!!) utilizando um cluster de 160
workstations Sun que rodou durante
trs meses e meio! Ou seja, ignore
c =m =m
de
1 + k(p-1)(q-1)
= m(m
(p-1)(q-1)k
Introduo criptografia
por Johannes A. Buchmann
Editora Berkeley 2002
1) mdc(m,p) = 1
Pelo pequeno teorema de Fermat, temos
2) p divide m
Neste caso, m composto, mas a equao
mde = m (mod p) continua vlida, pois
ambos os termos da equao so iguais
a 0 (mod p).