criptografia parte ii

8
24.hacker criptogrAfia r A A A f f f f f f f A A A f f f f i f f a a o o o g g g g 24.hacker Criptog r

Upload: jose-antonio-silva-neto

Post on 11-Apr-2016

6 views

Category:

Documents


1 download

DESCRIPTION

Artigo sobre criptografia

TRANSCRIPT

Page 1: 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

Page 2: Criptografia Parte II

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

Page 3: Criptografia Parte II

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

Page 4: Criptografia Parte II

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]

Page 5: Criptografia Parte II

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

Page 6: Criptografia Parte II

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

Page 7: Criptografia Parte II

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

Page 8: Criptografia Parte II

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-