• Nenhum resultado encontrado

Teoria dos numeros e o RSA

N/A
N/A
Protected

Academic year: 2021

Share "Teoria dos numeros e o RSA"

Copied!
78
0
0

Texto

(1)

Universidade Estadual de Campinas

Instituto de Matem´

atica, Estat´ıstica e Computa¸c˜

ao Cient´ıfica

Departamento de Matem´

atica Aplicada

Disserta¸c˜

ao de Mestrado

TEORIA DOS N ´

UMEROS E O RSA

por

Bianca Amoras de Souza

Mestrado em Matem´

atica Aplicada

Orientador:

Prof. Dr. Jos´

e Pl´ınio de O. Santos

(2)

TEORIA DOS N ´UMEROS E O RSA

Este exemplar corresponde `a reda¸c˜ao final da disserta¸c˜ao intitulada “Teoria dos N´umeros e o RSA” devidamente corrigida e defendida por Bianca Amoras de Souza e aprovada pela comiss˜ao julgadora.

Campinas, 15 de agosto de 2004.

Prof. Dr. Jos´e Pl´ınio de O. Santos Orientador

Banca Examinadora:

1. Prof. Dr. Jos´e Pl´ınio de Oliveira Santos

2. Prof. Dr. Emerson Alexandre de Oliveira Lima 3. Profa. Dra. Sueli Rodrigues Costa

Disserta¸c˜ao apresentada ao Instituto de Matem´atica, Estat´ıstica e Computa¸c˜ao Ci-ent´ıfica, UNICAMP, como requisito par-cial para oten¸c˜ao do t´ıtulo de MESTRE em Matem´atica Aplicada.

(3)

Campinas, 15 de julho de 2004. Autor: Bianca Amoras de Souza

T´ıtulo: Teoria dos N´umeros e o RSA Departamento: Matem´atica Aplicada

Grau: Mestre em Matem´atica Aplicada Defesa: 06 de agosto de 2004

(4)
(5)

Sum´

ario

Abstract vii Resumo viii Agradecimentos ix Tabelas de S´ımbolos xi Introdu¸c˜ao 1 1 Criptografia Computacional 4

1.1 Sistemas Criptogr´aficos . . . 5

1.2 Fun¸c˜oes Unidirecionais . . . 7

1.3 Criptossistemas Sim´etricos e Assim´etricos . . . 8

2 O Sistema de Chave P´ublica RSA 10 2.1 Gera¸c˜ao das Chaves . . . 12

2.2 Codifica¸c˜ao e Decodifica¸c˜ao . . . 13

2.3 Assinatura Digital . . . 14

(6)

3 Testes de Primalidade 18

3.1 Distribui¸c˜ao de Primos . . . 20

3.2 Teste de Solovay-Strassen . . . 21

3.3 Teste de Miller-Rabin . . . 26

3.4 Teste de Agrawal-Kayal-Saxena . . . 33

3.4.1 Teoria dos N´umeros . . . 36

3.4.2 Corpos finitos . . . 38 3.4.3 O algoritmo AKS . . . 43 4 Fatora¸c˜ao de Inteiros 53 4.1 Um M´etodo Simples . . . 54 4.2 M´etodo de Fermat . . . 55 4.3 ρ-M´etodo de Pollard . . . 57 4.4 ρ − 1-M´etodo de Pollard . . . 58

4.5 Crivo Quadr´atico . . . 59

(7)

Abstract

Number Theory has been subject of study since the ancient years. In the two last decades, this field of Mathematics has gained much interest due to its use in cryptography. The public-key cryptosystems have their security based on number theoretic problems which are computationally hard to solve.

The RSA base its security on the difficulty in factoring numbers that are products of two big primes. In this work, we describe the RSA. As we are interested also in the generation of prime numbers and factorization of integers, we present some methods for primality testing and integer factorization.

(8)

Resumo

A Teoria dos N´umeros tem sido objeto de estudo desde a antiguidade. Nas ´ultimas duas d´ecadas, este campo da Matem´atica tem ganho maior interesse devido `a sua utiliza¸c˜ao em criptografia. Os criptossistemas de chave p´ublica tˆem sua seguran¸ca baseada em problemas da Teoria dos N´umeros que s˜ao computacionalmente dif´ıceis de resolver.

O RSA baseia sua seguran¸ca na dificuldade de fatorar n´umeros que s˜ao produtos de dois primos grandes. Neste trabalho, descreveremos o RSA. Como estamos tamb´em interessados na gera¸c˜ao de n´umeros primos e na fatora¸c˜ao de inteiros, apresentaremos alguns testes de primalidade e m´etodos de fatora¸c˜ao.

(9)

Agradecimentos

Agrade¸co a Deus, por tudo.

Aos meus pais, Rosana e Francisco, sem os quais n˜ao estaria onde estou hoje. Em particular `a minha m˜ae, quem esteve sempre ao meu lado.

Ao Alexander Sosnovski (Sashenka) por seu amor, companheirismo e apoio. Ao Agnaldo Dantas Sobrinho, meu padrasto querido.

Ao meu orientador, Prof. Pl´ınio O. dos Santos, pela paciˆencia, pela compreens˜ao e por sua orienta¸c˜ao neste trabalho.

Aos meus amigos de todas as horas. Em especial, Ignˆez G. Amaral e Luciane Bombach.

Aos colegas do Departamento de Matem´atica Aplicada do IMECC por toda ajuda e companhia durante o curso. Em particular, agrade¸co aos colegas Eduardo Bovo, Igor Freire e Jair Cunha.

Agrade¸co `a Luziane por me ajudar a solucionar alguns problemas com rela¸c˜ao ao LATEX.

Aos professores dos Departamentos de Matem´atica e Matem´atica Aplicada por incentivarem meu gosto pelos estudos.

(10)

Aos professores da banca examinadora, pelas sugest˜oes e corre¸c˜oes.

Ao Alonso Sep´ulveda Castellanos por me ajudar com a figura que representa um sistema criptogr´afico contida nesta disserta¸c˜ao.

(11)

Tabelas de S´ımbolos

bxc Maior inteiro menor do que ou igual a x lg x N´umero de bits de x

f (x) = O(g(x)) Existˆencia de uma constante positiva c e um inteiro n0

tais que f (x) ≤ cg(x) para x ≥ n0

log x Logaritmo natural de x logbx Logaritmo de x na base b

φ(x) N´umero de inteiros menores do que ou iguais a x que s˜ao relativamente primos com x

mdc(x, y) M´aximo divisor comum dos inteiros x e y mmc(x, y) M´ınimo m´ultiplo comum dos inteiros x e y

π(x) N´umeros de primos menores do que ou iguais a x

a n



S´ımbolo de Jacobi

E(n) Conjunto de bases de Euler para os quais n ´e um candidato a primo

|C| Cardinalidade do conjunto C Zn Grupo aditivo de inteiros m´odulo n

Z∗n Grupo multiplicativo de inteiros m´odulo n

ordna Ordem de a m´odulo n

S(n) Conjunto de bases para os quais n ´e um candidato forte a primo

(12)

 m n



Coeficiente binomial de m e n P (n) Maior primo divisor de n

π0(x) Cardinalidade de {p ; p ´e primo , p ≤ x e P (p − 1) > x2/3} Zn[x] Anel de polinˆomios em Zn

p(x) mod (q(x), n) Resto da divis˜ao do polinˆomio p(x) pelo polinˆomio q(x) em Zn[x]

F Anel de polinˆomios em Zn[x] de grau ≤ grau(h(x))

onde a adi¸c˜ao e a multiplica¸c˜ao s˜ao m´odulo h(x), h(x) um polinˆomio irredut´ıvel

(13)

Introdu¸

ao

A palavra criptografia tem origem no grego, onde cryptos significa oculto, se-creto, escondido e grapho significa escrita, grafia. A criptografia ´e, ent˜ao, o estudo de m´etodos para transformar uma mensagem originalmente compreens´ıvel em algo incompreens´ıvel para todos, exceto para o destinat´ario leg´ıtimo da mensagem que a tornar´a leg´ıvel novamente, podendo interpretar seu conte´udo.

O processo de transformar uma mensagem leg´ıvel em uma equivalente mas ileg´ıvel ´e chamado de codifica¸c˜ao. E o que um usu´ario leg´ıtimo do c´odigo usa para tornar compreens´ıvel uma mensagem codificada ´e denominado decodifica¸c˜ao.

Em geral, para decodificar uma mensagem ´e necess´ario o conhecimento de uma chave secreta dispon´ıvel ao usu´ario leg´ıtimo do c´odigo. ´E poss´ıvel que pessoas n˜ao au-torizadas tenham acesso `a mensagem codificada e consigam determinar seu conte´udo ou mesmo a chave de decodifica¸c˜ao, “quebrando” o c´odigo. A este processo chama-mos de deciframento.

A criptoan´alise (cryptos+analysis= decomposi¸c˜ao) busca determinar a chave de decodifica¸c˜ao ou decifrar a mensagem sem o conhecimento da chave.

Ao estudo ou ciˆencia que re´une a criptografia e a criptoan´alise chamamos de criptologia.

(14)

O uso da criptografia j´a se fazia presente no sistema eg´ıpcio de escrita hierogl´ıfica, h´a aproximadamente quatro mil anos. J´ulio C´esar usava um cifr´ario para comunicar seus planos de batalha aos generais de seu ex´ercito. Tal cifra consistia em transladar as letras do alfabeto trˆes casas adiante. Existem outros c´odigos primitivos semelhantes a este como, por exemplo, o cifr´ario de Vigen`ere [18, §4 On the Origin of the Species] e o cifr´ario de Hill [18, §13 Secrecy for Sale].

A partir do advento dos computadores, os m´etodos de codifica¸c˜ao baseados em substitui¸c˜ao alfab´etica tornaram-se invi´aveis. Na verdade, o primeiro computador foi criado para decifrar as mensagens secretas estabelecidas pelo ex´ercito alem˜ao durante a Segunda Guerra Mundial. As mensagens alem˜aes eram codificadas atrav´es de uma m´aquina chamada Enigma. Um projeto denominado ULTRA foi desenvolvido na ´epoca em Bletchley Park, Inglaterra, para tentar decifrar o c´odigo alem˜ao. Um dos respons´aveis por este projeto era Alan Turing, o idealizador da m´aquina de Turing. Como conseq¨uˆencia deste projeto o primeiro computador foi constru´ıdo, o Colossus.

