Criptografia de Dados
Recursos Computacionais
Álvaro Degas
[email protected]
Roteiro
•
•
•
•
Introdução
Problemas
Conceitos
Criptografia
– chave privadas
– Chave pública
• Conclusões
Introdução
• O que é Criptografia
– Kriptos (Grego): Esconder
– Grapho (Grego): Escrita
– Kripto Grapho: Esconder Escrita
• A criptografia viabiliza a troca de
informações sem que haja o
comprometimento do sigilo
Introdução
• “Arte de tornar incompreensível, com
observância de normas especiais designadas
numa cifra de código, o texto de uma
mensagem escrita com clareza” - Aurélio
• Talvez seja tão antiga quanto a própria
escrita
Introdução
• “A mensagem é sua. Particular, privativa.
Ninguém tem o direito de bisbilhotar” –
Guia de Referência rápida do PGP
• PGP – Prety Good Privacy: Software de
criptografia multi-plataforma – Networks
Associates inc.
Introdução
• Criptografia usada por Júlio César (Imperador de
Roma - 60 a.C.):
– A chave utilizada era muito simples: desloca-se o alfabeto 3
letras e troca-as entre si.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
DEFGHIJKLMNOPQRSTUVWXYZABC
• Por exemplo, se ele quisesse enviar "Veni, vidi, vici",
qual seria a mensagem criptografada?
Conceitos
• Definições
– Mensagem: A informação que se deseja enviar
– Participantes: O Emissor e o Receptor da
mensagem
– Chaves: Os métodos de se criptografar e
decriptografar mensagens
Chaves de Criptografia
• Registros Irrecuperáveis (não descriptografáveis)
• Chaves Privadas
• Chaves Públicas
• Criptografar: Aplicar sobre a mensagem M uma
função F resultando num objeto C
“incompreensível”
• C = F(M)
Registros Irrecuperáveis
• Pode-se criptografar mas não se pode descriptografar
• Etimologicamente não se trata de
“criptografia”
• Conceito: Uma Mensagem M e uma função
F(M) |  F-1(M)
Registros Irrecuperáveis
• Exemplo:
• Converte M em um número grande (128
bits no mínimo)
• “Enxergar” mensagens como números não é
difícil: Uma tira de bits, várias tiras
(menores) de bits, concatenação de códigos
ASCII, etc. Cada aplicação pode ter a sua.
Registros Irrecuperáveis
• Armazena X(M) mod K – X e K secretos
– K muito grande (128 bits por exemplo)
– X(M) “gera” algo com o aproximadamente o
dobro do tamanho de M
• Uma mensagem N só pode ser igual a M se
X(N) mod K = X(M) mod K
• Pode acontecer de
– X(M) mod K = X(N) mod K com M  N?
Registros Irrecuperáveis
• Claro. O importante é: Qual a chance?
• K com 128 Bits  1038
• 1/1038 =
0,00000000000000000000000000000000000001
• Pequena o suficiente?
Chaves Privadas
•
•
•
•
•
Mecanismo para “embaralhar” a mensagem
De conhecimento apenas dos proprietários
Aplicar uma função F sobre a mensagem
F aqui é inversível!
Somente quem sabe que função foi aplicada
consegue recompor a mensagem original
Chaves Privadas
• Seja M uma mensagem e D o conjunto de
todas as mensagens possíveis, ou seja
– Dados os |M| bits que comporão mensagens, D
é o conjunto de todas as combinações possíveis
destes bits
• P(M) e S(M) são permutações de D (mais
combinações de bits)
Exemplo
• Escolher K um número muito grande (por
exemplo 128 bits)
• Armazenar K em local secreto e seguro. K é a
chave!
• Multiplicar M em blocos de tamanho |K| por K
• “Enxergar” mensagens como números não é
difícil: Uma tira de bits, várias tiras (menores) de
bits, concatenação de códigos ASCII, etc. Cada
aplicação pode ter a sua.
Exemplo
• C = M*K
• C terá o dobro do tamanho de K
• C pode ser enviada pela Internet sem
problemas
• O receptor, que conhece K faz M = C/K
Exemplo
M
C = K*M
Emissor
C
“Xereta”
M = C/K
Receptor
M
Se o “xereta” ler?
• C terá 256 bits “por bloco”
– Cada bloco em M de tamanho |K| multiplicado
pelo próprio K
– K tendo 128 bits
• Encontrar M é possível? Sim. “Basta”
Fatorar C. Um dos fatores será K, donde se
pode encontrar M
Fatorando C
• C tem 256 bits  1.15x1077
• Para se fatorar: testar até a raiz quadrada de
C  3.40x1038 testes
• Não testa os pares  1.70x1038 testes
• Supercomputador: 1025 testes por segundo
• Tempo estimado: 5470,07 séculos
Fatorando C
• Com |K| = 136 (1 byte a mais)... 272 bits 
7.59x1081
• 8.71x1040 testes
• Menos os pares: 4.35x1040 testes
• Mais de 100 vezes maior!
• A máquina teria que ser mais de 100 vezes
mais rápida para igualar os 5470,07 séculos!
Chave Pública
• Algoritmos de Criptografia usando Chaves
Públicas
• Problema: Nem sempre é possível “enviar” a
chave!
• Criptografar: Aplicar sobre a mensagem M uma
função F resultando num objeto C
“incompreensível”
• C = F(M)
Chave Pública
• Decriptografar: Aplicar sobre C a função F-1
resgatando novamente M
• F-1(C)=M
• Se F-1 for secreta e impossível de ser
encontrada, a criptografia é perfeita
• F e F-1 são ditas Chaves de Criptografia (e
Descriptografia obviamente!)
Chave Pública
• O problema da distribuição de Chaves:
• F pode ser conhecida, mas F-1 não pode.
• Para enviar uma mensagem, criptografar
com F. Só quem tem F-1 pode abrir!
• Obviamente F e F-1 tem que ser distintas!
Problemas resolvidos com chave
pública:
• Basicamente dois problemas:
– Exclusão do acesso de terceiros a mensagens de
outrem
– Estabelecer autenticidade de mensagens
(assinatura digital)
Chave Pública
• Cada participante tem uma chave pública e
uma secreta
• Exemplo: Ana e Beto.
– Ana tem as chaves PA e SA
– Beto tem as chaves PB e SB
• As chaves públicas e privadas são
estabelecidas por cada participante
Chave Pública
• As chaves são Funções, conforme já visto,
aplicadas sobre mensagens
• Relembrando: “Enxergar” mensagens como
números não é difícil: Uma tira de bits,
várias tiras (menores) de bits, concatenação
de códigos ASCII, etc. Cada aplicação pode
ter a sua.
Chave Pública
• Seja M uma mensagem e D o conjunto de
todas as mensagens possíveis, ou seja
– Dados os |M| bits que comporão mensagens, D
é o conjunto de todas as combinações possíveis
destes bits
• P(M) e S(M) são permutações de D (mais
combinações de bits)
Chave Pública
• As chaves são funções inversas:
– M=PA(SA(M))=SB(PB(M))  M  D
• Suposições sine qua non:
– Somente Ana computa SA
– Somente Beto computa SB
– Todo mundo computa PA e PB
Exemplo
• Beto manda uma mensagem para Ana:
M
PA
Beto
C=PA(M)
“Xereta”
SA
Ana
• Beto usa PA para criptografar
• Ana usa SA para descriptografar
M
Se o “xereta” ver?
•
•
•
•
C não tem sentido para ele!
PA não o ajuda em nada!
SA não é conhecida dele!
O “xereta” conseguiu uma tira enorme de
Bits Inútil!
Outro Exemplo
• Assinaturas Digitais
• Ana quer assinar um documento
Assina
SA
 = SA(M)
