Números Primos e Criptografia RSA Jean Carlo Baena Vicente Matemática - UFPR Orientador: Carlos Henrique dos Santos 6 de outubro de 2013
Sumário Criptografia RSA Por que o RSA funciona? Fatoração Primalidade Referências
Motivação O método de criptografia RSA foi desenvolvido por Ron Rivest, Adi Shamir e Leonard Adleman, é fundamentado pela área da matemática denominada Teoria de Números, hoje é o algoritmo de chave pública mais utilizado ao redor do mundo.
Pré-codificação Neste primeiro momento é necessário transcrever a mensagem a ser criptografada, por meio de uma conversão de letras em números, por exemplo: A=10 F=15 B=11 G=16 C=12 H=17 D=13 I =18 E=14 J=19... Alguns cuidados devem ser tomados!
Pré-codificação Em seguida, deve-se conhecer o número n = pq, onde p e q são números primos distintos, n é chamado de chave pública, e agora a mensagem transcrita deve ser quebrada em blocos, e cada um destes deve ser menor que n, por exemplo: Se a mensagem, já transcrita, for: 2510271029349914992118231310 Uma das formas de se formar blocos é: 25 102 7 102 93 49 91 49 92 118 23 13 10
Codificando Para codificar a mensagem serão necessários os números n e um número e inversível módulo φ(n), ou seja, mdc(e, φ(n)) = 1. Como p e q são primos, φ(n) é facilmente calculado. φ(n) = (p 1)(q 1) Cada um dos blocos da mensagem será codificado da seguinte forma: C(b) = b e (mod n) Onde b é o bloco a ser codificado.
Codificando Usando o exemplo anterior, onde os blocos da mensagem eram: 25 102 7 102 93 49 91 49 92 118 23 13 10 Tomando os primos p = 11 e q = 13, obtemos que n = pq = 143. Tomando agora e = 7, pode-se fazer a codificação da mensagem acima: 64 119 6 119 102 36 130 36 27 79 23 117 10
Decodificando Observando o processo de codificação dos blocos da mensagem, é natural imaginar o que deverá ser feito para decodifica-los. Basta tomar d o inverso de e módulo φ(n), então faz-se: D(C(b)) = C(b) d (mod n) A existência de d é garantida pelo teorema de Bézout, no exemplo, como e = 7, temos d = 103, realizando os cálculos acima na mensagem codificada: 25 102 7 102 93 49 91 49 92 118 23 13 10 Obtemos: 64 119 6 119 102 36 130 36 27 79 23 117 10
Por que funciona? Para garantir que, independente dos valores de p, q, e e d utilizados, a mensagem decodificada será fiel à original deve-se mostrar que D(C(b)) = b, ou seja: b de b(mod n) Isto não é tão óbvio pois não é certo que mdc(b, n) = 1, logo não pode-se aplicar diretamente o teorema de Euler, mas é fácil ver que, como de = 1 + kφ(n) = 1 + k(p 1)(q 1), temos: b de b(mod p) Caso mdc(p, b) = 1, e também quando p b. As mesmas relações valem para q.
Por que funciona? Basta agora usar o seguinte lema: Lema Sejam a e b, dois inteiros coprimos, se a c e b c, então o produto ab c. Como vimos, p b de b e q b de b, como p e q são primos concluímos, pelo lema acima, que b de b(mod pq)
Segurança A segurança depende do quão difícil será decompor n, então os primos p e q devem ser tomados com cautela, afim de que não sejam facilmente descobertos. Dependendo da escolha dos primos pode-se garantir que o sistema será seguro durante anos, mas o que deve ser levado em consideração para decidir quais primos serão utilizados?
Fatoração usual Algoritmo (Usual de Fatoração) Etapa1: Comece fazendo F = 2 Etapa2: Se n/f é inteiro então F é fator de n; caso contrário vá para a etapa 3. Etapa3: Incremente F de uma unidade e vá para a etapa 4. Etapa4: Se F n então n é primo; caso contrário volte à etapa 2. O algoritmo usual de fatoração é menos eficiente quanto maiores forem os fatores do número a ser decomposto.
Fatoração por Fermat Algoritmo (Fermat) Etapa1: Comece com x = n, se n = x 2 então x é fator de n; caso contrário vá para a etapa 2. Etapa2: Incremente x de uma unidade e calcule y = x 2 n. Etapa3: Repita a etapa 2 até encontrar um valor inteiro para y, ou até que x seja igual a (n + 1)/2; no primeiro caso n tem fatores x + y e x y, no segundo n é primo. O algoritmo de Fermat encontrará facilmente fatores que são relativamente próximos um ao outro.
Primos Populares Então deve-se impor certas condições aos primos utilizados no RSA, afim de que a codificação atinja um certo nível de segurança, para encontrar estes números, se faz necessário o uso de algumas ferramentas. Computacionalmente falando, o método mais facil de se encontrar estes números é fazer uso de funções que possam gerar primos, algumas destas funções são bastante conhecidas.
Números de Mersenne Os números de Mersenne são os números da seguinte forma: M n = 2 n 1 É sabido que se o número M n é primo, então n também será um número primo. Infelizmente a reciproca desta afirmação não é válida.
Números de Fermat Os números de Fermat seguem a seguinte regra: F n = 2 n + 1 Pode-se mostrar que, quando F n é primo, n será uma potência de dois. A recíproca também falha nesta afirmação.
Famílias de Primos Obviamente os números de Mersenne e Femat não serão úteis para os fins do RSA, mas existe uma infinidade de famílias de primos que podem ser utilizadas. Teorema (Dirichlet) Sejam a, b N, tais que mdc(a, b) = 1 então a progressão aritmética: a n = a + nb Contém infinitos números primos.
Pseudoprimos Pelo teorema de Fermat podemos compreender o que são números pseudoprimos. Teorema Se n > 0 e 1 < b < n são números inteiros e b n 1 1(mod então n é um número composto. O número b é uma de testemunha de que n é composto. n),
Teorema Seja n > 0 um inteiro tal que Teste de Lucas n 1 = p e 1 1... per r onde p 1 < < p r são primos. Se, para cada i = 1,..., r existirem inteiros positivos b i (2 b i n 1) que satisfaçam b n 1 i 1(mod n) então n é primo. b (n 1/p i ) i 1(mod n), Este algoritmo é bastante eficiente para determinar primalidade de números como os de Fermat.
Referências S. C. Coutinho: Números Inteiros e Criptografia RSA. Instituto Nacional de Matemática Pura e Aplicada - IMPA. 2009. S. C. Coutinho: Criptografia. Programa de Iniciação Científica OBMEP. 2009. RSA Algorithm. xtrmntr.org/priikone/docs/rsa.pdf. Acessado em 06/05/2013.