criptografia de chave pública baseada em problemas matemáticos complexos matematicamente, atacante...
Post on 17-Apr-2015
110 Views
Preview:
TRANSCRIPT
Criptografia de chave pública
• Baseada em problemas matemáticos complexos
• Matematicamente, atacante sabe o que fazer para quebrar o algoritmo (descobrir a chave)
• Atacante deve resolver um problema complexo (NP-completo)
• Usuário do sistema deve resolver um sistema relativamente simples (complexidade P)
Criptografia de chave pública
• Problemas matemáticos complexos:
• Fatoração de um número inteiro
• Minimização de equações booleanas
• Escalonamento ótimo de um sistema operacional
• Logaritmo em aritmética de módulo
• etc
Aritmética em módulo
• b = a mod n : b é o resto de a / n
• 0 <= resto < n
• soma módulo n
• multiplicação módulo n
• exemplos:(11 x 13) mod 16 = 143 mod 16 = 15
( 7 x 9) mod 16 = 63 mod 16 = 15
(7 + 9 ) mod 16 = 16 mod 16 = 0
(11 + 13) mod 16 = 24 mod 16 = 8
Adição e multiplicação módulo n
• Propriedades– Fechada
– Associativa
– Comutativa
– Elemento identidade da adição : 0
– Elemento identidade da multiplicação : 1
• Propriedades similares a da aritmética inteira
Inverso aditivo
• Inverso aditivo de a é n-a( a + (n-a) ) mod n = ( a - a + n ) mod n = n mod n = 0
• Todo a sempre possui um inverso aditivo
• Exemplos (n=7)1: 6 2: 5 3: 4
4: 3 5: 2 6: 1
0: 0
• Se b é o inverso aditivo de a, a é o inverso aditivo de b
Inverso multiplicativo
• Inverso multiplicativo de a : a-1
– a x a-1 = 1 (mod n)
– Só existe se mdc(a,n) = 1
– Só existe se a e n são primos relativos
– Se n é primo, a-1 existe para qualquer a
• Exemplos (n = 26)1: 1 3: 9 5: 21 7: 15
11: 19 17: 23 25: 25
• Inverso multiplicativo, se existe, é único
RSA
Chave pública
n: produto de dois primos, p e q (devem ser secretos) e: primo relativo a (p–1).(q–1)
Chave privada
d: (e.d) mod (p–1).(q–1) = 1, ou d = e-1 mod (p–1).(q–1)
Cifragem C = Me mod n Decifragem M = Cd mod n Assinatura A = Md mod n Verificação Aceitar se Ae mod n = M
RSA
Chavepública
n: produto de dois primos, p e q (devem ser secretos)e: primo relativo a (p–1).(q–1)
Chaveprivada
d: (e.d) mod (p–1).(q–1) = 1, oud = e-1 mod (p–1).(q–1)
Cifragem C = Me mod n com a chave pública (e,n) do destinatárioDecifragem M = Cd mod n com a chave privada (d,n) do destinatárioAssinatura A = Md mod n com a chave privada (e,n) do remetenteVerificação Aceitar se Ae mod n = M com a chave pública (e,n) do
remetente a partir de (A,M)
Exemplo
• Bob escolhe p = 101 e q = 113
• Então n = 11413 e (n) = 100 x 112 = 11200
• Como 11200 = 26 52 7, qualquer número que não seja divisível por 2, 5 e 7 serve para e
• Na prática e é randômico e testa-se por mdc(e, (n)) = 1
• Bob escolhe e = 3533
• Então d = e-1 mod (p–1).(q–1) = 6597
• A chave pública de Bob é (3533,11413)
• Alice deseja cifrar 9726 para Bob
• Alice calcula 97263533 mod 11413 = 5761
• Para decifrar, Bob calcula 57616597 mod 11413 = 9726
Funcionamento do RSA
• Pequeno Teorema de Fermat– Se m é primo, então
am-1 mod m = 1, para todo 0 < a < m
• Generalização de Eulera(n) mod n = 1, se mdc(a,n) = 1
– se n é primo, (n) = n - 1
– se n = p.q, (n) = (p-1).(q-1) (n) = função totient de Euler (quantidade de inteiros
positivos menores que n primos relativos a n)
Funcionamento do RSA
• C = Me mod n
• M = Cd mod n
• M = (Me mod n)d mod n
• M = Med mod n
como (e.d) mod (p–1).(q–1) = 1
• M = Mk(p–1).(q–1) + 1 mod n
• M = Mk(p–1).(q–1).M mod n
• M = (M(p–1).(q–1)mod n)k.M mod n
• M = (1)k.M mod n = M mod n = M
Aritmética para RSA
• Cálculo de z = xb mod n– Quociente é irrelevante
– Basta calcular o resto
– Número b representável em binário por k bits
• Algoritmo Square-and-Multiply
1. z = 1
2. For i = k-1 downto 0 do
3. z = z2 mod n
4. If b(i) = 1 then z = z . x mod n
Aritmética para RSA
• Cálculo de z = xb mod n– Exemplo: b = 21 (10101)
– 10101 = 1.24+0.23+1.22+0.21+1.20
– 10101 = (((1.2 + 0).2 + 1).2 + 0).2 + 1
– xb = x (((1.2 + 0).2 + 1).2 + 0).2 + 1
– xb = (((x2)2 . x)2)2 . x
1 0 1 0 1• Algoritmo Square-and-Multiply
1. z = 1
2. For i = k-1 downto 0 do
3. z = z2 mod n
4. If b(i) = 1 then z = z . x mod n
Aritmética para RSA
• Cálculo de z = xb mod n
• Seja n = 11413, b = 3533 e x = 9726i b(i) z11 1 12 . 9726 = 972610 1 97262 . 9726 = 26599 0 26592 = 56348 1 56342 . 9726 = 91677 1 91672 . 9726 = 49586 1 49582 . 9726 = 77835 0 77832 = 62984 0 62982 = 46293 1 46292 . 9726 = 101852 1 101852 . 9726 = 1051 0 1052 = 110250 1 110252 . 9726 = 5761
Determinação do inverso multiplicativo
• Base: algoritmo de Euclides para g = mdc(x,y)
• Seja y >= x
1. g = y
2. While x > 0 do
3. g = x
4. x = y mod x
5. y = g
Determinação do inverso multiplicativo
• 1. g = y
2. While x > 0 do
3. g = x
4. x = y mod x
5. y = g
• Exemplo: 27 e 45
g x y45 27 4527 18 2718 9 189 0 9
Determinação do inverso multiplicativo de b em módulo n
1. n0 = n
2. t0 = 0
3. t = 1
4. q = n0 div b
5. r = n0 - q . b
6 . while r > 0 do
7. temp = t0 - q . t
8. if temp >=0 then temp = temp mod n
9. else temp = n - ((-temp) mod n)
10.t0 = t
11.t = temp
12.n0 = b
13.b = r
14.q = n0 div b
15.r = n0 - q . b
16.If b <> 1 then “b nao possui inverso multiplicativo”
17. else “t é o inverso multiplicativo de b”
Determinação do inverso multiplicativo de 28 em módulo 75
1. n0 = n
2. t0 = 0
3. t = 1
4. q = n0 div b
5. r = n0 - q . b
6 . while r > 0 do
7. temp = t0 - q . t
8. if temp >=0 then temp = temp mod n
9. else temp = n - ((-temp) mod n)
10. t0 = t
11. t = temp
12. n0 = b
13. b = r
14. q = n0 div b
15. r = n0 - q . b
16.If b <> 1 then “b não possui inverso multiplicativo”
17. else “t é o inverso multiplicativo de b”
temp t0 t n0 b q r0 1 75 28 2 19
73 1 73 28 19 1 93 73 3 19 9 2 167 3 67 9 1 9 0
Teste de primalidade
• Atacante deve fatorar n = p x q
• Depois, de posse da chave pública e, é fácil calcular a chave secreta d:
d = e-1 mod (p-1)x(q-1)
• Problema do atacante: fatorar n, ou seja, decompor nos seus componentes primos
Teste de primalidade
• Problema da geração das chaves:– Descobrir p primo
– Descobrir q primo
• Teste probabilístico, com duas respostas possíveis:
(a) não é primo
(b) pode ser primo (50% de
probabilidade)
Teste de primalidade probabilístico
• O teste de Soloway-Strassen para n:
1. Escolher um número a, 0 < a < n
2. Se gcd(a,n) <> 1, então n não é primo
3. Se a(n-1)/2 mod n = J(a,n) então n é primo com 50% de probabilidade
4. Senão, n não é primo
• Erro para um teste: 50% (1/2)
Teste de primalidade probabilístico
• A função J(a,n) é definida como segue:
1. J(0,n) = 0
2. J(1,n) = 1
3. J(2,n) = 1 se (n2 -1)/8 for par, e -1 caso contrário
4. J(a,n) = J((a mod n),n)
5. J(a.b,n) = J(a,n) . J(b,n)
6. J(a,n.m) = J(a,n) . J(a,m)
7. Se gcd(a,b)=1, e a e b forem ímpares:
J(a,b) = J(b,a) se (a-1)(b-1)/4 for par
J(a,b) = -J(b,a) se (a-1)(b-1)/4 for ímpar
Teste de primalidade probabilístico
• Exemplo: J(7411,9823):
1. J(7411,9823) = -J(9823,7411) regra 7
2. = -J(1872,7411) regra 4
3. = -J(2,7411)4 . J(117,7411) regra 5
4. = -J(117,7411)regra 3
5. = -J(7411.117)regra 7
6. = -J(40,117) regra 4
7. =-J(2,117)3 . J(5,117) regra 5
8. = J(5,117) regra 3
9. = J(117,5) regra 7
10. = J(2,5) regra 4
11. = - 1 regra 3
Teste de primalidade probabilístico
• Repetindo-se o teste t vezes
• Sendo a resposta sempre “pode ser”
• Então n é primo com uma margem de erro de 1 em 2t
• Na prática, usa-se t = 100
• Na faixa dos números de 1024 a 4096 bits, existe um primo a cada 160 números
• Complexidade: O((log n)3)
Teste de primalidade probabilístico
• O teste de Miller-Rabin para n:
• Escrever n como 1 + 2k . m (n-1 = 2k.m)
1. Escolher um número a, 0 < a < n
2. Calcular b = am mod n
3. Se b = 1, então n pode ser primo
4. Para i=0 até k-1
5. Se b = -1 mod n então n pode ser primo
6. Senão, b = b2 mod n
7. n não é primo
• Erro para um teste: 25% (1/4)
Teste de primalidade probabilístico
• Repetindo-se o teste t vezes
• Sendo a resposta sempre “pode ser”
• Então n é primo com uma margem de erro de 1 em 4t
• Complexidade: O((log n)3)
• Melhor que Soloway-Strassen, apesar de ter a mesma complexidade
Teste de primalidade probabilístico
• Geração de primos na prática
1. Escolher um número n, randômico
2. Ligar os bits mais e menos significativos (para ser da magnitude desejada e ser ímpar)
3. Testar divisibilidade por 3, 5, 7 (elimina 54%)
4. Realizar o teste de primalidade
Teste de primalidade determinístico
Teste ASK (Agarwal, Saxena e Kayal)
1. if ( n is of the form ab, b > 1 ) output COMPOSITE;
2. r = 2;
3. while(r < n)
4. if ( gcd(n,r) 1 ) output COMPOSITE;
5. if (r is prime)
6. let q be the largest prime factor of r - 1;
7. if (q 4 sqrt(r) log n) and (n (r-1)/q mod r 1)
8. break;
9. r r + 1;
11. for a=1 to 2 srqt(r) log n
12. if ( (x - a)n (xn - a)n mod xr - 1 output COMPOSITE;
13. Output PRIME;
RSA (Rivest, Shamir e Adelman)
Chavepública
n: produto de dois primos, p e q (devem sersecretos)e: primo relativo a (p–1).(q–1)
Chaveprivada
d: (e.d) mod (p–1).(q–1) = 1,ou d = 1/e mod (p–1).(q–1)
Cifragem C = Me mod nDecifragem M = Cd mod nAssinatura A = Md mod nVerificação Aceitar se Ae mod n = M
Ataques ao RSA
• Fatorar n (depois determinar chave privada)
• Problema NP
• Melhores algoritmos são exponenciais
• Fatorar por tentativas de divisão (de 2 a sqrt(n))– Efetivo para n < 1012
• Algoritmos: Pollard p-1, Pollard Rho, Dixon’s Random Squares
Ataques ao RSA
• Fatorar n (depois determinar chave privada)
• Algoritmos atuais– quadratic sieve O(esqrt(ln n . ln ln n))
RSA-129 fatorado em 1994
– elliptic curve O(esqrt(2.ln p . ln ln p)) (p é fator de n)
– number field sieve O(e1.92 . (ln n)1/3 . (ln ln n)2/3)
RSA-130 fatorado em 1996
RSA-140 fatorado em fevereiro de 1999
RSA-155 fatorado em agosto de 1999 (chaves de 512 bits)
Desafios vão até RSA-500
Ataques ao RSA
• Calcular (n)– Tão complexo quanto fatorar n
• Ataques à chave privada– Tão complexo quanto fatorar n
– Mas se e e d são conhecidos, é possível fatorar n
• Recomendações:– Não compartilhar n entre vários usuários (common modulus
attack)
– A chave privada deve ser grande (d > n1/4) (ataque de Wiener)
top related