1 / 32

Criptografia de chave pública

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)

bonnie
Download Presentation

Criptografia de chave pública

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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)

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. RSA

  8. RSA

  9. 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

  10. 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 Euler a(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)

  11. 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

  12. 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

  13. 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

  14. Aritmética para RSA • Cálculo de z = xb mod n • Seja n = 11413, b = 3533 e x = 9726

  15. 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

  16. 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

  17. 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”

  18. 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”

  19. 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

  20. 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)

  21. 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)

  22. 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

  23. 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

  24. 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)

  25. 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)

  26. 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

  27. 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

  28. 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;

  29. RSA (Rivest, Shamir e Adelman)

  30. 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

  31. 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

  32. 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)

More Related