Download - Criptografia Parte II
24.hacker
criptogrAfiarAAAAffffffifAAAffffifif aaptoptoptogggg
hackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhacker24 hackerhacker24242424 hackerhackerhackerhackerhackerhackerhacker2424242424.hacker24 hackerhackerhackerhackerhackerhackerhackerhacker2424 hacker24 hackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhacker24 hacker24..242424.hacker.hackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhacker24.hacker
Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia
hacker.25
Nesta continuação do
tutorial de criptogra-
fia iniciado na Hacker
17, falaremos de um
sistema criptográfico
de chave pública muito usado e relati-
vamente complexo: o RSA.
A sigla vem das iniciais dos nomes de
seus criadores, Ron Revista, Adi Shamir
e Len Adleman. Sua encriptação é forte-
mente baseada no problema matemáti-
co da fatoração de um número inteiro:
para inteiros suficientemente grandes,
ela é um problema bem complicado.
Como aconteceu na primeira parte do
tutorial, apresentamos uma boa dose
de matemática. Mas, por questão de
espaço, vamos remetê-lo várias vezes à
literatura para saber como os resultados
mais difíceis são demonstrados.
Criptografia MÁXIMO DIVISOR COMUMO cálculo do mdc de dois números na-
turais é outro tópico importante para
compreender o RSA, que consiste em
produzir uma chave de encriptação
multiplicando dois números primos
muito grandes. Multiplicar é fácil,
mas, como vimos anteriormente, o
problema é, dado um inteiro positivo,
descobrir uma fatoração dele.
Mas o que é o máximo divisor comum?
Dados inteiros a,b; dizemos que b di-
vide a, na representação b|a, se existe
um c inteiro tal que a = bc. Agora, se
temos a e b inteiros, o máximo divi-
sor comum de a e b é o mdc(a,b), é
o maior inteiro que divide simultâne-
amente a e b.
Então, um problema natural que surge
é, dados dois inteiros a,b, como calcu-
lar o máximo divisor comum deles?
O melhor método disponível é o
chamado algoritmo de Euclides e
consiste no seguinte: primeiro divi-
dimos a por b, obtendo o quociente
q1 e resto r1, portanto a = bq1 + r1; a
seguir, se r1 for não-nulo, tomamos
b e dividimos por r1, obtendo o quo-
ciente q2 e o resto r2; novamente, r2
for não-nulo, tomamos r1 e dividi-
mos por r2, e assim prosseguimos
sucessivamente. Dessa maneira,
temos que, como a seqüência de
quocientes ri é decrescente, o pro-
cesso pára (um algoritmo!) com um
último resto igual a zero, e o último
quociente é o máximo divisor co-
mum de a e b. Na verdade, para uma
demonstração matemática, consulte
as referências.
de matemática. Mas, por questão de
espaço, vamos remetê-lo várias vezes à
literatura para saber como os resultados
mais difíceis são demonstrados.
Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Criptografia Entenda de uma vez por todas como funciona o famoso RSA
por m4t4r13l
26.hacker
criptogrAfia
Como exemplo do método, considere os
inteiros 1395 e 30 e observe a figura 1.
*** adicionar a imagem figura1.png acima
deste apontador ***
Nesse diagrama, os dois primeiros ele-
mentos da linha superior são os números
de que queremos determinar o mdc. Ao
dividirmos 1395 por 30 obtemos o resto
15, copiamos o 15 na linha inferior (linha
de restos) e dividimos 30 por 15, obtendo
resto nulo; portanto, 15 é o máximo divisor
de 1395 e 30.
NÚMEROS PRIMOSTemos dois tipos de inteiros positivos:
os compostos e os primos. Um número
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 número inteiro positivo
p é primo se for divisível apenas por 1 e por
ele mesmo. Os primeiros números primos
são bem conhecidos: 2, 3, 5, 7, 11, ...
Os pontinhos “...” são propositais? Sim.
Eles indicam um fato milenar que Euclides
demonstrou.
Teorema: Existem infinitos números
primos.
Demonstração: consulte as referências
Os números primos são muito especiais,
como veremos mais adiante. A exemplo
de qualquer classificação científica de
objetos, temos uma pergunta natural em
relação aos números inteiros positivos.
Dado um inteiro positivo n, temos um
algoritmo de decisão – que define se
um número é primo ou não – para nos
informar se ele é composto ou primo?
Um algoritmo 100% eficiente não exis-
te, mas há um problema mais “leve”:
mapear todos os primos até um dado
inteiro n. Para isso, existe um método
bem conhecido.
CRIVO DE ERATÓSTENESEratóstenes 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 múl-
tiplos do primeiro número primo, que
é 2.
2 3 4* 5 6* 7 8* 9 10* 11 12* 13 14* 15 16*
17 18* 19 20*
Continuamos o processo marcando todos
os múltiplos do próximo primo, que é 3.
2 3 4* 5 6* 7 8* 9* 10* 11 12* 13 14* 15*
16* 17 18* 19 20*
O processo já acabou, pois, se continu-
armos com os próximos primos (7 e 11),
não conseguiremos marcar nenhum outro
número composto. Todos os compostos já
foram marcados, portanto, os números
primos nesse caso são:
2 3 5 7 11 13 17 19
De forma geral, o crivo de Eratóstenes con-
siste em ir marcando todos os múltiplos de
um dado primo. É claro que devemos saber
quais são os primeiros primos e, à medida
que n cresce, o crivo de Eratóstenes fica
mais trabalhoso, não sendo, portanto, um
critério prático.
Os algoritmos de decisão não param por
aqui. Há um método “força-bruta”, tam-
bém bem conhecido.
MÉTODO DA FATORAÇÃO DIRETANão é um algoritmo no sentido comum
da palavra (que termina em pouco tempo,
de preferência), algo que possa ser usado
em um computador de forma eficiente. A
seguir, apresentamos um exemplo prático
para ver como funciona.
***adicionar a imagem figura2.png acima
deste apontador ***
A figura fatora.png ilustra a decomposição
do número 1825 em seus fatores. O méto-
do consiste em procurar os primeiros intei-
ros que dividem 1825 e, sucessivamente, ir
dividindo os quocientes gerados, até que
cheguemos a um número primo. No caso,
obtemos 1825 = 5² x 73. Note que os fato-
res são números primos levados a potên-
cias adequadas. Isso é uma coincidência?
Não. Trata-se de um teorema famoso, o
autor é Euclides, mais uma vez.
Teorema (da fatoração única): Seja n um
inteiro positivo, então ele admite uma
única decomposição em fatores primos
(fatoração!). A decomposição de n é dada
pela expressão do seguinte tipo:
n = p1x1p2
x2...pkxk
Demontração: acesse as referências
O teorema da fatoração diz que, de certa
maneira, os números primos funcio-
nam como “elementos de construção”,
1395
15
30
0
15 0
1825
365
73
0
5
5
73
hacker.27
que ilustram as tabelas das operações
em Z/3Z:
Todo este tópico tem sido muito teóri-
co, não? Vamos a uma “aplicação”. Na
matemática do ensino fundamental, nos
blocos elementares para todos os
números inteiros.
A questão da fatoração de um número
inteiro é importante do ponto de vista prá-
tico (atualmente) porque o criptosistema
RSA é fortemente baseado na dificuldade
prática de se fatorar números inteiros
muito grandes. Só para motivar o leitor,
a chave criptográfica do RSA (a chave
pública) é construídamultiplicando-se dois
números primos ímpares muito grandes, a
questão é que revela-se apenas o produto
e não os seus fatores, os quais são neces-
sários para se descobrir a chave privada
(que fornece a decriptação); ao final deste
trabalho, faremos um resumo da criptoa-
nálise do RSA, citando os métodos mais
recentes para quebrar o sistema.
ARITMÉTICA MÓDULO NSe alguém dissesse a você que 21+10=7, o
que você faria? É bem provável que pen-
saria que a pessoa está com um parafuso
solto, mas não é bem assim. Com certeza,
você está pensando em cálculos com os
números usuais (reais ou racionais, por
exemplo).
Mas existe uma situação em que a
equação citada faz sentido? Claro que
sim! O mundo ocidental dividiu arbitra-
riamente o dia em 24 horas. Podemos
interpretar a igualdade 21+10=7 como
“agora são nove da noite, daqui a dez
horas serão sete da manhã”. Essa
“aritmética cíclica” das horas mos-
tra que a validade de uma equação
matemática depende do contexto; a
chamada Aritmética Módulo n é um
exemplo de um ambiente matemático
no qual equações como as que citamos
podem ocorrer.
Relembrando a primeira parte do nosso
tutorial, dado o conjunto Z dos números
inteiros e n > 1 inteiro, definimos Z/nZ
como sendo o conjunto
Z/nZ = { [x] | x ∈ Z}, em que [x] = { x
+ nk | k ∈ Z }, ou seja, [x] é uma classe
de inteiros que possuem o mesmo resto
quando da divisão (inteira!) por n.
É conhecido na literatura matemática
que o conjunto Z/nZ, quando munido
das operações de adição e produto de
classes dadas por
[x] + [y] = [x+y]
[x][y] = [xy]
obedece às seguintes propriedades:
Caso da adição
i) [x] + [y] = [y] + [x] (propriedade co-
mutativa)
ii)([x] + [y]) + [z] = [x] + ([y] + [z]) (pro-
priedade associativa)
iii) ∃ [0] ∈ Z/nZ, tal que [x] + [0] = [x]
,∀ [x] ∈ Z/nZ (existência do elemento
neutro)
iv)∀ [x] ∈ Z/nZ ∃ [y], tal que [x] + [y] =
[0] (existência do inverso)
Caso do produto
i)[x] [y] = [y] [x] (propriedade comutativa)
ii)([x][y])[z] = [x]([y][z]) (propriedade
associativa)
iii)∃ [1] ∈ Z/nZ, tal que [x] [1] = [x] ,∀
[x] ∈ Z/nZ
Essas propriedades dizem que Z/nZ
possui uma estrutura natural de um anel,
que nada mais é do que um ambiente
matemático em que podemos operar de
uma maneira muito semelhante à dos
números reais. No caso particular em
que n = p, com p primo, temos que, no
caso do produto, há uma propriedade
adicional válida:
iv) ∀ [x] ∈ Z/nZ ∧ [x] ≠ [0], ∃ [y] tal que
[x][y] = [1] (existência do inverso)
Uma pergunta natural: qual o tamanho de
Z/nZ? Ou seja, quantos elementos Z/nZ
possui? A resposta está no resultado que
condensa tudo o que dissemos até aqui
sobre Z/nZ.
Teorema: O conjunto Z/nZ, munido das
operações de adição e produto de classes,
é um anel comutativo com unidade e pos-
sui exatamente n elementos.
Demontração: consultar referências
Exemplos de Z/nZ:
1)Z/2Z = {[0],[1]}
2)Z/3Z = {[0],[1],[2]}
Cálculos em Z/3Z :
[1] + [2] = [1+2] = [3] = [0]
[2][2] = [2 x 2] = [4] = [1]
A seguir, mostraremos dois diagramas +
[0]
[1]
[2]
[0]
[0]
[1]
[2]
[2]
[2]
[0]
[1]
[1]
[1]
[2]
[0]
*
[0]
[1]
[2]
[0]
[0]
[0]
[0]
[2]
[0]
[2]
[1]
[1]
[0]
[1]
[2]
28.hacker
criptogrAfia
ensinam que um número inteiro é divisível
por 2 se o algarismo das unidades for par.
Vamos mostrar o por que essa afirmação
é verdadeira. Dado um número natural
n, ele possui uma decomposição na base
decimal, ou seja:
n = A o + A 1 ( 1 0 ) ¹ + A 2 ( 1 0 ) ²
+...+Ak(10)k
Tomando as classes em Z/Z2 de ambos
os membros da equação, temos:
n = A o + A 1 [ 1 0 ] ¹ + A 2 [ 1 0 ] ²
+...+Ak[10]k
Mas [10]m = [0] (m=1,2,3...,k) e disso
obtemos:
[n] = [Ao]
Portanto, n é divisível por 2 se e somente
se o algarismo das unidades Ao for par.
A seguir, apresentaremos um conjunto de
teoremas que formam o suporte matemá-
tico para o RSA.
INDUÇÃO FINITA E OSTEOREMAS DE FERMATHá situações em matemática em que se
procura um resultado geral a partir de
uma sequência de afirmações particulares
válidas. Como exemplo, considere: seja a
seqüência de números naturais 1, 2, 3, 4,
... n; a soma desses termos é dada pela
fórmula Sn = n(n+1)/2
Se tomarmos em seqüência n = 1, 2, 3,
... e substituirmos na fórmula acima,
encontraremos:
S1 = 1
S2 = 3
S3 = 6
...
Começamos a acreditar na validade da
fórmula, mas “acreditar” em ciência não
é suficiente, é preciso provar!
Nesse caso específico, a técnica que usare-
mos chama-se “Princípio da Indução Finita”.
A idéia é que se temos uma afirmação que
depende de um número natural n (denota-
remos-a por P(n)) e mostramos que ela é
válida para um dado k, o princípio afirma
que, se P(k) é verdadeira, então P(k+1) é
verdadeira, portanto, de forma “indutiva”
temos que P(n) é válida para todo n ≥ k.
Voltando ao exemplo, vemos que para k
= 1 a fórmula da soma é válida, portanto,
já temos nossa hipótese de indução.
Temos:
S(n+1) = Sn + n+1 = n(n+1)/2 + n+1 =
(n+1)(n+2)/2
Porque “viajamos” com essa idéia de prin-
cípio da Indução Finita? O motivo é que
precisamos desse conceito para mostrar
o seguinte teorema, fundamental (vamos
usá-lo posteriormente).
TEOREMA DE FERMAT Seja p um número primo e a um número
inteiro. É válida a seguinte equação:
a p = a (mod p)
Esboço de demonstração: tomamos a
equação a ser demonstrada como sendo
a afirmação P(n), ou seja, np = n (mod
p) e para n=1 vemos que é trivialmente
válida. Portanto, a hipótese de indução já
está satisfeita.
Então, precisamos desenvolver a expres-
são (n+1)p (mod p), o que é uma tarefa fácil
se usarmos o seguinte fato:
Se p é um número primo e a e b inteiros,
a equação a seguir é válida:
(a+b) p = a p + bp (mod p)
Demonstração: ver referências
Usando o resultado anterior, observamos
que (n+1)p = nP + 1 = n + 1 (mod p), por-
tanto, provamos o teorema de Fermat
para o caso de a > 0 . O caso a < 0 é
semelhante, deixamos como exercício
para você, caro leitor.
Como caso particular do Teorema de
Fermat, temos o próximo.
TEOREMA DE FERMAT (PEQUENO)Seja p um número primo e a um inteiro,
tal que p não divide a. Então:
ap-1 = 1 (mod p)
Demonstração: sabemos do teorema de
Fermat que ap = a (mod p), mas, se p
não divide a , então mdc(p,a) = 1. Isso
significa que a é invertível em Z/pZ.
Multiplicando ambos os membros da
equação pelo inverso b de a em Z/pZ,
temos que:
bap = ab ⇒ ap-1 = 1 (mod p)
SISTEMAS DE CONGRUÊNCIASQuando consideramos a equação 2x =
8, é imediato perceber que a solução é
x = 4; mas assumimos, neste caso, que
trata-se de uma equação no domínio
dos números reais. Pergunta possível:
e se tomássemos a equação em um dos
conjuntos Z/Zn, isso teria sentido?
Claro que sim, mas a complexidade do
problema aumenta. Estaríamos sujeitos
às restrições da aritmética modular.
Vendo dessa maneira, encaremos a
equação [2x] =[8] em Z/3Z, ou seja,
2x = 8 (mod 3) (essa equação é um
exemplo do que chamamos de equação
de congruência).
Como mdc(2,3) = 1, temos que [2] é in-
vertível em Z/3Z, e o inverso é o próprio
[2], em que [x] = [1] (mod 3).
Mas essa é a situação mais simples. No caso
hacker.29
de uma equação ax = b (mod n), tal que a|n,
não poderíamos resolver o problema dire-
tamente, pois o elemento a não possuiria
um inverso em Z/nZ. Para um tratamento
completo, recomendamos as referências.
O resultado que nos interessa é o chamado
teorema chinês do resto, que trata de um
sistema de congruências.
TEOREMA CHINÊS DO RESTOSejam m e n inteiros positivos e primos
entre si (mdc(m,n)=1). Então, o sistema
x = a (mod m)
x = b (mod n)
sempre possui uma única solução em
Z/mnZ.
Demonstração: ver referências
FUNÇÃO ϕ DE EULERComo vimos anteriormente, para cada n
inteiro positivo, temos associado um siste-
ma de aritmética modular Z/nZ. Um caso
muito interessante desse objeto é quando
temos n = p, um número primo. Nesse
caso, Z/nZ é um exemplo de um corpo,
um objeto matemático que se comporta
do mesmo modo que os números reais
(podemos adicionar, subtrair, multiplicar e
dividir para todo elemento não-nulo).
Mas, se n não é primo, podemos per-
guntar quantos elementos de Z/nZ são
invertíveis. A resposta para essa pergunta
é dada pela chamada função ϕ de Euler
(ou função totiente), que é definida da
seguinte maneira:
ϕ : N – {0} ⇒ N – {0}
ϕ (n) = # ({m ∈ N-{0}, 1≤m ≤ n | mdc
(m,n) = 1})
Ou seja, a função de Euler calcula, dado um
n, quantos inteiros positivos m menores
do que n são 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 função de Euler são fun-
damentais para nosso estudo do RSA.
Fato: Para p primo temos que ϕ(p) = p-1
Demonstração: Observando a equação
mdc (m,p) = 1, temos, pela definição de
número primo, que todos os m menores
que p são primos com p. Daí conseguimos
o resultado.
Teorema: Se m e n são inteiros positivos,
tais que mdc(m,n) = 1, então
ϕ(mn) =ϕ(m)ϕ(n)
Demonstração: consulte as referências
Teorema de Euler: Sejam n > 0 e a números
inteiros. Se mdc(a,n) = 1, então:
aϕ(n) = 1 (mod n)
Demonstração: consulte as referências
E agora, finalmente...
O SISTEMA CRIPTOGRÁFICO RSAO RSA é definido desta seguinte maneira:
dados dois números primos ímpares p e q,
grandes e próximos, efetuamos a seguinte
seqüência de passos:
1) Calculamos n = pq e ϕ(n) = (p-1)(q-1)
2) Escolhemos um número inteiro e, com 1
< e < ϕ(n), tal que mdc (e, ϕ(n)) = 1.
Usamos o algoritmo de Euclides extendi-
do (ver referências) para calcular o único
inteiro d, 1 < d < ϕ(n), tal que ed = 1 (mod
ϕ(n)).
4) A chave pública é o par (n,e).
5) A chave privada é d.
E como encriptamos / decriptamos uma
mensagem? A seqüência de regras nos
explicará.
A) ENCRIPTAÇÃO1) Tomamos uma chave pública (n,e).
2) Representamos a mensagem como um
inteiro m no intervalo [0,n-1].
3) Calculamos c = me (mod n). ( Esta é a
função de encriptação Ee!)
4) Enviamos a mensagem.
B) DECRIPTAÇÃO1) Tomamos a chave privada d e calcula-
mos m = cd (mod n). (Esta é a função de
decriptação Dd!)
Note que o RSA encripta apenas números
em um dado intervalo, então, se quiser-
mos encriptar um texto convencional, é
preciso primeiro fazer uma encriptação
do tipo letra ⇔ número para podermos
aplicar o processo. Outro detalhe a ser
observado é que a encriptação RSA é
lenta para p e q grandes; por este motivo,
em geral, o RSA é usado para encriptar
chaves de um sistema simétrico, sendo
um método seguro para distribuir tais
tipos de chaves.
Vejamos a seguir exemplos que ilustram
o que acabamos de dizer.
Exemplo 1: Encriptação numérica pura
Tomemos p = 19 e q = 31. Então:
1) Calculamos n = 589 e ϕ(n) = (p-1)(q-1)
= 18 x 30 = 540
2) Escolhemos um número inteiro e, com
1 < e < 540; tal que mdc(e, 5 40) = 1.
Fazendo e = 7, vemos que as condições
são satisfeitas.
3) Utilizamos o algoritmo de Euclides ex-
tendido para calcular o único inteiro d,
1 < d < 540 , tal que ed = 1 (mod 540).
No nosso caso, 7d= 1 (mod 540) (ver
30.hacker
criptogrAfia
referências).
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 pública é o par (n,e) =
(589,7).
5) A chave privada é d = 463.
Como exemplo de encriptação puramente
numérico, 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 es-
clarecimentos. Efetuamos boa parte dos
cálculos modulares usando a calculadora
kcalc do ambiente KDE; o cálculo de m,
acima, poderia também ser feito com a
kcalc, o problema é que, como qualquer
calculadora, assim que ela entra na nota-
ção científica, a parte inteira é truncada!
Com certeza, o resultado fornecido ao final
dos cálculos estará errado!
Vamos calcular m manualmente. O truque
é o seguinte:
463 = 256 + 128 + 64 + 8 + 4 + 2 + 1 (ter-
mos da decomposição binária de 463!)
Então:
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)
180128 = 5 (mod 589)
180256 = 25 (mod 589)
Portanto:
180463 = 25 x 5 x 180 x 36 x 25 x 5 x 180
= 18225000000 = 25 (mod 589)
Exemplo 2: Encriptação de texto alfanu-
mérico simples
No exemplo 1, fizemos a encriptação de
um número. Como podemos encriptar
textos usuais com o RSA? Necessaria-
mente, precisamos de uma pré-encrip-
tação adicional, a associação letra ⇔
número que já citamos. Vamos adotar
a primeira encriptação, dada pela tabela
que segue:
A B C D
E F G H
I J K L
M N O P
Q R S T
U V W X
Y Z
10 11 12 13
14 15 16 17
18 19 20 21
22 23 24 25
26 27 28 29
30 31 32 33
34 35
Como exemplo de encriptação de palavras,
vamos encriptar a palavra DEUS,utilizando
a tabela acima. Temos:
D ⇒ 13
E ⇒ 14
U ⇒ 30
S ⇒ 28
Portanto, DEUS ⇒ 13143028
A seguir, destruiremos qualquer vestígio
lingüístico aparente. Para isso, quebra-
remos a seqüência numérica obtida em
blocos. Então:
13143028 ⇒ 131-430-28
Note que até mesmo a identificação letra
⇔ número foi perdida. Esse procedimento
aumenta a encriptação.
Finalmente, vamos usar o RSA; tomemos
os dados do Exemplo 1. Com isso, temos
de calcular:
c1 = m17 (mod 589) = 1317 = 214 (mod
589)
c2 = m27 (mod 589) = 4307 = 449
(mod 589)
c3 = m37 (mod 589) = 287 = 479
(mod 489)
Reunindo toda a seqüência de encripta-
ções, temos:
DEUS ⇒ 13143028 ⇒ 131-430-28 ⇒
214-449-479
Para recuperar a palavra DEUS, basta re-
verter as funções de encriptação. Apesar
da aparente complexidade dos cálculos,
a escolha dos primos p e q foi apenas
para propósitos didáticos. Em aplicações
práticas, os valores escolhidos são real-
mente grandes, por exemplo, o RSA-155
tem o n da chave pública igual a:
n = 10941738641570527421809707
3220403576120037329454492059
90913842131476349984288934784
71799725789126733249762575289
97818337970765372440271467435
31593354333897
Esse RSA foi quebrado (http://ftp.cwi.nl/
herman/GNFSrecords/GNFS-512) através
da técnica do crivo de corpo numérico.
ABCDEFGHIJKLM
10
11
12
13
14
15
16
17
18
19
20
21
22
NOPQRSTUVWXYZ
23
24
25
26
27
28
29
30
31
32
33
34
35
hacker.31
Seus fatores são os seguintes:
p = 102639592829741105772054196
5739916759007165678080380668
03341933521790711307779
q = 106603488380168454820
92722036 0 01287867 9207 958
5 7 5 9 8 92 9 1 5 2 2 2 7 0 6 0 8 2 37 1 9 3
062808643
Isso quer dizer que todo o nosso es-
tudo até aqui foi em vão? De maneira
alguma! A chave pública do RSA-155
foi quebrada (ou seja, encontrados p
e q!!!) utilizando um cluster de 160
workstations Sun que rodou durante
três meses e meio! Ou seja, ignore
os boatos da Web que afirmam que
um “hacker” pode decodificar uma
mensagem que enviamos usando um
desses RSA...
PORQUE O RSA FUNCIONA?A demonstração matemática de que o
RSA é, de fato, um sistema criptográ-
fico é baseada em alguns dos teoremas
que apresentamos ao longo do texto,
mais exatamente o pequeno teorema de
Fermat, o teorema de Euler e o teorema
chinês do resto.
Vamos à demonstração propr ia-
mente dita :
Sejam p e q (n = pq) dois primos ímpa-
res diferentes e grandes. Tomemos
0 < m < n= pq, um dos componentes
da mensagem que queremos encriptar.
Como já dissemos, devemos escolher
um inteiro positivo e tal que mdc (e,
ϕ(n)) = 1. Com essa escolha, sabemos
que e é invertível, portanto, existe um
inteiro d tal que de = 1 (mod ϕ(n)) (ver
adendo no fim desta matéria)
Basta mostrar que as funções Ee: Zn
→ Zn e Dd: Zn → Zn são inversas uma
da outra.
Por definição, c = Ee(m) = me. Então
temos:
c = me --> cd = mde
Agora, como de = 1 (mod ϕ(n)), temos que
de = 1 + k(p-1)(q-1). Levando essa expres-
são na equação anterior, obtemos:
cd = mde = m1 + k(p-1)(q-1) = m(m(p-1)(q-1)k)
Agora, há dois casos para analisarmos
1) mdc(m,p) = 1
Pelo pequeno teorema de Fermat, temos
que mp-1 = 1 (mod p). Então:
mde = m(m(p-1)(q-1)k) = m((1)(q-1)k}= m(mod
p)
--> mde = m (mod p)
2) p divide m
Neste caso, m é composto, mas a equação
mde = m (mod p) continua válida, pois
ambos os termos da equação são iguais
a 0 (mod p).
De forma análoga, temos que mde = m
(mod q). Agora, pelo teorema chinês do
resto, obtemos mde = m (mod pq).
Portanto, Ee o Dd = Dd o Ee = I, ou seja,
as funções são inversas uma da outra.
Adendo: demonstração de que e é inver-
tível em Z/Z(p-1)(q-1).
De fato, dado e, devemos encontrar um
d tal que ed = 1 (mod ϕ(n)). Mas, pelo
teorema de Euler, eϕ(n) = 1 (mod ϕ(n)),
disso obtemos d= eϕ(n) -1}(mod ϕ(n)). Essa
escolha resolve o problema, pois ed = eeϕ(n)
-1 = 1 (mod ϕ(n)).
PARA SABER MAISIntrodução à criptografia por Johannes A. Buchmann
Editora Berkeley – 2002
Números inteiros e criptografia RSA
por S. C. Coutinho
Instituto Nacional de Matemática
Pura e Aplicada – 2003
Handbook of Applied Cryptographypor A. Menezes, P. van Oorschot,
and S. Vanstone, CRC Press, 1996
link: http://www.cacr.math.uwater-
loo.ca/hc
Um conto de dois crivos
por Carl Pomerance – http://www.
ams.org/notices/199612/pomeran-
ce.pdf
Review sobre o criptosistema RSA
http://www.geometer.org/mathcir-
cles/RSA.pdf
Communications Security for the Twenty-
first century
The advance encryption system
por Susan Landau – http://www.
ams.org/notices/200004/fea-lan-
dau.pdf
,
. Essa
d = eeϕ(n)
hackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhacker....3131313131313131
continua válida, pois
ambos os termos da equação são iguais
Handbook of Applied Cryptographypor A. Menezes, P. van Oorschot,
and S. Vanstone, CRC Press, 1996
link: http://www.cacr.math.uwater-
Um conto de dois crivos
por Carl Pomerance – http://www.
ams.org/notices/199612/pomeran-
Review sobre o criptosistema RSA
http://www.geometer.org/mathcir-
cles/RSA.pdf
Communications Security for the Twenty-
first century
= m
. Agora, pelo teorema chinês do
http://www.geometer.org/mathcir-
Communications Security for the Twenty-
first century
The advance encryption system
por Susan Landau
ams.org/notices/200004/fea-lan-
dau.pdf
Communications Security for the Twenty-
The advance encryption system
por Susan Landau – http://www.
ams.org/notices/200004/fea-lan-