Álgebra A - Aula 11 RSA Elaine Pimentel Departamento de Matemática, UFMG, Brazil 2 o Semestre - 2010
Criptografia RSA- pré-codificação Converter a mensagem em uma seqüência de números pré-codificação. Letras A a Z (maiúsculas) + espaços em branco entre palavras (99). A = 10, B = 11, etc, Z = 35. Números com exatamente dois algarismos.
Pré-codificação Chave pública: n = p.q, p e q primos. Devemos quebrar a mensagem em blocos: números menores que n. Orientações: Não começar com o número 0 (problemas na decodificação). Os blocos não devem corresponder a nenhuma unidade linguística (palavra, letra, etc): decodificação por contagem de freqüência fica impossível.
Codificando Para codificar: n = p.q e inteiro positivo e que seja inversível módulo φ(n). Em outras palavras, mdc(e, φ(n)) = mdc(e, (p 1).(q 1)) = 1 Chamaremos o par (n, e) a chave de codificação RSA. Codificando cada bloco b: do sistema C(b) b e (mod n) Onde 0 C(b) < n. Importante: Não reunir os blocos após a codificação.
Exemplo Paraty é linda: 2510271029349914992118231310 Tome n = 11.13 = 143. Quebrando a mensagem em blocos: 25 102 7 102 93 49 91 49 92 118 23 13 10 Como φ(143) = 10.12 = 120, tomamos e = 7. Logo, C(25) 25 7 25 22.25 2.25 (mod 143) 25 22.53.25 (mod 143) 53 2.53.25 (mod 143) 92.53.25 (mod 143) 14.25 (mod 143) 64 (mod 143) Obtemos assim a seguinte mensagem cifrada: 64 119 6 119 102 36 130 36 27 79 23 117 10
Decodificando (n, d) = chave de decodificação onde d é o inverso de e módulo φ(n). D(c) é dado por: D(c) c d (mod n) onde 0 D(c) < n. Observe que é muito fácil calcular d, desde que φ(n) e e sejam conhecidos: basta aplicar o algoritmo euclideano estendido. Entretanto, se não conhecemos p e q é praticamente impossível calcular d.
Exemplo Voltando ao nosso exemplo, temos que n = 143 e e = 7. Para calcular d, usamos o algoritmo euclideano estendido: 120 = 7.17 + 1 = 1 = 120 + ( 17).7 Logo o inverso de 7 módulo 120 é 17. Como d deve ser usado como um expoente, precisamos que d seja positivo. Logo tomamos d = 120 17 = 103.
Funciona? Pergunta óbvia que surge: D(C(b)) = b? Ou seja, decodificando um bloco de mensagem codificada, encontramos um bloco da mensagem original? Consideremos então n = p.q. Vamos provar que DC(b) b (mod n) E por que não a igualdade? Observe que DC(b) e b são menores que n 1. Por isso escolhemos b menor que n e mantivemos os blocos separados depois da codificação!
Funciona! Por definição: DC(b) (b e ) d b e.d (mod n) Mas d é o inverso de e módulo φ(n). Logo existe inteiro k tal que ed = 1 + kφ(n). Logo, b ed b 1+kφ(n) (b φ(n) ) k.b (mod n) Se mdc(b, n) = 1, então podemos usar o teorema de Euler: b ed (b φ(n) ) k.b b (mod n)
Funciona! Se b e n não são primos entre si, observe que n = p.q, p e q primos distintos. Logo, b ed b 1+kφ(n) (b (p 1) ) k.(q 1).b (mod p) Se mdc(b, p) = 1, então podemos usar o teorema de Fermat (b p 1 1 (mod p)). Se não, temos que p b e portanto b ed b 0 (mod p)
Funciona! Logo, b ed b (mod p) qualquer que seja b. Fazemos o mesmo para o primo q, obtendo: b ed b (mod q) Portanto, como queríamos. b ed b (mod p.q)
Porque o RSA é seguro O RSA só é seguro se for difícil calcular d quando apenas o par (n, e) é conhecido. Mas d somente se φ(n): fatoração de n. Por que não outro processo para calcular d e φ(n)? Resposta: φ(n) = (p 1).(q 1) = pq (p + q) + 1 = n (p + q) + 1 Logo, (p + q) = n φ(n) + 1 e (p + q) 2 4n = (p 2 + q 2 + 2pq) 4pq = (p q) 2 Logo, p q = (p + q) 2 4n
Porque o RSA é seguro Outro jeito de quebrar o RSA seria achar um algoritmo que calcule d diretamente a partir de n e e. Como ed 1 (mod φ(n)), isto implica que conhecemos um múltiplo de φ(n). Isso também é suficiente para fatorar n (prova complicada). A última alternativa seria achar b a partir da forma reduzida de b e módulo n sem achar d. Bom, ninguém conseguiu fazer isso até agora... Acredita-se que quebrar o RSA e fatorar n sejam problemas equivalentes, apesar disso não ter sido demonstrado.
Escolhendo primos RSA de chave pública (n, e), n com aproximadamente r algarismos. Escolha um primo p entre 4r 10 e 45r 10r 100 algarismos e q próximo de p. Tamanho da chave recomendado atualmente: 768 bits. n terá 231 algarismos. p e q: 104 e 127 algarismos respectivamente. Importante: p 1, q 1, p + 1, p 1 não tenham fatores primos pequenos, pois senão seria fácil fatorar n.
Escolhendo primos Para encontrar p e q, seguiremos a seguinte estratégia: 1. Tome um número s ímpar. 2. Verifique se s é divisível por um primo menor que 5.000. 3. Aplique o teste de Miller a s usando como base os 10 primeiros primos. Se x é um número da ordem de 10 127, no intervalo entre x e x + 10 4 existem aproximadamente 34 primos dentre 560 números que passam a etapa (1) da estratégia acima...
Assinaturas Apenas codificar mensagens não basta: sistema é de chave pública. Um hacker poderia facilmente mandar instruções ao banco para que o seu saldo bancário fosse transferido para uma outra conta. Por isso, o banco precisa de uma garantia de que a mensagem teve origem em um usuário autorizado. Ou seja, a mensagem tem que ser assinada.
Assinaturas C m e D m : codificação e decodificação do Mário e de C a e D a as funções do Allan.b: de Mário para Allan. Mensagem assinada: C a (D m (b)) Para ler a mensagem: Allan aplica D a e depois C m. Observe que C m é público. Se a mensagem fizer sentido, é certo que a origem foi mesmo o Mário! Mas cuidado! Esse sistema pode ser usado para quebrar o RSA, como em 1995 por um consultor em assuntos de segurança de computadores...
Exercícios propostos - Capítulo 11 1,2,3,4,6