Arquivo PDF - IBILCE

Propaganda
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
Download