320 likes | 460 Views
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)
E N D
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
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 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)
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 = 9726
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
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”
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;
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)