Criptografia de chave pública

Slides:



Advertisements
Apresentações semelhantes
Criptografia Assimétrica
Advertisements

Introdução à Programação Engenharia da Computação
COMPARAÇÃO MÉTODOS DIRETOS E ITERATIVOS
Exercícios de Dimensionamento de Memórias Cache
Algoritmos para Geração de Variáveis Aleatórias
Programação em Java Prof. Maurício Braga
Data: 10 a 12 de fevereiro de 2009 e
GERAÇÃO DE NÚMEROS ALEATÓRIOS
POTENCIAÇÃO.
Solved Exercises 1. Finding the Peak. Let A= a1,…,an be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
Nome : Resolve estas operações começando no centro de cada espiral. Nos rectângulos põe o resultado de cada operação. Comprova se no final.
Pesquisa em profundidade
Procurando a Probabilidade de Dois ou mais Acontecimentos
Múltiplos Os múltiplos de um número inteiro obtêm-se multiplicando esse número por 0, 1, 2, 3, 4, 5, 6, ... Exemplos: M5= {0, 5, 10, 15, 20,
Matemática Financeira Revisão
Análise de regressão linear simples: abordagem matricial
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Exercícios de revisão.
POTENCIAÇÃO DE NÚMEROS RACIONAIS
POTENCIAÇÃO EM R 1. Potência de base real e expoente natural
Criptografia e Segurança de Redes Capítulo 8
Criptografia e Segurança em Redes Capítulo 9 Quarta Edição William Stallings William Stallings Slides de Lawrie Brown Tradução: Bruno e Mario.
Criptografia e Segurança de Redes Capítulo 4
Criptografia e Segurança em Redes Capítulo 10
EQUAÇÕES POLINOMIAIS Prof. Marlon.
Dornélio Mori Ney Bermudes
Matemática e Criptografia
Rodrigo de Toledo (original: Claudio Esperança)
Criptografia de chave pública
Funções de hash unidirecionais
Uma introdução à criptografia com curvas elípticas
Programação Dinámica Análise de algoritmos UNISUL
Experiments with Strassen’s Algorithm: from sequential to parallel
Formulário de Matemática
INTRODUÇÃO À PROGRAMAÇÃO
O Portal do Estudante de Computação
INVERSO DE UM NÚMERO: FUNÇÃO 1/X X 1 INVERSO DE UM NÚMERO =
Ap-3 Profª Kelly E. Medeiros
EXERCÍCIOS PROPOSTOS MATEMÁTICA Prof. Manuel.
Aula 03 Revisão de Expressões Comando de Seleção
Capítulo 12 Funções logarítmicas slide 1
POTENCIAÇÃO DE NÚMEROS INTEIROS
Diffie-Hellman Acordo de Chave Compartilhada. Abril de 2006Criptografia de Chave Pública2 Estabelecendo uma Chave Compartilhada Diffie-Hellman, 1976 Acordo.
Diffie-Hellman Acordo de Chave Compartilhada 1976, University of Stanford.
Criptografia de Chave Pública
Protocolos Básicos Protocolos -Sequência de passos, envolvendo duas ou mais partes, projetados para realizar uma tarefa específica. -Sequência: início.
Meditar produz sabedoria phgmw dvtvrgxc vehgruld Segredos (chaves públicas) são trocados Sistemas criptográficos assimétricos.
Informática Teórica Engenharia da Computação
Prof. João Nunes de Souza FACOM UFU
FTIN Formação Técnica em Informática
Aula 08 Medidas de posição - Prof. Diovani Milhorim
1. Introdução; 2. Inicialização da aplicação; 3. Gerando as Chaves do RSA; 4. Criptografando mensagens; 5. Descriptografando mensagens; 6. Conclusões.
Matemática Divertida Potências Docente: Sandra Coelho
1.
INF-103: Avaliação de Desempenho Carlos Alberto Kamienski ( ) UFABC Geração de Números Aleatórios.
Confiabilidade - Árvore de Falhas
POTENCIAÇÃO E FUNÇÃO EXPONENCIAL
POTENCIAÇÃO E RAIZ QUADRADA DE NÚMEROS RACIONAIS
Sistemas Seguros Criptografia Simétrica e Assimétrica
Criptografia de Dados Recursos Computacionais
DCC 001 Programação de Computadores
Expressões: operadores aritméticos
Aula prática 2 Operadores e Expressões Comandos de Decisão Comentários
Campus de Caraguatatuba Aula 9: Noções Básicas sobre Erros (3)
Algoritmos de Chave Pública
Segurança de Redes de Computadores Prof. Paulo Fernando da Silva.
3. Criptografia Assimétrica
Números Primos – algoritmos e aplicações
©2000 Paulo Adeodato Avaliação de Desempenho de Sistemas Geradores de Números Aleatórios Paulo Adeodato Departamento de Informática Universidade Federal.
Segurança de Redes de Computadores
Transcrição da apresentação:

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

RSA

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 Generalização de Euler 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;

RSA (Rivest, Shamir e Adelman)

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) Ataques à chave privada Recomendações: Tão complexo quanto fatorar n Ataques à chave privada 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)