M

PA
M
(M,)
PA()
=?
Ok
Outro Exemplo
• Ana gera a assinatura da mensagem M com
=SA(M)
• Ana envia M e  para Beto
• Beto computa PA() e verifica se é igual a
M
Outro Exemplo
• Se for igual, aceita M como mensagem de
Ana.
• Caso contrário
– Ou a mensagem não é de Ana
– Ou foi corrompida (maliciosamente ou não)
• (M,) pode ser passado de Beto para
qualquer pessoa, que verifica tudo
novamente
Algoritmo RSA
• Criptossistema RSA (Rivest, Shamir,
Adleman)
• Como selecionar as chaves
• Dois números primos muito grandes (de
100 dígitos ou mais cada) p e q
• Calcula n = p*q
Algoritmo RSA
• Calcula (n) = (p-1) * (q-1)
• Selecionar um pequeno número ímpar, (e)
relativamente primo a (n) = (p-1) * (q-1)
• Calcula d = inverso multiplicativo e, mod (n)
• Publica o par P=(e,n) como chave pública
• Guarda S=(d,n) como chave secreta (basta d
pois n é público)
Algoritmo RSA
• Como Criptografar e Decriptografar?
– D = {0,1,2,...,n-1} (mensagens possíveis)
– P(M) = Me mod n
– S(C) = Cd mod n
Um exemplo
• Caso prático:
–
–
–
–
–
p=11
q=13
n=143 (universo de mensagens possíveis)
(n) = 10*12 = 120
e=7 (primo em relação a 120)
Um exemplo
• Como se calcula d?
– d é o inverso multiplicativo de e mod (n) (de 7
mod 120)
• Isso significa que e*d mod (n) = 1
• Extended_euclid(e, (n))
• d é o valor x que retorna de
extended_euclid(7, 120)
Um exemplo
Extended_euclid(a,b)
If b=0
return(a,1,0)
Else
(d’,x’,y’) := extended_euclid(b, a mod
b)
(d,x,y) := (d’, y’, x’ – (a div b)*y’)
while d < 0
d = d + b - 1
return d, y, y)
Um exemplo
•
•
•
•
•
•
d = 103
Supor uma mensagem M = 40
Publica e=7 e n=143. Guarda d=103
C = P(M) = Me mod n = 407 mod 143 = 105
S(C) = Cd mod n = 105103 mod 143 = 40
Que é a mensagem original perfeitamente
recuperada.
Um exemplo
• Considerações de complexidade:
• Fazer a exponenciação de números grandes:
Seja o algoritmo computacionalmente simples
Exp_Modular(a,b,n) /* calcula ab mod n*/
1. d  1
2. Seja <bk, ..., b0> b em binário
3. Para i= k downto 1
4.
d  d2 mod n
5.
Se bi = 1
6.
d  (d*a) mod n
7. Return d
Um exemplo
• 105103 mod 143
• 10310 = 11001112 (k=6)
i
bi
6
1
5
1
4
0
3
0
2
1
1
1
0
1
d(4)
1
14
27
14
53
1
14
d(6)
105
40
27
14
131 105
40
Um exemplo
• Quebrar a criptografia
• Para quebrar o sistema basta encontrar os
valores p e q que geraram n.
• Escolhe-se dois primos grandes e com
uma grande diferença numérica entre si
• Para encontrar os fatores primos de n
– Testar candidatos entre 1 e a raiz quadrada de n
Um exemplo
• Encontrar os fatores de 667
• Raiz de 667 = 25,8...
• Entre 2 e 25 há algum fator, se 667 não for
primo.
• Com efeito, 23 (e por conseguinte 29) é
fator
Um exemplo
• Encontrar os fatores de
123456789012345678901234567890123456
789012347 (45 dígitos)
• Raiz de
123456789012345678901234567890123456
789012347 = algo entre 1022 e 1023
• Desprezando-se os números pares (que não podem
ser primos grandes) restam algo entre 1021 e 1022
candidatos, no mínimo!
Um exemplo
• Suponha uma máquina que faça 1010
divisões por segundo (cada candidato é
testado com uma divisão)
• 1 ano tem 31.536.000 segundos
• 31.536.000*1010 testes por ano
Um exemplo
• Isso é menor que 1018
• Com 1018 testes levar-se-ia 5000 anos!
• Caso a máquina fique 5000 vezes mais
rápida, um aumento de 4 algarismos levaria
os 5000 anos originais para 500.000.000
de anos!
• Eis outro exemplo de problema NP!
Eficiência
• M {0,1,...,n-1}
• Mesmo n = 200 trata apenas mensagens
pequenas (660 bits aproximadamente)
• O processo é lento, as mensagens são
pequenas
Eficiência
• Como resolver?
– Algoritmos de Criptografia (mais rápidos) com
uma chave K aleatória (Huffman pode ser uma
solução)
– Criptografa a mensagem longa com K
– Criptografa K com P
– Envia K(M) e P(K)
Conclusões
• Os algoritmos se baseiam em problemas
não polinomiais
• Métodos exponenciais são extremamente
inviáveis de serem tratados com a máquina
de Turing
• Praticamente TODA a informação sensível
do planeta está guardada por métodos como
estes
Conclusões
• As alternativas para resolver tais problemas
esbarram na complexidade e nos métodos
numéricos
• Computação Quântica:
– A possibilidade é de operar-se N QuBits ao mesmo
tempo, em todos os seus possíveis valores
– “Derruba” a complexidade dos métodos
– Acaba com Criptografia.
Criptografia.
FIM!
“Dize-e com quem andas e dir-te-ei se vou contigo”
Barão de Itararé
Degas
Download

document