At´e ent˜ao, o uso da criptografia estava associada a interesses pol´ıticos e militares. Com a crescente utiliza¸c˜ao de redes de computadores, a necessidade de se manter informa¸c˜oes sigilosas tamb´em cresceu. A criptografia segue, ent˜ao, uma nova dire¸c˜ao, deixando de servir a interesses puramente militares ou pol´ıticos e passa a servir a cidad˜aos comuns. Um exemplo disso, ´e a enorme quantidade de transa¸c˜oes banc´arias ou comerciais feitas atrav´es da internet nos dias de hoje.

Particularmente, estaremos interessados na criptografia computacional, onde a seguran¸ca de informa¸c˜oes em redes de computadores, em bancos de dados, em caixas autom´aticos, etc. ´e a principal preocupa¸c˜ao. Mais especificamente, faremos uma rela¸c˜ao entre a criptografia RSA e a Teoria dos N´umeros. Atualmente, o RSA ´e um

(15)

dos m´etodos criptogr´aficos mais usados em aplica¸c˜oes comerciais.

Inicialmente, descreveremos o RSA. Como para codificar uma mensagem usando o RSA ´e preciso obter dois primos grandes, exporemos alguns algoritmos para testar a primalidade de n´umeros. Outro aspecto importante em rela¸c˜ao ao RSA ´e a intrata-bilidade de se fatorar o produto de dois primos grandes, tamb´em ser˜ao apresentados alguns algoritmos de fatora¸c˜ao.

Como em nosso estudo analisaremos a complexidade de alguns algoritmos impor-tantes direta ou indiretamente para a criptografia RSA, faremos as an´alises em termos do tamanho da entrada.

Defini¸c˜ao 0.0.1. Seja n um inteiro positivo. Definimos lg n =

