Fatoração dos Números Inteiros e Curvas Elı́ticas Prof. Dr. Parham Salehyan IBILCE - UNESP São José do Rio Preto Outubro de 2013 XXV Semana de Matemática • 14 a 18 de Outubro de 2013 • Unesp-Ibilce Fatoração dos Números Inteiros e Curvas Elíticas Parham Salehyan Unesp-Ibilce [email protected] Resumo Um dos resultados mais elementares da teoria dos números é a fatoração de números inteiros. Fatorar um número inteiro grande pode ser uma tarefa bastante trabalhosa. Nesse minicurso após uma breve introdução às curvas elíticas, apresentaremos um algoritmo para fatorar número inteiros. I. Introdução I nicialmente faremos um breve estudo sobre cúbicas planas projetivas. O foco principal é o conjunto dos pontos racionais sobre uma cúbica plana projetiva, em outras palavras, as soluções racionais de uma equação polinomial de grau 3 em três variáveis. Em seguida definiremos uma operação entre os pontos de uma cúbica e observamos que o conjunto dos pontos de uma cúbica munido desta operação se torna um grupo abeliano. Como aplicação apresentaremos um algoritmo para fatorar números inteiros. II. Classificação das Cúbicas Planas Sejam C o corpo dos números complexos e P2 o plano projetivo complexo. Uma cúbica é uma curva projetiva plana definida por um polinômio homogêneo de grau três F ( x, y, z) = ∑ aijk xi y j zl ∈ C[ x, y, z], ou seja, o conjunto dos pontos P = ( x : y : z) ∈ P2 cujas coori + j + k =3 denadas satisfazem a equação F ( x, y, z) = 0. O conjunto dos pontos do tipo P = ( x : y : 1) é chamado da parte afim da curva. Observem que estes pontos são dados pela equação f ( x, y) := F ( x, y, 1) = 0 e pela homogeneidade de F, deg f = 3. Os demais pontos, ou seja, pontos do tipo P = ( x : y : 0) são chamados de pontos no infinito. Um ponto P é chamado de um ponto singular ∂F ∂F se ∂F ∂x ( P ) = ∂y ( P ) = ∂z ( P ) = 0, caso contrário é chamado de um ponto não singular ou suave. Diremos que a cúbica é suave ou não singular, se não possui pontos singulares. Uma cúbica plana não singular é chamada de uma curva elítica. Example 1 Seja C a cúbica definida por F = y2 z − x3 − xz2 − z3 . Sua parte afim é dada por f = y2 − x3 − x − 1, o ponto P = (0 : 1 : 0) é seu ponto no infinito e não possui ponto singular. Example 2 Seja C a cúbica definida por F = y2 z − x3 . Sua parte afim é dada por f = y2 − x3 , possui apenas um ponto no infinito O = (0 : 1 : 0) e apenas um ponto singular (0 : 0 : 1). Uma cúbica definida por um polinômio irredutível F é chamada de irredutível, caso contrário é chamada de redutível. A irredutibilidade de F é equivalente a irredutibilidade do polinômio f que define a parte afim de C. 1 XXV Semana de Matemática • 14 a 18 de Outubro de 2013 • Unesp-Ibilce Seja C uma cúbica redutível. Pelo fato que deg f = 3, teremos as seguintes possibilidades para a parte afim de C: Figura 1 No caso de cúbicas irredutíveis devemos considerar os casos singular e suave. Seja C uma curva elítica. É possível mostrar que após uma série de mudanças de coordenadas, C é projetivamente equivalente à curva definida por y2 z = x ( x − z)( x − λz) para algum λ ∈ C \ {1, 0}. Observem que C possui apenas um ponto no infinito O = (0 : 1 : 0) e sua parte afim é dada pela equação y2 = x ( x − 1)( x − λ). Neste caso é mais comum trabalhar com a equação da curva da forma y2 = g( x ), onde g é um polinômio mônico de grau 3 em uma variável. Esta forma de equação de uma curva elítica é chamada de sua forma de Weierstrass. No caso singular é possível mostrar que após uma série de mudanças de coordenadas, C é projetivamente equivalente a y2 z = x3 ou y2 z = x2 ( x + z). III. O grupo dos pontos racionais Seja C uma curva elítica. Pelo argumento apresentado no final da seção anterior, concluímos que C pode ser vista como a união de sua parte afim com seu ponto no infinito. Um ponto de C é chamado de ponto racional se suas coordenadas forem números racionais. Seja C (Q) o conjuntos dos pontos racionais de C. Observamos que C (Q) 6= ∅ uma vez que O ∈ C (Q). 2 XXV Semana de Matemática • 14 a 18 de Outubro de 2013 • Unesp-Ibilce O objetivo principal desta seção é definir uma operação entre os pontos de C e verificar suas propriedades. Um dos resultados mais importantes da teoria elementar de curvas elíticas é sobre seus pontos racionais. Por este motivo a partir deste momento trabalharemos apenas em C (Q). De fato consideramos uma curva elítica cuja parte afim é dada pela equação y2 = x3 + ax2 + bx + c, onde a, b, c ∈ Q. Inicialmente mostraremos o seguinte fato. Afirmação. Seja L a reta dada pela equação y = mx + n, onde m, n ∈ Q. Se esta reta intercepta com a parte afim de uma curva elítica C em dois pontos racionais, então o terceiro ponto de interseção também é ponto racional. Demonstração. Sejam y2 = x3 + ax2 + bx + c, onde a, b, c ∈ Q a equação da parte afim de C e ( x1 , y1 ) e ( x2 , y2 ) os dois pontos racionais da interseção de L com C. Os pontos da interseção são dados pela equação (mx + n)2 = x3 + ax2 + bx + c, ou, x3 + ( a − m2 ) x2 + (b − 2mn) x + (c − n2 ) = 0. Observe que x1 + x2 + x3 = −( a − m2 ). Então x3 ∈ Q e portanto y3 = mx3 + n ∈ Q, ou seja, ( x3 , y3 ) é um ponto racional. Operação em C (Q) Sejam C uma curva elítica cuja parte afim é dada por y2 = g( x ), onde g ∈ Q[ x ] é mônico. Então C (Q) = {( x, y) ∈ Q2 | y2 = x3 + ax2 + bx + c} ∪ {O}. A seguir definiremos como “somar” dois pontos P, Q ∈ C (Q): • Se um destes pontos for O , então a soma será o outro, ou seja, P + O = O + P = P. • Se P 6= O e Q 6= O , considere a reta que passa por P e Q e obtenha o terceiro ponto de interseção desta reta com a cúbica. Denote este ponto por P ∗ Q e observe que pela afirmação acima, este ponto é racional. Através de uma reta vertical, ligue o ponto O ao ponto P ∗ Q. Esta reta interceptará a cúbica num ponto que denotaremos por P + Q. Novamente pela afirmação acima P + Q ∈ C (Q). De fato se P ∗ Q = ( x, y), então P + Q = ( x, −y). Pela definição acima fica claro que esta operação é comutativa, seu elemento neutro é O e se P = ( x, y) então − P = ( x, −y). Mais precisamente: Proposição. (C (Q), +) é um grupo abeliano. A parte delicada da demonstração é a associatividade. A demonstração geométrica da associatividade pode ser encontrada em [DH]. Observe que os pontos da cúbica que estão sobre o eixo dos x, i.e, os pontos ( x, y) ∈ C tais que y = 0, caso sejam racionais, são exatamente aqueles que satisfazem a equação P = − P ou 2P = O . Vale observar que T = { P ∈ C (Q) | 2P = O} possui um, dois ou quatro elementos de acordo com o número das raízes racionais de g( x ). Sabendo que (C (Q), +) é um grupo, claramente ( T, +) é 3 XXV Semana de Matemática • 14 a 18 de Outubro de 2013 • Unesp-Ibilce um subgrupo(finito) de (C (Q), +). A seguir determinaremos explicitamente as coordenadas de P1 + P2 o que pode ser utilizado para demonstrar algebricamente a associatividade da operação. Sejam P1 = ( x1 , y1 ), P2 = ( x2 , y2 ) pontos racionais de C e P1 ∗ P2 = ( x3 , y3 ). Então P1 + P2 = ( x3 , − y3 ). Se P1 = P2 , tomamos a reta tangente à cúbica C no ponto P1 = ( x1 , y1 ) para obter o ponto P1 ∗ P1 = O , logo P1 + P1 = 2P1 = O . Antes de analisar o caso em que P1 6= P2 , faremos a seguinte observação. Se y1 6= 0, a equação da reta tangente à cúbica C em P1 = ( x1 , y1 ) é y = mx + n, onde m= 3x12 + 2ax1 + b e n = y1 − mx1 . 2y1 Esta reta intercepta a cúbica duas vezes no ponto P1 = ( x1 , y1 ) e se P3 = ( x3 , y3 ) é o terceiro ponto de interseção desta reta com a cúbica C (isto é P3 = P1 ∗ P1 ) então 2x1 + x3 = m2 − a, ou seja, x3 = m2 − a − 2x1 , e assim, y3 = mx3 + n. Para P1 6= P2 , teremos dois casos a serem considerados: x1 = x2 e x1 6= x2 . Se x1 = x2 a reta que liga P1 a P2 é vertical, logo P1 ∗ P2 = O e P1 + P2 = O . Se x1 6= x2 a reta que liga P1 a P2 é do tipo y = λx + ν, onde y − y2 λ= 1 x1 − x2 e ν = y1 − λx1 = y2 − λx2 . Se P3 = ( x3 , y3 ) = P1 ∗ P2 , isto é, P3 é a terceira interseção desta reta com a cúbica C, encontramos x3 = λ2 − a − x2 − x1 e y3 = λx3 + ν logo o ponto P1 + P2 está determinado, uma vez que P1 + P2 = ( x3 , −y3 ). O fato mais importante na teoria elementar das curvas elíticas é o seguinte teorema: Teorema de Mordell. Seja C uma curva elítica. Então (C (Q), +) é finitamente gerado, ou seja, existe um número finito de pontos P1 , . . . , Pn ∈ C (Q) tal que para todo P ∈ C (Q), ∃k1 , . . . , k n ∈ Z, P = k1 P1 + · · · + k n Pn . Vale destacar que nos casos em que C é singular, (C (Q), +) não é finitamente gerado, veja [S]. IV. Algoritmo de fatoração usando curvas elíticas Discutiremos agora o problema de fatoração de inteiros. Pelo teorema fundamental de aritmética todo inteiro possui uma única fatoração em termos de números primos. Às vezes utilizaremos um caso particular do pequeno teorema de Fermat, que afirma que se n é primo ímpar, então 2n−1 ≡ 1(mod n), para verificar que n não é número primo. O primeiro e mais natural modo de fatorarmos um número n é fazendo testes do tipo: tomar os primos anteriores ao número e verificar √ se estes dividem o número n e quantas vezes. Pelo √ fato que o menor fator de n é menor que n, basta tentarmos números menores ou iguais a [ n]. Mas para grandes valores isso não 4 XXV Semana de Matemática • 14 a 18 de Outubro de 2013 • Unesp-Ibilce é muito prático. Vamos estudar um modo de fatorar grandes números. Problema Dados a, k, n ∈ N, calcule ak (mod n). Para explicar melhor a ideia, seja k = 1000. Escrever k como uma soma de potências de 2, ou seja, escrevendo na base 2. 1000 = 23 + 25 + 26 + 27 + 28 + 29 , 3 5 9 i então a1000 = a2 · a2 · · · · a2 . Calcularemos o número Ai := a2 (mod n). A0 A1 A2 A3 .. . A9 = a(mod n) = A0 · A0 = a2 (mod n) = A1 · A1 = a4 (mod n) = = = 3 A2 · A2 = a2 (mod n) .. . 9 A8 · A8 = a2 (mod n) Então a1000 (mod n) = A3 · A5 · A6 · A7 · A8 · A9 . Observem que com apenas 9 operações para obter os Ai0 s e 6 operações para obter a1000 (mod n) faremos o cálculo. Este é um método pode ser muito melhor e mais rápido do que calcular a1000 e depois determinar o resto da divisão por n. Em geral escrevemos k na base 2: k = k0 + k1 · 2 + k2 · 22 + k3 · 23 + · · · + kr · 2r . A seguir calculamos A0 = a, A1 = A20 , A2 = A21 , . . . , Ar = A2r−1 . Finalmente obtemos ak como ak = (produto dos Ai0 s para cada k i = 1). Ou seja, com no máximo r operações(eventualmente k i = 0 para algum i) podemos calcular ak (mod n). Assumindo kr = 1, pois é a expansão binária efetiva de k, k = k0 + k1 2 + · · · + kr 2r ≥ 2r ⇒ r ≤ log2 k. Então provamos que é possível calcular ak (mod n) em no máximo 2 · log2 k operações, onde cada operação consiste de uma multiplicação e uma redução módulo n. Observe que para valores grandes de k, log2 k é “bem menor” que k. Maior Divisor Comum Sejam a, b ∈ N. O objetivo é fazer uma estimativa do número das operações necessárias para determinar o maior divisor comum de a e b usando o algoritmo de Euclides. Ou seja, fazer divisões sucessivas: a b = bq1 + r2 , 0 ≤ r2 < b, = r2 q2 + r3 , 0 ≤ r3 < r2 , 5 XXV Semana de Matemática • 14 a 18 de Outubro de 2013 • Unesp-Ibilce r2 r n −1 rn = r3 q3 + r4 , 0 ≤ r4 < r3 , .. . = r n q n + r n +1 , 0 ≤ r n +1 < r n , = r n +1 q n +1 . Como a sequência dos restos é uma sequência decrescente de números inteiros não negativos, rn+2 = 0 para algum n. Pelo algoritmo ( a, b) = rn+1 . Afirmamos que: 1 ∀i, ri+1 ≤ ri−1 . 2 De fato, se ri ≤ 12 ri−1 , então concluímos porque ri+1 < ri . Por outro lado, suponha que ri > 21 ri−1 . Sabemos que ri−1 = ri qi + ri+1 com 0 ≤ ri+1 < ri . Agora sob a nossa suposição de que ri > 12 ri−1 , encontramos 1 r i +1 = r i −1 − r i q i < r i −1 ( 1 − q i ) . 2 Claramente qi 6= 0 porque caso contrário ri−1 = ri+1 , contradizendo o fato de que os ri0 s são estritamente decrescentes. Por isso, qi > 1 (de fato, qi = 1) e então ri+1 < 21 ri−1 . Trocando a e b se necessário, podemos assumir que a ≥ b; sabemos que r2 < b. Por isso, r4 < 1 1 1 1 1 1 b, r6 = r4 < b, r8 < r6 < b, . . . , r2i < i−1 b. 2 2 4 2 8 2 Mas r2i é um inteiro não negativo, assim 2i−1 ≥ b, e obtemos r2i < 1, o que significa que r2i = 0. Em outras palavras, i ≥ 1 + log2 b = log2 (2b) implica que r2i = 0. Então usando o algoritmo de Euclides em no máximo 2 · log2 (2b) = 2 · log2 max{2a, 2b} passos determinaremos o maior divisor comum de a e b. Agora voltaremos ao problema de fatoração de inteiros em produto de primos. A seguir explicaremos o algoritmo de Pollard. Algoritmo de Pollard Este algoritmo constitui um protótipo daquilo que iremos estudar posteriormente, a saber a fatoração por curvas elíticas. A ideia é a seguinte: suponha que n tenha um fator primo p tal que p − 1 é um produto de pequenos primos. Pelo pequeno teorema de Fermat, se p não divide a então a p−1 ≡ 1(mod p). Assim p|( a p−1 − 1, n). Não conhecemos p e não sabemos calcular a p−1 − 1. Então escolheremos um inteiro da forma k = 2e2 · 3e3 · · · r er , onde 2, 3, . . . , r são os primeiros primos e ei são inteiros positivos pequenos. Calculamos d := ( ak − 1, n). Pelos problemas discutidos acima, calculamos d em menos que 2 log2 (2kn) operações, que é uma quantidade razoável de operações mesmo para valores grandes de k e n. Se n tem um fator primo p e p − 1|k, então p| ak − 1. Nesse caso d ≥ p > 1. Se d 6= n, então teremos um fator próprio de n e repetiremos o procedimento para cada fator de n obtido 6 XXV Semana de Matemática • 14 a 18 de Outubro de 2013 • Unesp-Ibilce desta forma. Se d = n, então escolhemos outro valor de a e faremos o procedimento acima novamente. Como um exemplo, considere n = 246082373. A primeira coisa a verificar é se n não é primo. Usando o método explicado acima, verificamos que 2n−1 (mod n) 6= 1, então n é composto. Tomamos a = 2 e k = 22 · 32 · 5 = 180. Visto que 180 = 22 + 24 + 25 + 27 , i precisamos calcular 22 (mod n) para 0 ≤ i ≤ 7. Estes valores são 2, 4, 16, 256, 65536, 111566955, 166204404 e 214344997 respectivamente. Então 2180 2 4 5 7 = 22 · 22 · 22 · 22 ≡ 16 · 65536 · 111566955 · 28795219(mod 246082373) ≡ 12129927(mod 246082373). Um simples cálculo usando o algoritmo de Euclides mostra que (2180 − 1, n) = (121299226, 246082373) = 1. Assim o teste falha e n não tem fatores p tais que p − 1|180. Então escolhemos um k maior, por exemplo k = [2, 3, . . . , 9] = 23 · 32 · 5 · 7 = 2520 = 23 + 24 + 26 + 27 + 28 + 211 . Usando o mesmo método, 22520 = 22 3 +24 +26 +27 +28 +211 ≡ 101220672(mod 246082373), pelo algoritmo de Euclides (22520 − 1, n) = (101220671, 246082373) = 2521, ou seja, encontramos um fator próprio de n, de fato n = 2521 · 97613, e cada fator é um número primo. Em geral seguiremos os seguintes passos para encontrar um fator de um número inteiro n ≥ 2: Passo 1 Escolha um número k que seja produto de pequenos primos a pequenas potências: k = [1, 2, 3, . . . , m] para algum inteiro positivo m. Passo 2 Escolha um inteiro arbitrario satisfazendo 1 < a < n. Passo 3 Calcule ( a, n). Se for estritamente maior que 1, então ele é um fator próprio de n. Caso contrário, vamos ao Passo 4. Passo 4 Calcule D = ( ak − 1, n). Se 1 < D < n, então D é um fator próprio de n. Se D = 1, voltamos ao Passo 1 e tomaremos outro valor para k. Se D = n, voltamos ao Passo 2 e escolhemos outro a. Note que o algoritmo Pollard deve finalmente parar porque eventualmente k no passo 1 será igual a 12 ( p − 1) para algum primo p que divide n, então, eventualmente haverá algum p − 1 dividindo k. No entanto, o algoritmo não é prático para grandes valores de n. O algoritmo 7 XXV Semana de Matemática • 14 a 18 de Outubro de 2013 • Unesp-Ibilce só funciona em uma quantidade razoável de tempo, se acontece de n ter um divisor primo p satisfazendo p − 1 = produto de pequenos primos a pequenas potências. A seguir explicaremos o algoritmo de Lenstra para fatoração de números grandes usando curvas elíticas. O algoritmo de Pollard é baseado no fato de que elementos não nulos de Z/pZ formam um grupo (Z/pZ)∗ de ordem p − 1. Assim se p − 1|k, então ak = 1 para todo a ∈ (Z/pZ)∗ . A ideia do algoritmo de Lenstra é substituir o grupo (Z/pZ)∗ pelo grupo dos pontos na curva elítica C (Z p ), e substituir o inteiro a pelo ponto P ∈ C (Z p ). Como no algoritmo de Pollard, escolhemos um inteiro k composto de um produto de pequenos primos. Então, se ocorrer que o número de elementos de C (Z p ) divida k, teremos kP = O em C (ZP ). E tal como antes, o fato de que kP = O geralmente permite-nos encontrar um fator próprio de n. Qual é a vantagem do algoritmo de Lenstra? Se escolhermos apenas uma curva C com coeficientes inteiros e considerarmos sua redução módulo números primos, então não há vantagens. Pois esse algoritmo funcionará se para algum primo p que divida n, #C̃ (Z p ) é produto de primos pequenos. Similarmente, teremos vantagem usando o algoritmo de Pollard se existir um primo p|n tal que p − 1 seja um produto de pequenos primos. Mas suponha agora que não consigamos usar o algoritmo de Pollard. Com o algoritmo de Lenstra, existe a flexibilidade que nos permite continuar trabalhando, ou seja, somos livres para escolher uma nova curva elítica e repetir o processo. Variando a curva C e desde que #C̃ (Z p ) varie consideravelmente para cada primo p, nossas chances de eventualmente concluirmos o algoritmo são bastante boas. Agora vamos transformar essas observações num algoritmo explícito. Notamos anteriormente que, se C é uma cúbica não sigular com coeficientes em Z p , então √ #C (Z p ) = p + 1 − ε p , |ε p | ≤ 2 p. Além disso, pode-se mostrar que, como C varia para tais curvas, os números ε p são bem dis√ √ tribuídos ao longo do intervalo [−2 p, 2 p]. Por isso, é bastante provável (mas ainda não rigorosamente provado) que vamos executar de forma bastante rápida através de uma curva C com #C (Z p ) igual a um produto de números primos pequenos. Algoritmo de curvas elíticas de Lenstra. Seja n ≥ 2 um inteiro composto para o qual buscamos um fator. Passo 1 Verifique que (n, 6) = 1 e também que n não seja da forma mr para algum r ≥ 2. Passo 2 Escolha aleatoriamente inteiros b, x1 , y1 entre 1 e n. Passo 3 Seja c = y21 − x13 − bx1 (mod n), considere a cúbica C : y2 = x3 + bx + c. Pela escolha de c, P = ( x1 , y1 ) ∈ C. Passo 4 Verifique se (4b3 + 27c2 , n) = 1. (Se for igual a n, volte e escolha um novo b. Se ele é estrito entre 1 e n então ele é um fator não trivial de n, e assim concluímos.) Passo 5 Escolha o número k como produto de pequenos primos a pequenas potências. Por exemplo tome k = [1, 2, 3, . . . , m], onde m é um inteiro inteiro positivo. Passo 6 Calcule kP = ( dak2 , dbk3 ). k k Passo 7 Calculamos D = (dk , n). Se 1 < D < n, então D é um fator não trivial de n e assim concluímos. Se D = 1, ou voltamos ao Passo 5 e aumentamos o valor de k. Faremos agora um estudo do funcionamento do algoritmo de Lenstra e como executaremos o cálculo P + P + · · · + P do passo 6. Para ver porque o algoritmo funciona, suponha que tenhamos a sorte de escolher uma 8 XXV Semana de Matemática • 14 a 18 de Outubro de 2013 • Unesp-Ibilce curva C e o número k de modo que, para algum primo p dividindo n, temos #C̃ (Z p ) dividindo k. Então todo elemento em C̃ (Z p ) tem ordem dividindo k. Assim, em particular, reduzindo P ∈ C (Q) módulo p temos que: f = k P̃ = Õ . kP Em outras palavras, a redução de kP módulo p é o ponto O no infinito e assim devemos ter p|dk , ou seja, p|(dk , n). Ainda mais, n não divide dk , portanto teremos um fator de n. Isto explica porque o algoritmo de Lenstra funciona. Agora buscamos calcular kP eficientemente. Ao invés de fazer P + P + · · · + P usaremos o mesmo esquema que usamos para calcular ak . Primeiro escrevemos k como: k = k0 + k1 · 2 + k2 · 22 + k3 · 23 + · · · + kr · 2r , k i ∈ {0, 1}. Como antes, podemos fazer isso para r ≤ log2 k. A seguir calculamos P0 P1 P2 P3 Pr = P = 2P0 = 2P = 2P1 = 22 P = 2P2 = 23 P .. . = 2Pr−1 = 2r P, r e finalmente fazemos kP = ∑ Pi . Desse modo calculamos kP em menos de 2 log2 k passos, doi =0 brando e adicionando pontos. Note entretanto que não queremos calcular as coordenadas de kP como número racional porque o numerador e o denominador deveriam ter aproximadamente k2 dígitos. Então o melhor seria realizar nossos cálculos módulo n. Mas n não é primo, então devemos encontrar uma forma de usar as fórmulas para dobrar ou adicionar pontos. Considere o problema de adicionar dois pontos, digamos Q1 = ( x1 , y1 ) e Q2 = ( x2 , y2 ), onde x1 , y1 , x2 , y2 são inteiros módulo n. Nossa fórmula para Q3 = Q1 + Q2 diz que: x3 = λ2 − x1 − x2 e y −y y3 = −λx3 − (y1 − λx1 ), onde λ = x22 − x1 . A dificuldade encontra-se em calcular λ porque o 1 anel Z/nZ não é corpo, assim x2 − x1 talvez não possua inverso. Ao fazer fazer estes cálculos, encontraremos três possibilidades: 1) ( x2 − x1 , n) = 1. Neste caso x2 − x1 possui inverso em Z/nZ, assim podemos calcular Q3 módulo n. 2) 1 < ( x2 − x1 , n) < n. Neste caso ( x2 − x1 , n) é um fator de n. 3) ( x2 − x1 , n) = n. Neste caso retornaremos ao passo 5 e reduziremos o valor de k, ou podemos retornar ao passo 2 e considerar outra curva. Para duplicar o ponto Q = ( x, y) módulo n, precisamos calcular a relação λ= 3x2 + 2ax + b f 0 (x) = (mod n). 2y 2y 9 XXV Semana de Matemática • 14 a 18 de Outubro de 2013 • Unesp-Ibilce Assim obtemos as mesmas 3 alternativas: calculamos 2Q(mod n) ou obtemos um fator próprio de n, ou (y, n) = n e temos que recomeçar com um novo k ou uma nova curva. Isto mostra como Lenstra funciona, embora na prática há diversos caminhos para fazer isso mais eficientemente. Para ilustrar o processo geral, iremos agora usar o algoritmo de Lenstra para fatorar o inteiro: n = 175761513. A primeira coisa a se fazer é checar que n não é primo. Usando sucessivamente o esquema descrito antes, facilmente calculamos 2n−1 ≡ 93082891(mod n). Pelo pequeno teorema de Fermat, n não é primo. Procuremos um fator. O primeiro passo no Lenstra é checar que n não é potência perfeita √ √ √ √ n, 3 n, 4 n, . . . , 31 n ≈ 1, 9855. √ Nenhum desses são inteiros, assim n não é potência perfeita. Como 1715761513 ≈ 42422 concluímos que n tem algum fator primo p menor que 42422. Buscamos escolher um valor de k de modo que alguns inteiros próximos de p dividam k. Tentaremos k = LCM [1, 2, 3, . . . , 17] = 12252240, que tem muitos fatores menores que 42422. A seguir temos de escolher uma curva elítica e um ponto seu. Como indicado na descrição do algoritmo de Lenstra, é mais fácil fixar o ponto P e um dos coeficientes da curva, e então escolher o outro coeficiente tal que o ponto esteja na curva. Tome P = (2, 1). Tomamos vários valores de b, e então definimos c = −7 − 2b. Para começar tomamos b = 1, então c = −9. Assim, olhando para a curva C e P (ponto) dados por C : y2 = x3 + x − 9, P = (2, 1) ∈ C. Nosso objetivo é calcular kP(mod n) usando sucessivas duplicações. Assim a primeira coisa a fazer é expressar k como soma de potências de 2. Por isso, para calcular kP(mod 3), precisamos determinar 2i P(mod 3) para 0 ≤ i ≤ 23. Podemos montar uma tabela, e finalmente, adicionando os pontos apropriados da tabela, encontramos o valor de kP(mod n). Assim, agora conhecemos que na curva y2 = x3 + x − 9 considerada módulo n, temos kP = 12252240(2, 1) ≡ (421401044, 664333727)(mod 1715761513). Isso não diz sobre os fatores de n. O ponto principal do algoritmo de Lenstra é que ele nos dá um fator de n precisamente quando a lei da adição falha. Assim se pudermos calcular kP(mod n), temos que recomeçar com um novo k, um novo P, ou uma nova curva. Tomamos a última alternativa, variando a curva. Assim colocaremos com k = 12252240 e com P = (2, 1), mas agora tomaremos b = 2 e c = −7 − 2b = −11. Usando esta curva e repetindo o cálculo anterior mais uma vez descobrimos que podemos calcular kP(mod n). Então tome b = 3 e c = −13, etc. É possível calcular kP(mod n) para todo b = 3, 4, 5, . . . , 41. Entretanto, quando tentamos b = 42 e c = −91, a lei da adição falha e encontramos um fator de n. O que acontece é o seguinte: não temos nenhuma dificuldade em fazer uma tabela dos 2i P(mod n) para 0 ≤ i ≤ 23, como acima. Então começamos adicionando os pontos da tabela para calcular kP(mod m). Como um penúltimo passo, encontramos (24 + 26 + 210 + · · · + 220 + 221 ) P = 386363P ≡ (11150004543, 1676196055)(mod n) 10 XXV Semana de Matemática • 14 a 18 de Outubro de 2013 • Unesp-Ibilce Também 223 P ≡ (1267572925, 848156341)(mod n). Então para calcular kP teremos que somar estes últimos pontos módulo n. Para fazer isso temos que tomar a diferença de suas coordenadas x e encontrar o inverso de n. Mas quando tentamos fazer isso, descobrimos que o inverso não existe porque (11150004543 − 1267572925, n) = (−152568382, 1715761513) = 26927. Assim a tentativa de calcular 12252240(2, 1) na curva y2 = x3 + 42x − 91(mod 1715761513) falha, mas ele leva a fatoração n = 1715761513 = 26827 · 63719 É fácil conferir que cada um desses fatores é primo, assim o algoritmo nos dá a fatoração completa de n. Example 3 Seja n = 35. Observe que 35 não é primo e também não é uma potência perfeita. Considere k = 6 = 0 + 2 + 22 . Tome b = 1 e c = 1 − 1 − 1 = −1(mod 35) = 34. Então C : y2 = x3 + x + 34 e P = (1, 1) ∈ C. Observamos (31216, 35) = 1. Sejam P1 := P e P2 := 2P1 . Calculemos P1 := 2P: 3+0+1 (mod 35) = 2, 2 o que implica x3 = 2. Por outro lado, y3 = −2 · 2 − (1 − 2) = −3 = 32(mod 35), ou P1 = (2, 32). Pelo mesmo processo, 2P1 = (25, 12), onde 25 = λ2 − x1 − x2 , 12 = −λ · 25 − (−y1 − λx1 ), x1 = x2 = 2, y1 = y2 = 32 e x3 = λ2 − 2, λ= λ= 3 · 22 + 1 13 (mod 35) = (mod 35) = 13 · 29(mod 35) = 377(mod 35) = 27. 64 64 Então d := (27 − 2, n) = (25, 35) = 5. Como 1 < d < n = 35, pelo algoritmo que 5 é um fator de 35. Referências [H] Hefez, A. Introdução à Geometria Projetiva, Monografias de Matemática No 46 IMPA (1990) [DH] Husemöller, D. Elliptic Curves, Graduate Texts in Matehmatics 111, Springer - Verlag (1987) [S] Silverman, J. H and Tate, J. Rational Points on Elliptic Curves, Undergraduate Texts in Matehmatics Springer - Verlag (1992) [V] Vainsencher, I. Introdução às Curvas Algébricas IMPA (2005) 11