(

1, se n = 0 1 + blog2nc, se n 6= 0 .

(16)

Cap´ıtulo 1

Criptografia Computacional

O uso de rede de computadores, cada vez em maior n´umero de aplica¸c˜oes, depende diretamente da confiabilidade que tais redes oferecem. ´E necess´ario proteger as men-sagens e dados que trafegam nestes meios de comunica¸c˜ao de maneira que somente pessoas ou processos autorizados possam utiliz´a-los. ´E a criptografia que cuida de fornecer seguran¸ca e prote¸c˜ao `a transmiss˜ao dessas informa¸c˜oes e cujos objetivos s˜ao: • Sigilo de informa¸c˜ao que ´e a garantia de que somente pessoas autorizadas te-nham acesso `as informa¸c˜oes. O acesso a saldos banc´arios em caixas autom´aticos ´

e um exemplo disso, onde somente as pessoas autorizadas, mediante cart˜ao e senha pessoal, tˆem acesso a esse tipo de dados.

• Integridade de informa¸c˜ao que garante que a mesma n˜ao sofra nenhum tipo de altera¸c˜ao, intencional ou n˜ao, de seu conte´udo, ou seja, que a informa¸c˜ao se encontre inalterada. Um exemplo desse tipo de aplica¸c˜ao ´e o banco de dados de uma universidade que cont´em os hist´oricos escolares dos alunos. A criptografia dificulta a fraude nas notas dos alunos.

(17)

• Autentica¸c˜ao de informa¸c˜ao serve para identificar pessoas ou processos com quem se est´a estabelecendo comunica¸c˜ao. Como exemplo, a assinatura digital ´

e um an´alogo computacional `a assinatura em um documento tradicional. • N˜ao rep´udio que evita que uma das partes envolvida na comunica¸c˜ao negue

o envio ou o recebimento de uma informa¸c˜ao. Um exemplo disso seria uma empresa que autoriza uma entidade a comprar uma propriedade e depois nega que autorizou tal negocia¸c˜ao.

1.1

Sistemas Criptogr´

aficos

Um sistema criptogr´afico ´e um conjunto de processos criptogr´aficos que fornece seguran¸ca de informa¸c˜oes. Um sistema criptogr´afico consiste de :

• Um conjunto finito A que chamamos de alfabeto de entrada. O alfabeto de entrada pode ser o alfabeto latino, o alfabeto bin´ario ou qualquer alfabeto de alguma l´ıngua. Em se tratando de criptografia computacional, geralmente o alfabeto bin´ario ser´a usado como alfabeto de entrada. Conv´em observar que qualquer tipo de alfabeto pode ser representado como uma cadeia de strings do alfabeto bin´ario.

• Um conjunto M formado por cadeias finitas de elementos de A. Chamamos a este conjunto de espa¸co de mensagens. Cada elemento de M corresponde a um texto simples, n˜ao cifrado.

• Um conjunto C tamb´em formado por cadeias finitas de elementos de A. Este ´e o chamado espa¸co de mensagens codificadas e cada elemento de C corresponde

(18)

a um texto cifrado.

• K um conjunto finito de elementos chamados de chaves que s˜ao ferramentas necess´arias para manter oculta uma informa¸c˜ao.

• E espa¸co de fun¸c˜oes e : M → C onde cada fun¸c˜ao codifica os elementos de M. E ´e o espa¸co de fun¸c˜oes de codifica¸c˜ao.

• D espa¸co de fun¸c˜oes d : C → M onde cada fun¸c˜ao decodifica os elementos de C. Cada elemento k1 ∈ K determina uma ´unica bije¸c˜ao de M em C que denotamos

por ek1. Assim, temos que existe k2 ∈ K que determina uma fun¸c˜ao de decodifica¸c˜ao

dk2 que ´e inversa `a ek1.

Quando se projeta um sistema criptogr´afico deve-se estar atento ao fato de que o sistema deve permanecer seguro mesmo quando os algoritmos de codifica¸c˜ao e de decodifica¸c˜ao s˜ao de conhecimento p´ublico.

Com esse objetivo usam-se pares de chaves, uma para codifica¸c˜ao e outra para decodifica¸c˜ao, devendo haver uma grande n´umero de pares de chaves.

A figura a seguir esbo¸ca um sistema criptogr´afico t´ıpico onde duas fun¸c˜oes s˜ao utilizadas:

Exemplo 1.1.1. Um sistema criptogr´afico simples ´e o cifr´ario de C´esar que j´a menci-onado anteriormente. Consiste em substituir uma letra por outra, trˆes casas adiante. Os conjuntos M e C constituem ambos de textos formados pelas 26 letras do alfabeto latino. Pode-se variar o valor de casas que devemos transladar cada letra e tal valor consiste na chave de codifica¸c˜ao. Obviamente esses valores est˜ao no intervalo [0, 25]. A chave de decodifica¸c˜ao ´e a mesma que a de decodifica¸c˜ao. As fun¸c˜oes de codifica¸c˜ao

(19)

Figura 1.1: Sistema Criptogr´afico

e decodifica¸c˜ao s˜ao as transla¸c˜oes “avan¸cada” e “retroativa”, respectivamente, em trˆes casas no alfabeto.

1.2

Fun¸

oes Unidirecionais

As fun¸c˜oes de codifica¸c˜ao e de decodifica¸c˜ao usadas em criptossistemas s˜ao exem-plos t´ıpicos de fun¸c˜oes unidirecionais. A seguir definiremos fun¸c˜oes unidirecionais. Defini¸c˜ao 1.2.1. Uma fun¸c˜ao unidirecional f ´e uma fun¸c˜ao computacionalmente vi´avel (em tempo, espa¸co e dinheiro) de se calcular f (x) dado x e computacionalmente invi´avel determinar x tal que f (x) = y dado y.

A unidirecionalidade de uma fun¸c˜ao pode ser uma caracter´ıstica intr´ınseca da pr´opria fun¸c˜ao ou depender do estado da arte do avan¸co tecnol´ogico e cient´ıfico como veremos no exemplo a seguir.

(20)

Exemplo 1.2.1. A multiplica¸c˜ao de dois primos grandes (pelo menos 100 d´ıgitos) ´e facilmente calculada com a tecnologia atual, mas dado o produto de dois primos (pelo menos 200 d´ıgitos decimais) obter a fatora¸c˜ao do produto n˜ao ´e vi´avel com a tecnologia atual. A seguran¸ca do criptossistema RSA (pr´oximo cap´ıtulo) ´e baseado na incapacidade de fatorar um n´umero grande rapidamente.

Exemplo 1.2.2. Outro exemplo de fun¸c˜ao unidirecional ´e a exponencia¸c˜ao m´odulo um n´umero, isto ´e, f (x) = ax (mod n), dados a, x e n, com x ≥ 0 e n > 0.

Esta ´e uma fun¸c˜ao vi´avel de se calcular cujo tempo de execu¸c˜ao ´e O(lg x lg2n) [7, Cap.5]. Agora, dados a, n e ax (mod n), calcular x ´e invi´avel. Ainda n˜ao

existe um algoritmo para este problema cuja execu¸c˜ao seja em tempo polinomial. Existem dois tipos de fun¸c˜oes unidirecionais que podem ser com segredo ou sem segredo. Uma fun¸c˜ao unidirecional ´e com segredo quando existe uma informa¸c˜ao (o segredo) que possibilita a computa¸c˜ao de sua inversa e sem segredo caso contr´ario. No caso da fun¸c˜ao fatora¸c˜ao de primos, no exemplo acima, a fun¸c˜ao ´e sem segredo.

1.3

Criptossistemas Sim´

etricos e Assim´

etricos

Quando a chave de decodifica¸c˜ao e a chave de codifica¸c˜ao s˜ao as mesmas em um dado criptossistema ou quando a fun¸c˜ao de decodifica¸c˜ao ´e uma fun¸c˜ao com-putacionalmente vi´avel da chave de codifica¸c˜ao , precisamos manter a chave em sigilo, sendo conhecida apenas pelos usu´arios leg´ıtimos. Neste caso, o sistema ´e dito sim´etrico ou de chave secreta. O cifr´ario de C´esar ´e um exemplo de criptossistema sim´etrico.

(21)

O sistema sim´etrico mais conhecido ´e o DES - Data Encryption Standard adotado pelo governo americano em 1977 como padr˜ao de codifica¸c˜ao para uso em seus ´org˜aos governamentais n˜ao relacionados `a seguran¸ca nacional. Por n˜ao ser objeto de nosso estudo n˜ao descreveremos o DES neste trabalho. A descri¸c˜ao de seu funcionamento pode ser obtida nas referˆencias [23] e [24].

Nos criptossistemas assim´etricos ou de chave p´ublica, a chave de codifica¸c˜ao ´e publicada, ou seja, acess´ıvel `a todos. O conhecimento da chave de codifica¸c˜ao n˜ao compromete a seguran¸ca do sistema. O processo de codifica¸c˜ao tamb´em ´e p´ublico e somente a chave de decodifica¸c˜ao ´e mantida em segredo pelo destinat´ario leg´ıtimo da mensagem.

A id´eia de um sistema de chave p´ublica foi inicialmente introduzido por Diffie e Hellman em 1976. O RSA ´e um sistema criptogr´afico assim´etrico e foi o primeiro criptossistema de chave p´ublica criado. A partir disso, surgiram muitos outros crip-tossistemas de chave p´ublica. O RSA ser´a descrito no pr´oximo cap´ıtulo.

Nos sistemas de chave p´ublica, cada usu´ario possui um par de chaves, sendo que uma ´e a chave de codifica¸c˜ao, colocada `a disposi¸c˜ao daqueles que desejam enviar uma mensagem para o propriet´ario da chave. Suponhamos que um usu´ario A deseje enviar uma mensagem m para um outro usu´ario B. Ent˜ao o usu´ario A consulta a lista de chaves p´ublicas e obt´em a chave de codifica¸c˜ao PB de B. A aplica PB `a mensagem

m e obt´em o texto codificado PB(m) e envia para B. Ap´os receber PB(m), B aplica

a chave secreta SB e obt´em m = SB(PB(m)). Assim, todos os usu´arios que enviam

mensagens codificadas a B usam a mesma chave p´ublica PB, entretanto, somente B

(22)

Cap´ıtulo 2

O Sistema de Chave P´

ublica RSA

O criptossistema de chave p´ublica RSA foi desenvolvido por R. L. Rivest, A. Shamir e L. Adleman em 1978. As iniciais dos autores deram origem ao nome do c´odigo.

O RSA tem base na facilidade de computar o produto de dois primos grandes (pelos menos da ordem 10100 cada) e na dificuldade de fatorar esse produto.

Antes de descrevermos o RSA, estabeleceremos alguns resultados de Teoria dos N´umeros que ser˜ao usados para explicar como o c´odigo funciona.

Defini¸c˜ao 2.0.1. A fun¸c˜ao φ de Euler de um inteiro positivo m, denotada por φ(m), ´e definida como o n´umero de inteiros positivos menores do que ou iguais a m que s˜ao relativamente primos com m.

Observamos que quando p ´e primo, φ(p) = p − 1.

Defini¸c˜ao 2.0.2. Um conjunto {r1, r2, . . . , rφ(m)} ´e um sistema reduzido de res´ıduos

m´odulo m se cada um de seus elementos ´e relativamente primo com m e ri 6≡ rj

(23)

Teorema 2.0.1 (Euler). Se m ∈ Z, m > 0 e a ∈ Z ´e tal que a ∈ Z∗m, ent˜ao

aφ(m) ≡ 1 (mod m).

Prova. Seja {r1, r2, . . . , rφ(m)} um sistema reduzido de res´ıduos m´odulo m. Como

mdc(a, m) = 1, ent˜ao {ar1, ar2, . . . , arφ(m)} tamb´em ´e um sistema reduzido de res´ıduos

m´odulo m (a demonstra¸c˜ao deste resultado pode ser encontrada em [32, Teorema 2.12]). Isto implica que cada ari ´e congruente a exatamente um dos rj’s,

1 ≤ j ≤ φ(m). Logo o produto dos ari’s deve ser congruente ao produto dos rj’s

m´odulo m, ou seja,

ar1· ar2· · · arφ(m) ≡ r1· r2· · · rφ(m) (mod m).

Ent˜ao

aφ(m)r1· r2· · · rφ(m)≡ r1· r2· · · rφ(m) (mod m). (2.0.1)

Pelas caracter´ısticas de sistema reduzido de res´ıduos m´odulo m, ent˜ao o produto Πφ(m)j=1 rj ´e relativamente primo com m. Podemos, ent˜ao, cancelar Πφ(m)j=1 rj em ambos

os lados da congruˆencia (2.0.1), obtendo

aφ(m) ≡ 1 (mod m).

(24)

Teorema 2.0.2. Sejam a, b, m ∈ Z com m > 1 e a ∈ Z∗m. Ent˜ao a congruˆencia

ax ≡ b (mod m) possui solu¸c˜ao ´unica m´odulo m.

Prova. Este resultado ´e uma conseq¨uˆencia do Teorema 2.8 apresentado em [32]. 

2.1

Gera¸

ao das Chaves

Nesse criptossistema, cada usu´ario possui uma chave de codifica¸c˜ao e outra de decodifica¸c˜ao. Para gerar o par de chaves cada usu´ario realiza o seguinte pr´e-c´alculo: • Seleciona-se dois primos grandes p e q (veremos mais adiante que tais primos

devem obedecer alguns requisitos para manter a seguran¸ca do m´etodo). • Calcula-se o produto n = pq e φ(n) = (p − 1)(q − 1).

• Gera-se um inteiro e, 1 < e < φ(n) tal que mdc(e, φ(n)) = 1 (tamb´em temos que tal expoente deve obedecer certos crit´erios de seguran¸ca [24, §8.2.2 Security of RSA]).

• Determina-se d, 0 ≤ d < φ(n) tal que ed ≡ 1 mod φ(n), ou seja, d ´e o inverso multiplicativo de e m´odulo φ(n).

A gera¸c˜ao dos primos p e q ser´a discutida no cap´ıtulo seguinte sobre primalidade. Obtidos tais primos, facilmente se calcula n e φ(n). Usando-se um gerador pseudo-aleat´orio podemos obter e e determinamos o mdc(e, φ(n)) atrav´es do algoritmo de Euclides cuja a complexidade ´e O(lg2(φ(n))) [7, Cap.4]. A solu¸c˜ao d da congruˆencia

(25)

ed ≡ 1 mod φ(n) tamb´em pode ser obtida atrav´es do algoritmo estendido de Euclides [13, Se¸c˜ao 31.4].

Feitos os c´alculos acima, o usu´ario publica P = (e, n) como chave de codifica¸c˜ao e mant´em em segredo S = (d, n) (na verdade, somente d ´e mantido em segredo) que ´e a chave de decodifica¸c˜ao.

Observamos que d determinado acima existe e ´e ´unico, conforme o Teorema 2.0.2.

2.2

Codifica¸

ao e Decodifica¸

ao

Agora veremos como as chaves P e S geradas acima s˜ao aplicadas para codificar e decodificar mensagens. Inicialmente, a mensagem ´e convertida em uma seq¨uˆencia de n´umeros bin´arios. Essa seq¨uˆencia gerada ´e quebrada em blocos de bits que repre-sentam inteiros m no intervalo [0, n). Ent˜ao cada bloco m ´e codificado.

A codifica¸c˜ao associada a chave P = (e, n) ´e feita atrav´es da fun¸c˜ao P (m) = me (mod n)

e a decodifica¸c˜ao de uma cifra c := P (m) em rela¸c˜ao a chave S = (d, n) ´e dada por S(c) = cd (mod n).

Dessa forma, o RSA ´e um criptossistema cujo alfabeto de entrada ´e o alfabeto bin´ario, o espa¸co de poss´ıveis mensagens e o espa¸co de mensagens codificadas ´e o conjunto Zn.

As exponencia¸c˜oes modulares podem ser efetuadas rapidamente como citamos no Exemplo 1.2.2. Al´em disso, temos que calcular a inversa da fun¸c˜ao exponencial m´odulo n ´e computacionalmente intrat´avel.

(26)

Chega o momento de se verificar se o m´etodo acima realmente funciona, ou seja, se decodificando um bloco codificado obtemos o bloco da mensagem original. O pr´oximo teorema responde a esta quest˜ao.

Teorema 2.2.1. A decodifica¸c˜ao do RSA funciona.

Prova. Seja c = P (m) = me (mod n) a codifica¸c˜ao de um bloco m. Como

ed ≡ 1 mod φ(n), existe t tal que ed = 1 + tφ(n). Se mdc(m, p) = 1, usando o Teorema 2.0.1 temos que mp−1 1 (mod p). Ent˜ao (mp−1)t(q−1) =

= mt(p−1)(q−1) ≡ 1 (mod p) ⇒ m1+t(p−1)(q−1) = med ≡ m (mod p). Agora, se

mdc(m, p) = p, ent˜ao a ´ultima congruˆencia ´e v´alida novamente pois cada lado ´e congruente a 0 m´odulo p. Assim, temos med ≡ m (mod p) em todos os casos.

De forma an´aloga, med ≡ m (mod q). Como p e q s˜ao primos distintos, ent˜ao

med ≡ m (mod n). Da´ı, cd= (me)d≡ m (mod p).



2.3

Assinatura Digital

Uma caracter´ıstica importante do sistema RSA ´e que S(P (m)) = P (S(m)), isto ´e, S e P comutam. De fato,

S(m) ≡ md mod n ⇒ P (S(m)) ≡ (md)e mod n ⇒ P (S(m)) ≡ med mod n ⇒ P (S(m)) ≡ m mod n, e conforme a demonstra¸c˜ao do Teorema 2.2.1 temos S(P (m)) ≡ m mod n.

(27)

Os sistemas em que a codifica¸c˜ao e a decodifica¸c˜ao comutam s˜ao ditos sistemas comutativos e admitem uma assinatura digital natural.

Assim, no sistema RSA ´e poss´ıvel “decodificar” uma mensagem e depois “codificar” o resultado. Suponhamos que um usu´ario A deseje enviar uma mensagem assinada a um usu´ario B. Para isso, basta que A envie o texto SA(m). Somente A

tem a chave secreta SA usada para computar SA(m). B aplica a chave p´ublica de A

a SA(m) para obter o texto original m = PA(SA(m)). Qualquer usu´ario com o uso de

PA pode verificar que A ´e realmente o remetente da mensagem, pois somente A tem

acesso a chave SA.

2.4

Seguran¸

ca do RSA

Veremos que a seguran¸ca do RSA depende em grande parte da dificuldade em fatorar n´umeros grandes. Analisaremos as poss´ıveis maneiras de obter a mensagem original codificada pelo RSA.

Fatorar n implica decodificar uma mensagem no RSA, pois encontrando os fatores de n, ´e poss´ıvel calcular φ(n). Como ed = 1 (mod φ(n)), ent˜ao a solu¸c˜ao d dessa congruˆencia pode ser obtida facilmente atrav´es do Algoritmo Estendido de Euclides. Agora, analisaremos algumas poss´ıveis maneiras de obter a mensagem original codificada pelo RSA conhecendo-se somente a chave p´ublica.

Suponhamos que seja poss´ıvel determinar de alguma forma φ(n) usando o par (e, n) sem ter que fatorar n. Logo, n e φ(n) s˜ao conhecidos. Sabendo que existem p e q tais que n = pq e φ(n) = (p − 1)(q − 1) temos que

(28)

Assim, conhecemos p + q = n − φ(n) + 1. Tamb´em temos que

(p + q)2− 4n = (p2+ 2pq + q2) − 2pq = p2− 2pq + q2 = (p − q)2.

A partir disso, o valor de p − q =p(p + q)2− 4n tamb´em ´e conhecido. De posse dos

valores de p + q e p − q, obtemos os valores de p e q, isto ´e, achamos a fatora¸c˜ao de n. Se de alguma maneira podermos determinar d somente com o conhecimento de n e e, ent˜ao encontramos a fatora¸c˜ao de n. De fato, como ed − 1 = tφ(n), isto significa que encontramos um m´ultiplo de φ(n). ´E poss´ıvel fatorar n a partir de qualquer m´ultiplo de φ(n). Miller [25] mostrou que considerando-se a Hip´otese Estendida de Riemman, isto pode ser feito de maneira eficiente.

Outra maneira de se conseguir m seria inverter a fun¸c˜ao de codifica¸c˜ao, isto ´e, encontrar a raiz e-´esima m´odulo n. At´e agora n˜ao se conseguiu provar que inverter a fun¸c˜ao de codifica¸c˜ao, dado o par (e, n) e a codifica¸c˜ao de c := me (mod n), ´e

equivalente a fatorar n. Por´em sabemos que este problema ´e computacionalmente invi´avel, conforme exemplo 1.2.2.

At´e o momento, n˜ao se conhece uma maneira eficiente de fatorar um n´umero grande. Assim, o RSA tem se mostrado seguro com a tecnologia atual.

Para manter tal seguran¸ca deve-se tomar alguns cuidados para com rela¸c˜ao a escolha dos parˆametros p e q:

• os n´umeros p e q n˜ao podem ser pr´oximos um do outro, caso contr´ario estar˜ao pr´oximos da√n o que torna poss´ıvel fatorar n atrav´es da fatora¸c˜ao de Fermat que ser´a apresentado no ´ultimo cap´ıtulo.

(29)

• Os n´umeros p − 1 e q − 1 devem ter fatores primos grandes. Com alguns algoritmos de fatora¸c˜ao conhecidos, fica f´acil fatorar n se p − 1 e q − 1 tem fatores pequenos, como ´e o caso do algoritmo ρ − 1 de Pollard.

(30)

Cap´ıtulo 3

Testes de Primalidade

Desde a antiguidade at´e os tempos atuais, os n´umeros primos tˆem atra´ıdo a aten¸c˜ao de muitos estudiosos. Em tempos remotos, Erast´ostenes (240 a.C aproxi-madamente) desenvolveu uma maneira de determinar se um dado inteiro positivo n ´e primo. Para isto basta tentar dividir n por todos os inteiros menores do que ou iguais a√n (em [32] o Teorema 1.15 garante que se n n˜ao ´e primo, ent˜ao n tem um fator primo menor do que ou igual a √n). Assim se n n˜ao for divis´ıvel por nenhum dos n´umeros, ent˜ao n ´e primo. Tal m´etodo ´e conhecido como Crivo de Erast´ostenes. No entanto, este m´etodo torna-se impratic´avel quando n ´e muito grande.

Posteriormente, surgiram outros m´etodos como, por exemplo, o Teste de Pepin que determina se um n´umero de Fermat ´e primo, o Teste de Lucas-Lehmer para determinar a primalidade de um n´umero de Mersenne , e outros.

Atualmente, uma das raz˜oes para que a primalidade de n´umeros tenha recebido mais aten¸c˜ao ´e o seu uso em diversos criptossistemas como, por exemplo, o RSA. Vimos que ´e de grande importˆancia para a Criptografia RSA a capacidade de produzir primos grandes de forma gen´erica e provar que estes s˜ao realmente primos.

(31)

O problema de gerar um primo grande, a princ´ıpio, pode ser resolvido escolhendo-se inteiros aleat´orios em um intervalo espec´ıfico e testando a primalidade de tais n´umeros.

Neste cap´ıtulo, apresentaremos alguns dos testes de primalidade existentes, nos restringindo `aqueles que testam a primalidade de n´umeros gen´ericos . Os dois pri-meiros testes apresentados s˜ao testes probabil´ısticos: o teste de Solovay-Strassen e o teste de Miller-Rabin com bases em resultados importantes da Teoria de N´umeros. ´E importante ressaltarmos que tais testes quando respondem que dado n´umero ´e primo devemos ter em mente que isto ´e apenas uma boa evidˆencia que tal n´umero seja mesmo primo. Em muitas aplica¸c˜oes isto j´a ´e o suficiente, como ´e o caso em que procuramos por um primo grande. No entanto, estes testes n˜ao produzem certifica-dos de primalidade, provas de que o n´umero seja realmente primo. E se realmente ´e necess´aria uma prova de primalidade aplica-se outros tipos de testes, como ´e o caso do algoritmo de Goldwasser-Killian e de Atkin, baseados na teoria de curvas el´ıpticas. Tais algoritmos, no entanto, n˜ao fazem parte deste trabalho. Maiores informa¸c˜oes sobre esses algoritmos podem ser obtidas em [6] e [17].

Por ´ultimo, apresentaremos um algoritmo determin´ıstico que testa a primalidade de um n´umero em tempo polinomial. Tal algoritmo foi apresentado recentemente, constituindo um dos mais novos resultados relacionados `a primalidade e que tem ganho grande admira¸c˜ao por todos da ´area.

(32)

3.1

Distribui¸

ao de Primos

Para gerar um primo em um intervalo dado escolhemos um inteiro ´ımpar aleat´orio e verificamos se este inteiro ´e primo. Se n˜ao for primo, geramos outro inteiro e testamos sua primalidade. Continuamos com este processo at´e encontrarmos um n´umero primo.

Mas quantos candidatos devemos testar at´e encontrar um prov´avel primo? A melhor forma de responder `a esta pergunta ´e usando a chamada fun¸c˜ao π. Se x > 0, π(x) ´e definida como sendo o n´umero de primos menores do que ou iguais a x.

O Teorema dos N´umeros Primos [1] afirma que: lim x→∞ π(x) x log(x) = 1.

Ent˜ao, log(x)x ´e uma boa aproxima¸c˜ao para π(x) quando x for suficientemente grande. Assim, podemos estimar que um inteiro x escolhido aleatoriamente tem pro-babilidade igual a log(x)1 de ser primo, isto ´e, temos que examinar aproximadamente log(x) inteiros pr´oximos de x para acharmos um n´umero primo da mesma ordem que x. Um exemplo disso ´e que temos que testar log 10100 ≈ 230 candidatos, aproxima-damente, at´e encontrarmos um primo de 100 d´ıgitos decimais, e este valor pode ser reduzido `a metade se considerarmos somente os n´umeros ´ımpares. Uma m´edia de 115 candidatos que ter˜ao que ser testados.

(33)

3.2

Teste de Solovay-Strassen

A fim de descrever o teste de Solovay-Strassen introduziremos alguns conceitos matem´aticos, incluindo o Crit´erio de Euler.

Defini¸c˜ao 3.2.1. Sejam p um primo positivo ´ımpar e a ∈ Z. Se a ∈ Zp e se existe uma solu¸c˜ao da congruˆencia

x2 ≡ a mod p,

ent˜ao a ´e chamado um res´ıduo quadr´atico m´odulo p. Se n˜ao existe solu¸c˜ao, ent˜ao a ´e dito ser um res´ıduo n˜ao quadr´atico m´odulo p.

Defini¸c˜ao 3.2.2. Seja a um inteiro. Para um primo ´ımpar p > 1, definimos o s´ımbolo de Legendre ap por

 a p  =      0, se a ≡ 0(mod p)

1, se a ´e res´ıduo quadr´atico mod p −1, se a ´e res´ıduo n˜ao quadr´atico mod p.

Defini¸c˜ao 3.2.3. Seja um n´umero n > 1 um inteiro ´ımpar com decomposi¸c˜ao n = k Y i=1 pei i .

Ent˜ao o S´ımbolo de Jacobi ´e definido como a n  = k Y i=1  a pi ei = a p1 e1 a p2 e2 . . . a pk ek . O s´ımbolo de Jacobi ´e uma generaliza¸c˜ao do s´ımbolo de Legendre.

Propriedades do S´ımbolo de Jacobi Sejam m e n inteiros ´ımpares positivos, e sejam a, b inteiros. Ent˜ao

(34)

b. a n =

b

n, se a ≡ b(mod n).

As demonstra¸c˜oes destas propriedades se encontram em [7, Teorema 5.9.2]. Teorema 3.2.1 (Crit´erio de Euler). Se p ´e um primo positivo ´ımpar e a ∈ Zp, ent˜ao

ap−12 ≡ a

p 

(mod p). (3.2.1) Prova. Suponhamos, primeiramente, que ap = 1. Ent˜ao, existe x tal que x2 ≡ a(mod p). Do fato que mdc(a, p) = 1 e p|(x2− a) conclu´ımos que mdc(x, p) = 1.

Logo, pelo Teorema 2.0.1, xp−1≡ 1(mod p) e, portanto, ap−12 ≡ x2

p−1

2 = xp−1≡ 1(mod p).

Consideremos agora o caso ap = −1. J´a vimos acima que se a for um res´ıduo quadr´atico ent˜ao xp−12 ≡ 1(mod p). A congruˆencia f (x) = x

p−1

2 − 1 ≡ 0(mod p) possui

no m´aximo p−12 solu¸c˜oes incongruentes m´odulo p (ver Teorema 5.2 em [32]).

No entanto, do fato de existirem p−12 res´ıduos quadr´aticos e de termos ap−12 ≡ 1(mod p) para todo res´ıduo quadr´atico, conclu´ımos que todos estes res´ıduos

quadr´aticos s˜ao solu¸c˜oes de f (x) ≡ 0(mod p), o que nos garante que f (x) ≡ 0(mod p) possui

exatamente p−12 ra´ızes, e que se a n˜ao for res´ıduo quadr´atico, isto ´e,  a p  = −1, ent˜ao ap−12 6≡ 1(mod p).

Como ap−1− 1 = (ap−12 − 1)(ap−12 + 1) e ap−1− 1 ≡ 0(mod p) para mdc(p, a) = 1,

conclu´ımos que a(p−1)2 ≡ ±1(mod p).

Assim, se a p



= −1, temos ap−12 ≡ −1(mod p). Portanto, a p−1 2 =  a p  (mod p). 

(35)

Desta forma, o Crit´erio de Euler nos diz que se an−12 6≡ a n



(mod n) para algum a tal que a ∈ Z∗n, ent˜ao n ´e composto e a ´e dito testemunha da composi¸c˜ao de n. Se

um n´umero n composto satisfaz a congruˆencia (3.2.1), n ´e denominado pseudoprimo de Euler para a base a. Chamamos de n´umero de Carmichael o composto n que satisfaz (3.2.1) para todo a ∈ Z∗n.

Lema 3.2.1. Se n ´e um n´umero de Carmichael, ent˜ao n n˜ao ´e divis´ıvel pelo quadrado de nenhum primo e ´e divis´ıvel por pelo menos 3 primos distintos.

Prova. Demonstra¸c˜ao em [7, Teorema 9.3.6].

 Consideraremos, agora, o conjunto E(n), importante nos pr´oximos resultados, definido como o conjunto de bases a ∈ Z∗n tal que n satisfaz a congruˆencia (3.2.1) do

Crit´erio de Euler, ou seja,

E(n) =na ∈ Zn:a n  ≡ an−12 (mod n) o .

Lema 3.2.2. Seja n um inteiro ´ımpar, n ≥ 3. Portanto, n ´e primo se, e somente se, E(n) = Z∗n.

Prova. Se n ´e primo, ent˜ao, usando o Crit´erio de Euler, temos an ≡ an−12 (mod n)

para todo a ∈ Z∗n. Logo, E(n) = Z∗n.

Reciprocamente, suponhamos que E(n) = Z∗n e n seja composto. Ent˜ao, para

todo a ∈ Z∗n tem-se:

an−1 ≡a n

2

(36)

Como n ´e um n´umero de Carmichael, ent˜ao n˜ao ´e divis´ıvel pelo quadrado de nenhum primo (conforme Lema 3.2.1). Ent˜ao n = p · q, com p primo, q > 1 e mdc(p, q) = 1. Sejam g um res´ıduo n˜ao quadr´atico m´odulo p, e seja a ≡ g(mod p) e a ≡ 1(mod q), pelas propriedades do s´ımbolo de Jacobi temos que

a n  = a pq  = a p   a q  = g p   1 q  = (−1)(+1) = −1.

J´a que supomos que na = −1 ≡ an−12 (mod n) para todo a ∈ Z∗

n ⇒

⇒ an−12 ≡ −1(mod q), o que contradiz o fato de a ≡ 1(mod q).

 Baseado no teorema acima descoberto por R. Solovay e V. Strassen, inicialmente apresentado em [34], descreveremos a seguir um algoritmo para testar a primalidade de um n´umero ´ımpar ≥ 3.

Algoritmo 1 (SOLOVAY-STRASSEN(n)). escolha a aleat´orio em {1, . . . , n − 1} 1. se mdc(a, n) 6= 1

ent˜ao retorne “composto” e pare sen˜ao

2. se a n 6≡ a

n−1

2 (mod n)

ent˜ao retorne “composto” e pare sen˜ao retorne “primo”

(37)

O algoritmo SOLOVAY-STRASSEN [7] nos diz que tomando-se aleatoriamente um n´umero a ∈ {1, . . . , n − 1} onde n ´e um inteiro ´ımpar, verificamos se mdc(a, n) 6= 1, o que implica n ser composto. Mas se mdc(a, n) = 1, computamos o res´ıduo ε = an−12 (mod n) e o s´ımbolo de Jacobi δ = a

n. Se δ = ε, ent˜ao o algoritmo retorna

que n ´e primo. Caso contr´ario, n ´e composto.

Obviamente, se n ´e primo, o algoritmo responder´a corretamente, pois no passo (1) o algoritmo nunca encontrar´a mdc n˜ao trivial e pelo Crit´erio de Euler a congruˆencia sempre ´e satisfeita e o passo (2) sempre retornar´a que n ´e primo.

Mas sendo n composto, qual a probabilidade de o algoritmo retornar “primo”? A proposi¸c˜ao a seguir afirma que a probabilidade de erro menor do que ou igual a 12. Teorema 3.2.2. Se n ´e um n´umero composto ´ımpar, ent˜ao para pelo menos metade de todas bases a ∈ {1, . . . , n−1} o algoritmo SOLOVAY-STRASSEN retornar´a “composto”. Prova. Seja n um composto ´ımpar. Se a /∈ Zn, o passo (1) retorna “composto”. Consideremos a ∈ Z∗n. Usando o Lema 3.2.2, temos E(n) 6= Z

n. Como E(n) ´e

subgrupo de Z∗n, segue que E(n) ´e um subgrupo pr´oprio de Z ∗ n. Logo: |E(n)| ≤ 1 2|Z ∗ n| ≤ n − 1 2 , pelo Teorema de Lagrange.

Portanto, no m´aximo metade dos n´umeros entre 1 e n − 1 conduzir˜ao a uma resposta de que n ´e primo.

(38)

O algoritmo SOLOVAY-STRASSEN tem complexidade O(lg3n) bit opera¸c˜oes, j´a que podemos calcular mdc(a, n) e o s´ımbolo de Jacobi na usando O(lg2n) bit opera¸c˜oes,

e an−12 (mod n) usando O(lg3n) bit opera¸c˜oes (para maiores detalhes da complexidade

acima ver [7, Teorema 9.4.2]).

Assim, o resultado de Solavay e Strassen nos garante que se n ´e um primo, o algoritmo sempre retornar´a “primo”, pois a congruˆencia (3.2.1) vale para cada a ∈ {1, . . . , n − 1} gerado e tamb´em garante uma margem de erro menor do que ou igual a 12 para cada vez que aplicarmos o algoritmo para uma determinada base a, se n n˜ao ´e primo. Se aplicarmos o teste k vezes para distintos valores de a, ent˜ao as chances de n ser realmente primo, quando o teste o declara primo, ´e de pelo menos 1 −21k.

3.3

Teste de Miller-Rabin

Discutiremos, agora, outro teste probabil´ıstico baseado no conceito de pseudoprimo forte. Inicialmente, veremos alguns resultados importantes relaciona-dos ao teste de Miller e Rabin

Defini¸c˜ao 3.3.1. O menor expoente e tal que ae ≡ 1(mod n) ´e chamado ordem de a m´odulo n e denotado por e = ordna.

Lema 3.3.1 (Pocklington). Seja n um inteiro positivo. Suponhamos que n − 1 = qkr, k ≥ 1, onde q ´e primo e q - r. Se existe a tal que an−1 ≡ 1(mod n) e

(39)

Prova. Suponhamos que a satisfa¸ca as hip´oteses do lema. Seja p um primo tal que p|n e seja t = ordpa. Como an−1 ≡ 1(mod n), sabemos que an−1 ≡ 1(mod p). Assim,

t|(n − 1) = qkr. Al´em disso, como mdc(an−1q −1, n) = 1, ent˜ao temos a n−1

q 6≡ 1(mod p)

e t n˜ao divide (n − 1)/q = qk−1· r. Da´ı, qk|t. J´a que t|(p − 1) segue que qk|p − 1.

Portanto, p ≡ 1(mod qk).

 Teorema 3.3.1. Seja n ´ımpar e n − 1 = 2kq com q ´ımpar e k ≥ 1. Se n ´e primo e a ∈ Z∗n, ent˜ao aq ≡ 1(mod n) ou existe um i ∈ {0, 1, . . . , k − 1} tal que

a2iq ≡ −1(mod n).

Prova. Consideremos a seguinte seq¨uˆencia de potˆencias m´odulo n: aq, a2q, . . . , a2k−1q, a2kq.

Se n for um n´umero primo, ent˜ao pelo menos uma destas potˆencias tem que ser congruente a 1 m´odulo n, pois, pelo Teorema de Euler, temos

a2kq = an−1 ≡ 1(mod n).

Seja i ≥ 1 o menor expoente tal que a2iq ≡ 1(mod n). Podemos escrever a2iq− 1 = (a2i−1q

− 1)(a2i−1q

+ 1). Como n ´e primo e n|(a2iq

− 1), ent˜ao ou n|(a2i−1q

− 1) ou n|(a2i−1q

+ 1). Sendo i o menor expoente tal que a2iq

− 1 ´e divis´ıvel por n, ent˜ao a2i−1q

− 1 n˜ao ´e divis´ıvel por n. Segue que n divide a2i−1q

+ 1, isto ´e, a2i−1q

(40)

Conclu´ımos que se n ´e primo, ent˜ao uma das potˆencias da seq¨uˆencia dada tem que ser congruente a −1 m´odulo n quando i ≥ 1. Agora, se i = 0 ent˜ao aq ≡ 1(mod n) e

a esta congruˆencia n˜ao podemos aplicar o produto not´avel, pois q ´e ´ımpar.

Portanto, se n ´e primo, ent˜ao uma das potˆencias da seq¨uˆencia ´e congruente a −1 m´odulo n ou aq≡ 1(mod n).

 A seguir apresentaremos dois lemas importantes na an´alise do teste de Miller-Rabin. Para isto, definimos o conjunto

S(n) = {a ∈ Z∗n; a

q ≡ 1(mod n) ou a2iq

≡ −1(mod n)}

para algum 0 ≤ i < t onde n − 1 = 2tq. Todo a 6∈ S(n) ´e dito testemunha forte da

composi¸c˜ao de n.

Um n´umero composto n tal que existe a ∈ S(n) ´e chamado de pseudoprimo forte. Lema 3.3.2. Seja n ≥ 3 um inteiro ´ımpar. S(n) = Z∗n se, e somente se, n ´e primo.

Prova. Suponhamos que ∃a ∈ Zntal que a n˜ao est´a em S(n), ent˜ao a ´e testemunha da composi¸c˜ao de n. Logo, n ´e composto.

Reciprocamente, seja n primo. Se a ∈ Z∗n arbitr´ario, temos que an−1≡ 1(mod n).

Como

(an−12 )2 = an−1≡ 1(mod n)

e a equa¸c˜ao x2 ≡ 1(mod n) tem somente duas solu¸c˜oes, a saber x = ±1, ent˜ao

an−12 = a2 t−1q

(41)

Se an−12 ≡ −1(mod n), ent˜ao a ∈ S(n). Agora, se a n−1 2 ≡ +1(mod n), novamente temos an−14 = a 2tq 4 = a2 t−2q ≡ ±1(mod n).

Prosseguindo desta maneira, para qualquer a ∈ Z∗n teremos ou aq ≡ 1(mod n) ou

a2jq

≡ −1(mod n) para algum j , 0 ≤ j < t.

 Lema 3.3.3. Se n > 3 ´e um composto ´ımpar, ent˜ao |S(n)| ≤ n−14 .

Prova. Suponhamos que n = 1 + 2tq, com q ´ımpar, seja um n´umero composto.

Podemos escrever n = pe1

1 · · · perr. Seja k o maior inteiro tal que exista pelo

me-nos um b ∈ Z∗n com b2 k

≡ −1(mod n). Notamos que k est´a bem definido, pois (−1)20 ≡ −1(mod n) e assim k ≥ 0. Tamb´em temos k ≤ v(u) − 1, onde u ´e o menor inteiro positivo tal que au = 1, ∀a ∈ Zn e v(u) ´e o maior inteiro tal que 2v(u)|u.

Temos pi ≡ 1 (mod 2k+1), 1 ≤ i ≤ r, pelo Lema 3.3.1, ent˜ao n ≡ 1(mod 2k+1).

Tomemos m = 2kq. Ent˜ao 2m | (n − 1). Consideremos os seguintes subgrupos de Z∗n: J = {a ∈ Z∗n; an−1 ≡ 1(mod n)} K = {a ∈ Z∗n; am ≡ ±1(mod p ei i ), ∀i} L = {a ∈ Z∗n ; am ≡ ±1(mod n)} M = {a ∈ Z∗n; am ≡ 1(mod n)} . Temos M ⊆ L ⊆ K ⊆ J ⊆ Z∗n.

(42)

Vemos que todo a ∈ S(n) tamb´em pertence a L, pois se aq ≡ 1(mod n), ent˜ao

´e ´obvio que am ≡ 1(mod n), enquanto que se a2sq

≡ −1(mod n) para algum s ent˜ao s ≤ k, pela defini¸c˜ao de k. Mostraremos que, desde que n 6= 9, L ´e um subgrupo de ´ındice pelo menos 4 em Z∗n e, a partir disto, temos que |S(n)| ≤

n−1 4 .

Todo elemento de G = {a ∈ Z∗n; a ≡ ±1(mod p ei

i ), ∀i} ´e uma 2k-´esima potˆencia; da´ı

uma m-´esima potˆencia, basta tomar x ≡ b ou x ≡ b2(mod pei

i ) que implica que x2 k

≡ ±1(mod pei

i ) para cada i. Dessa maneira, M tem ´ındice 2r em

K = {a ∈ Z∗n ; am ∈ G}. Analogamente, M tem ´ındice 2 em L. Assim,

(K : L) = 2r−1. Logo, (Z∗n : L) ≥ (Z ∗ n: J )(K : L) = 2 r−1 (Z∗n : J ). Se r ≥ 3, segue que (Z∗n : J ) ≥ 4.

No entanto, se r = 2 ent˜ao n n˜ao pode ser um n´umero de Carmichael que ´e divis´ıvel por pelo menos 3 primos distintos (Lema 3.2.1). Ent˜ao ∃a ∈ Zncom an−16≡ 1(mod n),

e assim J ´e um subgrupo pr´oprio de Zn e portanto (Zn : J ) ≥ 2. Logo, (Zn: L) ≥ 4. Finalmente, se r = 1 ent˜ao n = pe, e ≥ 2. Mas ent˜ao, |J | = p − 1, e (Z

n : J ) =

= pe−1 ≥ 4, exceto quando pe = 9. Quando n = 9 existem exatamente 2 elementos

de S(n), a saber 1 e −1. Ent˜ao, o n´umero de elementos ´e ≤ n−14 .

 Como resultado deste lema, descreveremos um algoritmo para testar a primali-dade de n [7, Cap.9].

(43)

Algoritmo 2 (MILLER-RABIN(n)). 1. escolha a ∈ {1, . . . , n − 1} aleat´orio 2. escreva n − 1 = 2tq, q ´ımpar

3. calcule sucessivamente a0 = aq(mod n), a1 = a20(mod n), . . . , ak = a2k−1(mod n)

at´e que k = t ou ak ≡ 1(mod n)

4. se k = t e ak6≡ 1(mod n) retorne “composto”

5. sen˜ao se k = 0 ent˜ao retorne “primo”

6. sen˜ao se ak−16≡ −1 (mod n) ent˜ao retorne “composto”

7. sen˜ao retorne “primo”

Teorema 3.3.2. Se n ´e primo, ent˜ao MILLER-RABIN sempre retornar´a “primo”. Prova. No passo (4) nunca retornar´a “composto”, j´a que sempre existe j tal que a2jq ≡ 1(mod n), 1 ≤ j ≤ t. Seja k o menor ´ındice tal que ak ≡ 1(mod n), isto

´e, ak = a2 kq

≡ 1(mod n). Se k = 0, o algoritmo retornar´a “primo” em (5). Caso contr´ario, devemos ter ak−1 ≡ −1(mod n), o algoritmo retorna “primo” nos passos

(6) e (7).

(44)

Teorema 3.3.3. Se n ´e um n´umero composto, ent˜ao o algoritmo MILLER-RABIN re-torna “composto” para pelo menos 34 de todos os a ∈ Zn.

Prova. Seja n um composto ´ımpar. Se a 6∈ Zn, ent˜ao nunca acontecer´a a situa¸c˜ao onde teremos a2tq

≡ 1(mod n). Teremos ent˜ao k = t e ak 6≡ 1(mod n). Logo, o passo

(4) declarar´a que n ´e composto.

Agora, se a ∈ Z∗n, pelo Lema 3.3.3 temos que pelo menos 3/4 de todos a ∈ Z ∗ n s˜ao

testemunhas fortes da composi¸c˜ao de n e para estes valores de a o algoritmo retornar´a “composto”.

 Observamos que a maior parte do tempo gasto pelo algoritmo ´e para calcular aq,

a2q, . . ., a2tq

(mod n). Podemos calcular aq(mod n) usando O(lg3n) bit opera¸c˜oes via

um algoritmo que calcula potˆencias m´odulo n (detalhes da complexidade do algoritmo em [7, Teorema 9.4.5]) , e para calcular o restante das potˆencias fazendo o quadrado m´odulo n que tamb´em usa O(lg3n) bit opera¸c˜oes.

Desta forma, se n ´e primo, o algoritmo responder´a corretamente que n ´e primo. Mas, se n ´e composto, as chances do algoritmo retornar “primo” ´e de no m´aximo

1

4. Assim, o algoritmo procurar´a encontrar uma testemunha de composi¸c˜ao para n.

Se nenhuma testemunha ´e encontrada, ent˜ao ´e declarado “primo” com probabilidade de acerto de pelo menos 1 − 14. E se n˜ao ´e detectada nenhuma testemunha ap´os k aplica¸c˜oes do teste de Miller-Rabin com diferentes bases aleat´orias, a taxa de erro diminui para 41k.

Entretanto, tal taxa de erro ´e frequentemente muito menor. Monier [26] d´a uma f´ormula exata para esta margem de erro, que nunca excede (φ(n)/2r−1 − 2)/(n − 3)

(45)

onde r ´e o n´umero de fatores primos distintos de n e φ(n) ´e a fun¸c˜ao de Euler. Miller [25] e Bach [8] observaram que se assumirmos que a Hip´otese Generalizada de Riemann ´e verdadeira, um n´umero ´e primo se, e somente se, passa pelo teste para todas as bases a com 1 < a ≤ 2(log(n))2. Isto faz com que o teste de Miller-Rabin

se torne determin´ıstico. Tamb´em podemos obter uma vers˜ao determin´ıstica para o teste de Solovay-Strassen considerando a Hip´otese Generalizada de Riemann.

3.4

Teste de Agrawal-Kayal-Saxena

At´e h´a pouco tempo atr´as, os algoritmos existentes para testar primalidade ou eram probabil´ısticos com complexidade polinomial ou eram determin´ısticos mas pouco eficientes ou dif´ıceis de implementar.

Por´em em 2002, Agrawal, Kayal e Saxena do Instituto Indiano de Tecnologia em Kanpur anunciaram um teste de primalidade determin´ıstico polinomial que sempre funciona sem considerar conjecturas. Al´em disso, as ferramentas matem´aticas empre-gadas s˜ao consideravelmente mais simples que em testes anteriores (em particular, o teste APR [2]).

A id´eia b´asica de tal teste tem como suporte o seguinte teorema. Teorema 3.4.1. Suponha que a ∈ Z∗p. Ent˜ao p > 1 ´e primo se, e s´o se,

(x − a)p ≡ (xp− a) (mod p). (3.4.1)

Prova. Pelo Teorema Binomial de Newton, temos que (x − a)p = = Pp

i=0

 p i



(46)

=Pp−1 i=1  p i  (−1)p−ixiap−i.

Supondo p primo, temos ap ≡ a mod p (Lema 3.4.4). Caso p ´ımpar, ent˜ao (−a)p = −ap ≡ −a mod p. Caso p = 2, temos −a ≡ a mod 2, da´ı (−a)p =

= ap ≡ a ≡ −a mod 2. Logo, P (x) = (x − a)p− (xp− a). Como p

i 

≡ 0 (mod p) para 1 ≤ i < p, j´a que p aparece no numerador de  p

i 

, mas n˜ao no denominador. Logo, P (x) ≡ 0 (mod p).

Suponhamos que p seja composto. Seja q um primo divisor de p e seja k ≥ 1 o maior inteiro tal que qk | p (p = qkc, c ∈ Z). Temos que  p

q 

= q!(p−q)!p! = = (q−1)!(p−q)!qk−1c(p−1)!.

Vamos mostrar que p n˜ao divide p q



. Suponhamos que p divide p q  . Ent˜ao qk divide  p q 

. Isto significa que q divide (p − 1)! (q − 1)!(p − q)! = (p − 1)(p − 2) · · · (p − q + 1)(p − q)! (q − 1)!(p − q)! = (p − 1)(p − 2) · · · (p − q + 1) (q − 1)! .

Logo, q|(p − j) para algum j ∈ {1, . . . , q − 1}. Assim, q|j, o que ´e contradi¸c˜ao pois j < q e q primo.

Desta forma,  p q



6≡ 0 (mod p), 1 < q < p. Sendo mdc(a, p) = 1, ent˜ao  p

q 

ap−q 6≡ 0 (mod p), que ´e o coeficiente de xqem (x−a)p. Mas como o coeficiente

de xq em xp− a ´e nulo, temos xp− a 6≡ (x − a)p mod p.

(47)

Examinando a expans˜ao binomial inteira de (x − a)n, tal resultado nos garantiria

uma maneira infal´ıvel de saber se n ´e primo, pois caso todos os termos que est˜ao no “meio” da expans˜ao tivessem coeficientes divis´ıveis por n, ent˜ao n seria primo, caso contr´ario ter´ıamos n composto.

Mas um detalhe torna este tipo de teste impratic´avel, j´a que para n muito grande, teremos que examinar muitos termos na expans˜ao binomial.

A id´eia do AKS ´e tornar o teste binomial r´apido e ainda ser capaz de provar que o teste responde corretamente mesmo quando n ´e composto. Ao inv´es de trabalharmos com m´odulo n, trabalhamos com m´odulo um polinˆomio xr− 1 (onde r ´e um primo

razoavelmente pequeno). Ou seja, no lugar de calcular (x − a)n, calcula-se o resto da

divis˜ao de (x − a)n por xr− 1, que ´e feito usando o mesmo m´etodo em ´Algebra para

dividir um polinˆomio por outro. Dessa maneira, teremos no m´aximo r − 1 termos para examinar , enquanto que na expans˜ao de (x − a)n temos n − 1.

Como a congruˆencia original funciona sempre que n ´e primo, ent˜ao ´e ´obvio que a nova congruˆencia

(x − a)n≡ (xn− a) mod (xr− 1, n) (3.4.2)

tamb´em funciona quando n ´e primo, pois se duas coisas s˜ao iguais, ent˜ao quando se divide essas duas coisas por xr− 1, os restos s˜ao iguais tamb´em. O que n˜ao ´e ´obvio ´e que a nova congruˆencia ´e sempre falsa quando n ´e composto, pois mesmo quando

(x − a)n 6≡ (xn− a) (mod n)

´e poss´ıvel que dois diferentes polinˆomios tenham o mesmo resto quando divididos por xr− 1. O que o AKS mostra ´e que se n ´e composto, e se escolhemos o valor “certo”

(48)

de r, ent˜ao precisamos testar apenas um n´umero pequeno de a’s at´e encontrarmos um tal que

(x − a)n 6≡ (xn− a) mod (xr− 1, n).

Uma vez que encontramos tal a, provamos que n ´e composto. Ademais, n˜ao precisamos tomar a aleatoriamente, existe uma forma determin´ıstica para fazer isto.

A seguir, estabeleceremos alguns resultados que ser˜ao usados posteriormente.

3.4.1

Teoria dos N´

umeros

Lema 3.4.1. Seja π(n) o n´umero de primos positivos ≤ n. Ent˜ao n

6 log2n ≤ π(n) ≤ 8n log2n, ∀n ≥ 1.

Prova. No Teorema 4.6 em [5, Cap. 4], temos a seguinte desigualdade: n

6 log n ≤ π(n) ≤ 8n log n.

Vamos mostrar que a desigualdade tamb´em ´e v´alida para o logaritmo na base 2. Como log n ≤ log2n, ent˜ao π(n) ≥ 6 log nn ≥ n

6 log2n.

(49)

π(n) ≤ n log n  6 log 2 +3 e  = nlog2e log2n  6 log 2 + 3 e  = nlog2e log2n  6 1 log2e + 3 e  = n log2n  6 + 3 log2e e  ≤ n log2n  6 + 3 × 1, 45 e  ≤ 8n log2n. Portanto, n 6 log2n ≤ π(n) ≤ 8n log2n.  Lema 3.4.2. Sejam n ≥ 2, k ≥ 1 e d ≥ 1 inteiros tais que (nk− 1)|(nd− 1). Ent˜ao

k|d.

Prova. Seja d = qk + r, q ≥ 1 e 0 ≤ r < k. Observemos que nd− 1 nk− 1 = nr(nqr− 1) + (nr− 1) nk− 1 = nr(1 + nk+ n2k+ · · · + n(q−1)k) + n r− 1 nk− 1.

Logo, (nr − 1)/(nk− 1) ´e um inteiro, pois (nk− 1) divide (nd− 1). Se 1 ≤ r < k,

ent˜ao 0 < (nr− 1)/(nk− 1) < 1 o que n˜ao ´e poss´ıvel. Portanto, r = 0.

(50)

Para o pr´oximo lema, consideraremos a fun¸c˜ao

π0(x) = |{p ; p ´e primo , 2 ≤ p ≤ x e P (p − 1) > x2/3}| onde P (n) ´e o maior divisor primo de n.

Lema 3.4.3. Existe uma constante c > 0 tal que π0(x) ≥ c x

log2x para x suficientemente grande.

Prova. Em [15] temos que π0(x) ≥ clog xx . Como na demonstra¸c˜ao do Lema 3.4.1, obtemos π0(x) ≥ clogx

2x.

 Lema 3.4.4. Sejam p primo e a um inteiro positivo. Ent˜ao ap ≡ a (mod p).

Prova. Ver demonstra¸c˜ao em [32, Corol´ario 2.1]



3.4.2

Corpos finitos

Sejam p um n´umero primo positivo e d ≥ 1 um inteiro. O anel Zp ´e um corpo

com p elementos. Seja h(x) um polinˆomio irredut´ıvel de grau d no anel Zp[x], ou

seja, n˜ao existem polinˆomios a(x) e b(x) em Zp[x] ambos com grau ≤ d tais que

a(x)b(x) = h(x) em Zp[x]. O anel F := Zp[x]/(h(x)) consiste de todos os polinˆomios

(51)

Lema 3.4.5. O anel F ´e um corpo com pd elementos.

Prova. Como existem exatamente pd polinˆomios em Z

p[x] com grau ≤ d, ´e ´obvio

que |F | = pd. Para efeito de demonstra¸c˜ao de que F ´e corpo, mostraremos somente

que cada polinˆomio n˜ao-nulo f (x) em F tem um inverso multiplicativo em F . Como o grau de f (x) ´e ≤ d e como h(x) ´e irredut´ıvel, temos que mdc(f (x), h(x)) = 1. Usando o algoritmo estendido de Euclides, obtemos dois polinˆomios a(x) e b(x) em Zp[x] tais que

a(x)f (x) + b(x)h(x) = 1

em Zp[x]. Portanto, a(x) mod h(x) ´e o inverso multiplicativo de f (x).

 Lema 3.4.6. Sejam K um corpo, f (x) um polinˆomio em K[x], e d ≥ 1 o grau de f (x).

1. Existem no m´aximo d elementos α ∈ K tais que f (α) = 0.

2. Existem polinˆomios irredut´ıveis g1(x), . . . , gm(x) em K[x], para algum inteiro

m, tal que f (x) = Qm

i=1gi(x).

Prova. As demonstra¸c˜oes dos itens 1 e 2 se encontram em [22, Cap. 1] no Teorema 1.66 e no Teorema 1.59, respectivamente.

(52)

Lema 3.4.7. O grupo multiplicativo K∗ de qualquer corpo K ´e c´ıclico.

Prova. Sejam q o n´umero de elementos de K. Podemos assumir que q ≥ 3, ou seja, que K ´e um corpo n˜ao-trivial. Seja s := q − 1 a ordem de K∗ e s = pr1

1 . . . prmm a sua

decomposi¸c˜ao.

Para cada 1 ≤ i ≤ m, o polinˆomio xs/pi − 1 tem no m´aximo s/p

i ra´ızes em K,

conforme Lema 3.4.6. Como s/pi < s, existe um elemento n˜ao nulo ai ∈ K∗ tal

que as/pi

i 6= 1, pois s ´e a ordem de K

. Seja b i := a

s/prii

i . Como K

´e um grupo

multiplicativo de ordem s e ai ∈ K∗ ent˜ao asi = 1. Segue que b prii

i = asi = 1. Seja ei

a ordem multiplicativa de bi em K. Ent˜ao ei|prii. Sendo pi um n´umero primo, temos

que ei = psii para algum 0 ≤ si ≤ ri. Por outro lado, temos que b pri−1i

i = a

s/pi i 6= 1.

Logo, si = ri e ei = prii.

Seja b := b1. . . bm, e e a ordem multiplicativa de b em K. Afirmamos que b ´e um

gerador de K∗, ou seja, e = s. Suponhamos, por absurdo, o contr´ario. J´a que bs= 1,

seque que e|s. Sendo e um divisor pr´oprio de s, existe um ´ındice 1 ≤ i ≤ m tal que e divide s/pi. Suponhamos, sem perda de generalidade, que i = 1. Como be = 1, temos

que bs/p1 = 1. Observamos que

bs/p1 = bs/p1 1 . . . b

s/p1 m .

Consideremos 2 ≤ j ≤ m qualquer. Temos que prj

j divide s/p1. Como b prjj j = 1, segue que bs/p1 j = 1. Assim, 1 = bs/p1 = bs/p1 1 . . . b s/p1 m = b s/p1 1 .

(53)

Segue que a ordem de b1 divide s/p1. Como a ordem de b1 ´e pr11 e s/p1 =

= pr1−1 1 p

r2

2 . . . prmm, temos uma contradi¸c˜ao.

 Lema 3.4.8. Seja p ≥ 2 um primo e f (x) um polinˆomio em Zp[x]. Ent˜ao,

f (x)p ≡ f (xp) (mod p).

Prova. A demonstra¸c˜ao ser´a feita por indu¸c˜ao sobre o grau d de f (x).

Se d = 0 ent˜ao f (x) = a para algum a ∈ Zp. Sendo p primo, temos que

ap ≡ a (mod p) (Lema 3.4.4). Logo, o resultado ´e verdadeiro.

Seja d ≥ 1. Suponhamos que o resultado seja verdadeiro para todos os polinˆomios em Zp[x] cujos graus sejam < d. Podemos reescrever f (x) = axd+ g(x), onde a ∈ Zp

e g(x) ´e um polinˆomio em Zp[x] de grau menor do que d. Ent˜ao,

(f (x))p = (axd+ g(x))p = p X i=0  p i  aixid(g(x))p−i. Como  p i 

≡ 0 (mod p) para 1 ≤ i ≤ p − 1, temos (f (x))p = (g(x))p+ apxpd.

(54)

Pela hip´otese de indu¸c˜ao, (g(x))p ≡ g(xp) (mod p) e sendo ap ≡ a (mod p),

conclu´ımos que

(f (x))p = g(xp) + a(xp)d= f (xp).

 Lema 3.4.9. Seja h(x) um fator qualquer de xr − 1. Se m ≡ m

r (mod r), ent˜ao

xm ≡ xmr (mod h(x)).

Prova. Seja m = kr +mr. Como, xr ≡ 1 mod (xr−1), ent˜ao xkr ≡ 1 mod (xr−1)

⇒ xkr+mr ≡ xmr mod (xr− 1) xm ≡ xmr mod (xr− 1).

Portanto, xm ≡ xmr (mod h(x)).

 Lema 3.4.10. Sejam p e r primos positivos distintos e d = ordrp . Ent˜ao, todo

polinˆomio irredut´ıvel em Zp[x] que divide x r−1

x−1 tem grau d.

Prova. Seja h(x) um polinˆomio irredut´ıvel em Zp[x] que divide x r−1

x−1 e cujo grau ´e

k. Pelo Lema 3.4.5, temos que F ´e um corpo com pk elementos. Tamb´em temos que

F∗ ´e c´ıclico de ordem pk− 1. Seja g(x) um gerador de F. Usando o Lema 3.4.8,

temos g(x)p ≡ g(xp) (mod p) g(x)pd ≡ g(xpd) (mod p).

Seja f (x) o polinˆomio em Zp[x] tal que f (x)g(x) = xr − 1. Sendo

pd ≡ 1 (mod r) e usando o Lema 3.4.9, temos que xpd ≡ x mod h(x). Logo,

(g(x))pd ≡ g(x) mod h(x).

Sendo g(x) um gerador, g(x) 6≡ 1 mod h(x). Logo, g(x) tem um inverso multi-plicativo no corpo F , o que implica (g(x))pd−1 ≡ 1 mod h(x).

(55)

Como pk− 1 ´e a ordem de g(x), temos que (pk− 1)|(pd− 1) ⇒ k|d, conforme o

Lema 3.4.2.

Al´em disso, h(x)|(xr − 1) em Z

p[x] e, consequentemente, em F . Logo,

xr≡ 1 mod h(x). J´a que r ´e primo, ent˜ao r = ord

h(x)x. Como a ordem de F∗´e pk−1

temos que xpk−1

≡ 1 mod h(x), que implica r|(pk − 1), ou seja,

pk ≡ 1 (mod r). Logo, d|k. Portanto, d = k.



3.4.3

O algoritmo AKS

Primeiramente, apresentaremos o algoritmo AKS [3] e posteriormente discutiremos se o algoritmo funciona e sua complexidade.

Algoritmo 3 (AKS(n)). n ´e um inteiro positivo

1. se n ´e da forma ab, b > 1, ent˜ao retorne “composto”;

2. r = 1;

3. enquanto r < n fa¸ca

4. se mdc(n, r) 6= 1, ent˜ao retorne “composto”; 5. se r ´e primo, ent˜ao

(56)

7. se q ≥ d4√r log2ne e nr−1q 6≡ 1 (mod r), pare;

8. r ← r + 1;

9. para a = 1 at´e d2√r log2ne

10. se (x − a)n 6≡ (xn− a) mod (xr− 1, n), retorne “composto”;

11. Retorne “primo”.

No artigo [9] ´e proposto um algoritmo r´apido que detecta, em tempo polinomial, se um inteiro n > 1 ´e uma potˆencia perfeita ou n˜ao. Assim, o passo (1) do AKS pode ser executado em tempo polinomial.

O algoritmo possui dois loops. No primeiro loop, o algoritmo tenta encontrar um primo r tal que r − 1 tem o maior fator primo q ≥ d4√r log2ne e que q divida a ordem multiplicativa de n m´odulo r.

Para analisar se o algoritmo est´a correto e sua complexidade, consideraremos o lema a seguir.

Lema 3.4.11. Para cada n suficientemente grande, existem constantes c1 e c2

po-sitivas para os quais existe um primo r, onde c1(log2n)6 ≤ r ≤ c2(log2n)6 tal que

q = P (r − 1) ≥ 4√r log2n e q|ordrn.

Prova. Sejam c como no Lema 3.4.3 e P (r−1) o maior fator primo de r−1. Seja R o n´umero de primos r’s no intervalo [c1(log2n)6, c2(log2n)6] tal que

(57)

Assim, R = π0(c2(log2n) 6 ) − π0(c1(log2n) 6 ) ≥ π0(c2(log2n)6) − π(c1(log2n)6), pois π(x) ≤ c0logx 2x ≤ π

0(x) para algum c0, de acordo com os Lemas 3.4.1 e 3.4.3.

Ent˜ao, R ≥ c c2(log2n) 6 log2(c2(log2n)6) − π(c1(log2n) 6) ≥ c c2(log2n)6 log2(c2(log2n)6) − 8 c1(log2n)6 log2(c1(log2n)6) ≥ c c2(log2n) 6

log2c2+ 6 log2(log2n)

− 8 c1(log2n)

6

log2c1+ 6 log2(log2n)

. Como c2 ≤ log2n para n suficientemente grande, ent˜ao

R ≥ c c2(log2n)

6

log2(log2n) + 6 log2(log2n) − 8

c1(log2n)6

log2c1+ 6 log2(log2n)

≥ c c2(log2n) 6 7 log2(log2n) − 8 c1(log2n)6 6 log2(log2n) = (log2n) 6 log2(log2n)  cc2 7 − 8c1 6  .

Seja c3 := cc72 − 8c61. Escolhemos c1 ≥ 46e c2 tal que c3 > 0. Seja x := c2(log2n)6

e definimos N := (n − 1)(n2− 1) · · · (nbx1/3c

− 1) = Qbx1/3c

i=1 (n i− 1).

Como qualquer inteiro positivo m tem no m´aximo log m fatores primos, ent˜ao o i-´esimo termo no produto acima tem no m´aximo i log m ≤ i log2n ≤ bx1/3c log

2n ≤

≤ x1/3log

2n fatores primos. Logo, N tem x2/3log2n fatores primos, no m´aximo.

Observamos que

x2/3log2n = c2/32 (log2n)5 < c3(log2n)

6

log2(log2n).

Ent˜ao, existe um primo r tal que c1(log2n)6 ≤ r ≤ c2(log2n)6 e P (r − 1) ≥ r2/3,

(58)

De fato, sendo r2/3 = r1/6√r e que r1/6 ≥ c1/61 log2n ≥ 4 log2n, ent˜ao r2/3 ≥ 4√r log2n.

Antes de provarmos que q|ordr(n), mostraremos que q|ordr(n) ´e equivalente a

nr−1q 6≡ 1 mod r.

Suponhamos que q|ordr(n). Como q ≥ 4

r log2n, ent˜ao q ≥ r2/3 > √r > > (r − 1)1/2 ⇒ q2 > r − 1 ⇒ q > r−1

q . Sendo ordr(n) > q, ent˜ao ordr(n) > r−1

q ⇒

⇒ nr−1q 6≡ 1 mod r (pela defini¸c˜ao de ord r(n)).

Suponhamos que q - ordr(n). Como ordr(n)|(r − 1) (pois mdc(n, r) e

nr−1 ≡ 1 mod r), temos que r − 1 = ord

r(n) · d ⇒ ordr(n)|r−1q ⇒ n r−1

q ≡ 1 mod r.

Agora podemos mostrar que q|ordr(n). De fato, suponhamos, por absurdo, que

nr−1q ≡ 1 (mod r). Ent˜ao, r|(n r−1 q − 1). Como q ≥ r2/3, r ≤ c 2(log2n)6 e x = c2(log2n)6, temos r − 1 q < r q ≤ r r2/3 = r 1/3≤ (c 2(log2n)6)1/3= x1/3.

Assim (nr−1q −1) ´e um termo de N . Mas isto implica que r|N , o que ´e contradi¸c˜ao.

 Observamos que como q ´e um inteiro (pois ´e primo), teremos que q ≥ d4√r log2ne. Teorema 3.4.2. Se n ´e primo, ent˜ao o algoritmo retorna “primo”.

Prova. O primeiro loop n˜ao retornar´a “composto” pois mdc(n, r) 6= 1 para todo r ≤ c2(log2n)6 onde c2 ´e como no Lema 3.4.11. Ent˜ao, no segundo loop tamb´em n˜ao

retorna ”composto”, pois a congruˆencia (3.4.2) sempre ser´a satisfeita. Portanto, o algoritmo sempre retorna ”primo”quando n for primo.

(59)

Agora, vamos verificar se o algoritmo funciona quando temos n composto como entrada. Vamos considerar que n n˜ao seja uma potˆencia perfeita e que todo fator primo de n seja maior do que r, pois caso contr´ario n seria detectado como composto no passo (1) ou (4) do algoritmo. Vamos mostrar que n ser´a detectado no segundo loop.

Seja n = pe1 1 · · · p

ek

k a decomposi¸c˜ao de n. Neste caso, ordrn|mmc{ordr(pi)}ki=1. De

fato, se λ =mmc{ordr(pi)}ki=1, ent˜ao λ = ordr(pi)mi, mi escolhido para cada ordr(pi).

Logo, nλ = k Y i=1 peiλ i = k Y i=1 pei·ordr(pi)mi i = k Y i=1 (pordr(pi) i ) eimi = 1.

Desta forma, existe um primo p fator de n tal que q|ordrp onde q = P (r − 1) para

o r encontrado no primeiro loop, pois todo fator primo de mmc{ordr(pi)}ki=1 ´e um

fator primo para pelo menos uma ordr(pi) De agora em diante, p ser´a tal fator primo

de n.

No segundo loop, o algoritmo usa o valor de r encontrado para fazer o c´alculo de l = d2√r log2ne binˆomios: (x − a) para 1 ≤ a ≤ l.

Pelo Lema 3.4.10, temos um polinˆomio h(x) que ´e fator de xr − 1 de grau

d = ordr(p), onde p ´e o fator primo de n tal que q|ordrp e tal polinˆomio ´e irredut´ıvel

Referências

Documentos relacionados

Neste trabalho, baseado numa seqüência de artigos de David Ho , é provado um teorema sobre a existência de uma solução fraca para um problema de valor inicial en- volvendo

Os alunos do Grupo Dois (por já terem estudado Química mais a fundo do que o Grupo Um) que responderam “Sim” foram perguntados, ainda, sobre qual a disciplina que mais

Portanto, estudar a liderança como prática intercultural significa analisar, por meio da vivência e da interação com os praticantes (líderes e seguidores) e os elementos

No caso tridimensional, podemos incluir restrições para manter a estrutura como uma representação de variedades combinatórias com custo computacional de com- plexidade

Nessa situação temos claramente a relação de tecnovívio apresentado por Dubatti (2012) operando, visto que nessa experiência ambos os atores tra- çam um diálogo que não se dá

Arruda, Silvana Gonçalves Brito de Perfil de ácidos graxos e qualidade da carne de caprinos da raça Saanen inteiros e castrados, com diferentes pesos ao abate / Silvana Gonçalves

Pode-se trazer como exemplo a relação do álbum de canção, também de Pitty, Admirável Chip Novo 2003 com o romance quase homônimo de Huxley 1932, Admirável Mundo novo: porque se

A estratégia proposta considera um conjunto de critérios de QI e, para cada critério, prevê uma forma de avaliação com base no estado atual da fonte de dados e nos valores de