Está en la página 1de 54

TRABAJO FIN DE GRADO

Ttulo

Factorizacin

Autor/es

Urko Nalda Gil

Director/es

Jos Mara Prez Izquierdo


Facultad

Facultad de Ciencias, Estudios Agroalimentarios e Informtica


Titulacin

Grado en Matemticas

Departamento

Curso Acadmico

2013-2014
Factorizacin, trabajo fin de grado
de Urko Nalda Gil, dirigido por Jos Mara Prez Izquierdo (publicado por la Universidad
de La Rioja), se difunde bajo una Licencia
Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.
Permisos que vayan ms all de lo cubierto por esta licencia pueden solicitarse a los
titulares del copyright.

El autor
Universidad de La Rioja, Servicio de Publicaciones, 2014
publicaciones.unirioja.es
E-mail: publicaciones@unirioja.es
Facultad

Facultad de Ciencias, Estudios Agroalimentarios e Informtica


Titulacin

Grado en Matemticas
Ttulo

Factorizacin
Autor/es

Urko Nalda Gil


Tutor/es

Jos Mara Prez Izquierdo


Departamento

Matemticas y computacin
Curso acadmico

2013-2014
ii

Resumen

A lo largo de este trabajo se hace un repaso general a algunos de los algorimtos


de factorizacion de numeros enteros mas destacados, bien sea por su uso actual,
o por su importancia historica. En el primer captulo se da una introduccion
historica en la que se repasa parte de la evolucion de la factorizacion de numeros
enteros a traves de los anos y que finalmente describe la situacion actual. En el
segundo captulo se estudian algoritmos basicos como el algoritmo de Fermat y
otros mas complejos como el algoritmo de curvas elpticas o la criba cuadratica,
entre otros.

Abstract

Along this paper we study the most important integer factorization algorithms,
either because they are used nowadays or because of their historic importance.
In the first chapter an historic introduction is given. There we study how
integer factorization has evolved over the years finishing with a description
of the current situation. In the second chapter we study basic algorithms
such as Fermats algorithm and more complex ones such as the elliptic curves
algorithm or the quadratic sieve.
Indice general

1 Historia 1

1.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Primeros algoritmos de factorizacion . . . . . . . . . . . . . . . 2

1.3 Complejidad de la factorizacion . . . . . . . . . . . . . . . . . . 5

1.4 Incorporando las maquinas . . . . . . . . . . . . . . . . . . . . . 6

1.5 Era moderna . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2 Algoritmos de factorizacion 9

2.1 Algoritmo de Fermat . . . . . . . . . . . . . . . . . . . . . . . . 9

2.2 Mejora de Kraitchik . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3 Algoritmos de John F. Pollard . . . . . . . . . . . . . . . . . . . 13

2.4 Algoritmo de fracciones continuas . . . . . . . . . . . . . . . . . 19

2.5 Curvas elpticas . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2.6 Criba cuadratica . . . . . . . . . . . . . . . . . . . . . . . . . . 30

2.7 Criba general del cuerpo de numeros . . . . . . . . . . . . . . . 41

Referencias 45

iv
Captulo 1

Historia

1.1 Introduccion

Los numeros primos pueden ser considerados como los atomos de la aritmeti-
ca. Tal y como los qumicos organizan los elementos qumicos en una tabla
periodica, Eratostenes cerca del siglo 3 a.C. descubrio una forma relativamen-
te sencilla de producir una lista de numeros primos hasta un cierto valor. De
la misma manera que todas las moleculas pueden ser reducidas al conjunto de
atomos que las forman, lo mismo ocurre con los numeros compuestos.

Desde que aparecieron los primeros interesados en los numeros primos,


hubo algunos que se planteaban descomponer numeros compuestos en los fac-
tores primos que los forman. La tarea de descomponer numeros en sus factores
primos se conoce con el nombre de factorizacion.

Aunque la factorizacion de numeros es un tema de gran trascendencia en


la teora de numeros, es tambien computacionalmente muy costoso.

Algunas de las primeras ayudas en las que se apoyaron los primeros intere-
sados en la factorizacion de numeros fueron unas tablas que contenan los fac-
tores primos de numeros compuestos y que se publicaban en las caras traseras
de textos matematicos. En 1659 el matematico suizo Johann Rahn publico una
tabla con los factores primos de los numeros hasta el 24.000 (salvo aquellos
numeros divisibles por 2 y por 5). Posteriormente, en torno al ano 1668, John
Pell publico una extension de la tabla de Rahn que contena la descomposicion
de los numeros hasta el 100.000. A finales del siglo XIX ya existan tablas que
contenan la descomposicion de los numeros hasta el 10.000.000.

1
2 1.2. Primeros algoritmos de factorizacion

Para los numeros situados fuera del rango abarcado por las tablas de facto-
rizacion se requieren otras tecnicas para la factorizacion de numeros. Existen
numerosos algoritmos de factorizacion.

1.2 Primeros algoritmos de factorizacion

1.2.1 Division por tentativa

El algoritmo de division por tentativa (o trial division) es el algoritmo de facto-


rizacion de numeros enteros mas sencillo e intuitivo. Actualmente es un metodo
que funciona bastante bien y es bastante rapido para gran parte de los nume-
ros enteros. De hecho, se ha demostrado que en torno al 88 % de los numeros
enteros tienen un factor inferior a 100, mientras que el 92 % tienen un factor
inferior a 1000. Por este motivo, muchos de los algoritmos modernos de fac-
torizacion comienzan utiliando la division por tentativa. Desafortunadamente,
si el numero que queremos factorizar no tiene un factor primo suficientemente
pequeno, este algoritmo puede ser extremadamente lento.

Notemos que un factor primo de cualquier numero compuesto N puede


ser como mucho N . Por lo tanto, para factorizar un numero utilizando esta
tecnica, empezaremos comprobando si el primer numero primo p1 divide a
N . Si lo hace, almacenaremos dicho factor p1 y volveremos a comprobar si p1
divide a pN1 y as sucesivamente. Cuando nuestro numero primo ya no divida al
numero compuesto, avanzaremos al siguiente numero primo y repetiremos el
proceso hasta encontrar todos los factores primos de N. Notar que este metodo
garantiza encontrar todos los factores de N , de este modo, si el algoritmo no
encuentra ningun factor de N , esto significa que N es un numero primo.

Aunque la division por tentativa es el algoritmo mas sencillo, tambien es


el mas costoso en terminos computacionales.

1.2.2 Criba de Eratostenes

Eratostenes (276 a.C. - 194 a.C.) era un cientfico de la Antigua Grecia que
enuncio un sencillo algoritmo para obtener una lista con los numeros primos
inferiores a un cierto numero N .

En un primer lugar, se listan todos los numeros desde 2 hasta N y se


Captulo 1. Historia 3

procede de la siguiente manera. El primer numero (el 2) debe ser un numero


primo, por lo que se tachan todos los numeros que sean multiplos de 2. El
siguiente numero en la lista es el 3 que tambien debe ser primo, nuevamente se
descartan los multiplos de 3. As se procede, cuando encontramos un numero
primo, se eliminan todos los multiplos de ese numero primo y se avanza al
siguiente numero que no haya sido tachado. La iteracion del algoritmo finaliza
cuando avancemos a un numero primo p tal que p2 > N y en ese momento,
todos los numeros que no hayan sido tachados seran numeros primos.

Este algoritmo claramente requiere un gran tamano


de memoria y si apli-
camos el algoritmo a un numero primo, requerira N ciclos para determinar
dicho resultado. No obstante, entrara en juego en uno de los algoritmos mas
potentes, la criba cuadratica.

1.2.3 Pierre de Fermat

Pierre de Fermat (1601-1665) fue un matematico frances considerado por mu-


chos como el padre de la teora de numeros. Aunque sus publicaciones fueron
mnimas, escribio numerosas cartas dirigidas a otros matematicos que con-
tenan un gran numero de hallazgos. Su algoritmo para factorizar numeros fue
encontrado en una carta sin fecha que probablemente dirigio a Marin Mersenne
y que se basaba en las siguientes ideas:

1. Si un numero puede ser escrito como la diferencia de dos cuadrados, es


decir N = x2 y 2 , entonces hemos encontrado una factorizacion sencilla
de la forma
N = (x + y)(x y). (1.1)

2. Por otro lado, si N = ab con b > a entonces x e y pueden ser escritos de


la siguiente forma
b+a ba
x= , y= (1.2)
2 2

La idea del algoritmo de Fermat radica en encontrar x e y tales que y 2 =


x2 n. Para ello se partira de x = b N + 1c.1

Ilustraremos el caso con un ejemplo. Supongamos N = 13837, su raz cua-


drada se encuentra entre 117 y 118, por lo que partimos de x = 118. El siguiente
paso consiste en comprobar si y 2 = x2 N se trata de un numero cuadrado,
1
bac representa el mayor numero entero que es menor o igual que a.
4 1.2. Primeros algoritmos de factorizacion

pero en este caso tenemos 1182 13837 = 87, que no es un cuadrado. En este
momento incrementamos x en uno, por lo que x = 119 y repetimos el proceso,
y = x2 N = y = 1192 13837 = 324 = 182 . Llegados a este punto, hemos
encontrado una factorizacion inicial para N = 13837 = (119 + 18)(119 18) =
137 101.

Para encontrar una factorizacion completa de N en numeros primos, de-


beramos reiterar el metodo para los numeros 137 y 101 y sucesivamente a los
factores que aparezcan, hasta tener unicamente factores primos.

Notar que el algoritmo de factorizacion de Fermat funciona realmente bien


si los factores de un numero estan cerca de la raz cuadrada del mismo.

1.2.4 Leonhard Euler

Leonhard Euler (1707-1783) fue un matematico suizo que realizo grandes con-
tribuciones a un amplio rango de campos de las matematicas como la geometra
analtica, la trigonometra, el calculo y la teora de numeros. Es considerado
como uno de los matematicos mas productivos de la historia. El metodo de
Euler fue mencionado en una carta dirigida a Christian Goldbach (1690-1764)
el 16 de febrero de 1745.

El metodo de Euler se aplica a numeros que pueden ser expresados como la


suma de dos numeros cuadrados. Tambien se asume que N es impar. De esta
forma tenemos
N = a2 + b 2 . (1.3)
Supongamos ahora que N admite una segunda representacion como la suma
de dos cuadrados c2 y d2 , de esta forma tenemos la expresion
N = a2 + b2 = c2 + d2 = a2 c2 = d2 b2 (1.4)
o lo que es lo mismo
(a + c)(a c) = (d + b)(d b) (1.5)
Si consideramos ahora
(
a c = kl
k = mcd(a c, d b) = (1.6)
d b = km
Notar que ademas mcd(l, m) = 1 ya que sino k 6= mcd(a c, d b). Por lo
tanto, sustituyendo hora en (5) tenemos (a + c)kl = (d + b)km, simplificando
alcanzamos la expresion
(a + c)l = (d + b)m (1.7)
Captulo 1. Historia 5

y como l y m son primos entre s, entonces, por un lado a + c es divisible por


m y por otro d + b es divisible por l, o lo que es lo mismo

a + c = mn, d + b = ln (1.8)

llegando as a la siguiente expresion


"  #
2
k  n 2
N= + (m2 + l2 ) (1.9)
2 2

De este modo, ya hemos encontrado dos factores de N. Finalmente, para


comprobar que este resultado es correcto, realizamos la multiplicacion

1
N = (k 2 m2 + k 2 l2 + n2 m2 + n2 l2 ) (1.10)
4

y por ultimo sustituimos los valores de (6) y de (8)

1 1
N = (2a2 + 2b2 + 2c2 + 2d2 ) = (2N + 2N ) = N (1.11)
4 4

1.3 Complejidad de la factorizacion

A pesar de la existencia de estos y otros muchos algoritmos, factorizar fue una


tarea muy complicada cuando todo el trabajo se haca a mano, no obstante
hoy en da sigue siendo una tarea compleja y costosa aunque el rango de nume-
ros cuya factorizacion se conoce ha crecido notablemente. Con el objetivo de
ilustrar la dificultad de la que hablamos consideraremos la siguiente anecdota.
En octubre de 1903 Frank Nelson Cole, un matematico norteamericano, pre-
sento un trabajo titulado On the factorization of large numbers. Sin decir una
palabra, se aproximo a la pizarra y escribio el 67o numero primo de Mersenne2 ,
267 1 y a continuacion realizo el producto de 193.707.721 761.838.257.287.
Ambos resultados coincidan. Cole haba probado que el 67o numero primo de
Mersenne no era realmente un numero primo. La audiencia de la Sociedad Ma-
tematica Americana, puesta en pie, aplaudio fuertemente a Cole, era la primera
vez que un matematico se ganaba tal reconocimiento sin haber pronunciado
una palabra.
2
Los numeros primos de Mersenne son aquellos numeros primos de la forma Mn = 2n 1,
con n un numero primo.
6 1.4. Incorporando las maquinas

1.4 Incorporando las maquinas

Varios avances realizados en el siglo XX aceleraron los metodos de factoriza-


cion de numeros enteros incorporando procesos mecanizados. En 1896 F.W.
Laurence describio una maquina que utilizaba tiras de papel que circulaban a
lo largo de engranajes con dientes, donde el numero de dientes representaba
una exclusion modular y la zona donde el papel era perforado representaba
un resto valido. Aunque la maquina de Lawrence nunca llego a construirse,
inspiro otros proyectos y maquinas que s obtuvieron resultados.

En 1910, una traduccion al frances del trabajo de Lawrence fue publicada


y poco tiempo despues Maurice Kraitchik construyo una maquina basada en
las ideas de Lawrence.

En torno al ano 1925, las calculadoras mecanicas incluyeron ayudas para


la realizacion de multiplicaciones y divisiones. En 1927 Derrick Henry Lehmer,
un matematico americano construyo una maquina conocida como bycicle chain
sieve. Consista en un largo cilindro sobre el cual giraban varias cadenas de bi-
cicleta de diferentes longitudes. Cada cadena contenia un dispositivo en uno de
sus enlaces que, cuando la cadena se situaba en una posicion concreta, cerraba
un circuito. Si todas las cadenas estaban en la misma posicion en el mismo
momento, una corriente poda circular a traves del dispositivo y notificar al
operador que un numero relevante se haba encontrado. Esta maquina poda
escanear en torno a 50 numeros por segundo y permitio llevar a cabo las dos
factorizaciones siguientes:

1020 + 1 = 73 137 1.676.321 5.964.848.081 (1.12)

2.019.210.335.106.439 = 25.709.599 78.539.161 (1.13)

En 1932, el propio Lehmer mejoro su maquina construyendo la Photoelectric


Number Sieve. Este dispositivo permita realizar 300.000 pruebas por minuto.
Produjo resultados impresionantes incluyendo las dos siguientes factorizacio-
nes.
279 1 = 2.687 202.029.703 1.113.491.139.767 (1.14)
y

293 + 1 = 32 529.510.939 715.827.883 2.903.110.321 (1.15)

En esta ocasion, en vez de utilizar cadenas de bicicleta, Lehmer utilizo unos


engranajes muy precisos con agujeros que permitan pasar la luz. Si todos los
engranajes se alineaban de una cierta manera, la luz poda pasar a traves de
Captulo 1. Historia 7

los agujeros y se iluminaba un detector que detena el dispositivo. El operario


poda en ese momento rebobinar el dispositivo para ver que valores eran los
que haban alineado los engranajes.

Con la introduccion de las computadoras electronicas, se produjeron nuevos


avances en el ambito de la factorizacion. Lehmer descubrio impresionado como
durante un fin de semana el ENIAC produca 85 nuevos factores de 2k 1 para
k < 500. Para comprender lo sorprendentes que eran los resultados, es necesario
destacar que una computadora manual era capaz de encontrar unos pocos
factores en unos pocos meses. Se convirtio en algo comun utilizar el tiempo libre
de las computadora para tratar de factorizar numeros. Se conservan informes
de ingenieros de IBM que reconocan que estos programas de factorizacion en
algunas ocasiones han detectado problemas de hardware que los tests que se
realizaban habitualmente haban pasado por alto.

1.5 Era moderna

Con la aparicion de la criptografa de clave publica, el numero de investi-


gaciones relacionadas con el campo de la factorizacion de numeros enteros
crecio de forma acelerada. La seguridad de la criptografa de clave publica de-
pende directamente de la dificultad de factorizar numeros enteros y por ello, la
capacidad de factorizar numeros enteros de gran tamano permitira romper la
mayor parte de mecanismos de cifrado. En la edicion de agosto de 1977 de la
revista Scientific American, la columna de Gardner Martin propuso el desafo
de factorizar un numero de 129 cifras. En esa epoca se pensaba que dicha tarea
llevara millones de anos de trabajo. En realidad fue factorizado solo 17 anos
despues, en 1994.

Carl Pomerance, un norteamericano nacido en 1944 fue uno de los ma-


tematicos que se situo detras de la factorizacion del numero propuesto por
Martin. Cuando estaba en el colegio, a Pomerance le propusieron en clase un
ejercicio que consista en hallar los factores del numero 8051 en cinco minutos.
Astutamente asumio que haba algun tipo de truco que permitira simplificar
el problema e invirtio unos pocos minutos pensando en ello, preocupado por-
que el tiempo corra, prosiguio tratando de factorizar el numero mediante la
division por tentativa.3 Obviamente no factorizo el numero a tiempo pero sin
embargo, esta anecdota tuvo una fuerte repercusion a largo plazo en la vida
de Pomerance. Cuando Pomerance vio el desafo propuesto por RSA, se plan-
3
El truco que haba supuesto Pomerance exista, ya que 8051 = 8100 49 = 902 72 que
puede ser factorizado rapidamente utilizando el algoritmo de Fermat.
8 1.5. Era moderna

teo un modo de atacar el problema y esto desemboco en la aparicion de uno de


los algoritmos modernos de factorizacion mas importantes, la criba cuadratica.

Cerca del ano 1970 los metodos mas rapidos para factorizar numeros enteros
eran las maquinas cribadoras. No obstante, en aquella epoca ya se saba que
la potencia de calculo de las computadoras era muy superior, solo necesitaban
un algoritmo para factorizar numeros.

La decada de los 70 proporciono varios algoritmos, uno de los primeros fue


el que desarrollo Daniel Shank utilizando formas cuadraticas en el algoritmo
de factorizacion de formas cuadraticas, sin embargo era bastante complejo
y difcil de implementar, pese a ello se utilizo durante varios anos de forma
satisfactoria en varias versiones.

John Pollard es un matematico britanico autor del metodo p 1 en 1974


y del metodo solo un ano despues. Ambos metodos estan enfocados a la
factorizacion de los enteros que cumplen una serie de requisitos. Brillhart y
Morrison presentaron el primer algoritmo rapido enfocado de forma general a
todo tipo de enteros, el algoritmo de factorizacion de fracciones continuas.

Richard Pierce Brent, un matematico norteamericano nacido en 1946, op-


timizo el metodo de Pollard en 1980. Poco despues fue cuando Pomerance
invento el algoritmo de criba cuadratica.

El 31 de agosto de 1988 John Pollard envio una carta a A.M. Odlyzko con
sendas copias para Richard P. Brent, J. Brillhart, H.W. Lenstra, C.P. Sch-
norr y H. Suyama, explicando una idea para factorizar un tipo concreto de
numeros basandose en cuerpos algebraicos. Poco despues de que dicha idea
fuera implementada, se mejoro para obtener un algoritmo de factorizacion de
caracter general conocido como criba general del cuerpo de numeros, obtenien-
do as el algoritmo de factorizacion mas complejo pero tambien el mas rapido.
Ha conseguido realizar la factorizacion de numeros compuestos de 512 bits.

Desde que aparecio la criba general del cuerpo de numeros en torno al ano
1990 apenas se han desarrollado nuevas ideas y algoritmos, solo optimizaciones
de este.
Captulo 2

Algoritmos de factorizacion

En esta seccion analizaremos algunos de los algoritmos de factorizacion mas


trascendentales y utilizados tanto a lo largo de la historia como en la actuali-
dad.

2.1 Algoritmo de Fermat

Como ya se menciono en el apartado historico, el algoritmo de Fermat es


un algoritmo de factorizacion especfico, es decir, el numero a factorizar debe
cumplir unos requisitos previos. Se basa en la idea de factorizar un numero N
que es la diferencia de dos cuadrados donde uno de ellos es muy pequeno.

Actualmente no es uno de los algoritmos mas implementados y utilizados,


de hecho apenas se usa salvo que se sepa previamente que el numero que
queremos factorizar tiene dos factores ceranos a la raz cuadrada del propio
numero. No obstante, el algoritmo de Fermat contiene la idea principal en la
que se basan algunos de los algoritmos mas potentes que se conocen, como la
criba cuadratica y el algoritmo de fracciones continuas.

El objetivo que persigue el algoritmo de Fermat consiste en descomponer un


numero en dos factores. Para hallar una descomposicion en factores primos,
debemos continuar factorizando sucesivamente cada uno de los factores que
obtengamos hasta que todos ellos sean numeros primos.

Proposicion 1. Sea N un numero entero, impar y positivo. Existe una corres-


pondencia biyectiva entre cualquier factorizacion de N de la forma N = ab,

9
10 2.1. Algoritmo de Fermat

donde a b > 0, y las representaciones de N de la forma N = x2 y 2 , donde


x e y son numeros enteros no negativos. Dicha correspondencia viene dada por
las ecuaciones
a+b ab
x= , y= ; a = x + y, b=xy (2.1)
2 2

Demostracion. Dada la factorizacion N = ab, podemos escribir N = ab =


a+b 2 ab 2

2
2 , obteniendo de esta forma la diferencia de cuadrados.
Por otro lado, si tenemos N = x2 y 2 podemos factorizar facilmente la parte
derecha como (x + y)(x y).

Si N = ab con a y b numeros proximos, entonces


y sera un numero pequeno,
por lo que x sera un numero ligeramente mayor que N . En ese caso, podemos
encontrar
los dos factores a y b probando todos los valores de x a partir de
b N c + 1 hasta que encontremos uno para el que se cumpla x2 N = y 2 .
Notar que si N es de por s un cuadrado perfecto estamos ante una excepcion
trivial.
Ejemplo. Factorizar N = 2093713 mediante el algoritmo de Fermat.

Solucion. Partiremos de x = b 2093713c + 1 = 1447

x x2 N

1447 96 = 9.79796

1448 2991 = 54.69

1449 5888 = 76.7333
.. ..
. .

1462 43731 = 209.12

1463 46656 = 216

Ya hemos encontrado la forma de expresar nuestro numero N como dife-


rencia de dos cuadrados:

N = 14632 2162 = (1463 + 216)(1463 216) = 1679 1247 (2.2)

En este caso los factores encontrados no son primos, pero obviamente con-
tienen los factores primos de N , si son numeros pequenos, como en este caso,
se puede aplicar la division por tentativa a cada factor, en caso contrario se
podra proceder aplicando el algoritmo de Fermat u otro algoritmo de factori-
zacion. Notar que si los factores a y b no estuvieran relativamente proximos, el
Captulo 2. Algoritmos de factorizacion 11

algoritmo de factorizacion de Fermat encontrara


ambos
factores pero despues
de probar una larga lista de numeros x = b N c + 1, b N c + 2, . . ..

Existe una variacion del algoritmo de Fermat que funciona de una forma
mas eficiente en determinadas situaciones. Se le atribuye al matematico belga
Maurice Kraitchik (1882-1957) y se basa en el uso de congruencias.

2.2 Mejora de Kraitchik

Para aplicar esta generalizacion del algoritmo de Fermat es suficiente con que
N divida a x2 y 2 para encontrar un factor de N , es decir:

N x2 y 2 = (x + y)(x y) (2.3)

si ahora N no divide ni a x y ni a x + y, entonces podemos concluir que


mcd(x + y, N ) > 1 y ya hemos encontrado un factor no trivial de N . Por lo
tanto, el objetivo sera buscar numeros x e y tales que

x2 y 2 (mod N )
(2.4)
x 6 y (mod N )

Supongamos ahora que encontramos un conjunto de numeros x1 , . . . , xn , ta-


les que x21 a1 (mod N ), . . . , x2n an (mod N ) para ciertos enteros a1 , . . . , an .
Si ahora un subconjunto ai1 , . . . , air de a1 , . . . , an cumple que el producto
ai1 air es un cuadrado, entonces

(xi1 xi )2 ai1 air (mod N ) (2.5)

y de esta forma tenemos la congruencia buscada x2 y 2 (mod N ). Ahora esta


congruencia puede o no satisfacer x 6 y (mod N ), lo cual determina finalmente
si los numeros encontrados son utiles para la factorizacion de N .

Ejemplo. Factorizar N = 642537 mediante la mejora de Kraitchik


2
Definimos primero el polinomio P (x) = x N y tomamos
Solucion.
x0 = b N c + 1, en este caso tenemos x0 = 802. Sea ahora xk = x0 + k,
calculamos unos cuantos valores de P (xk ), obteniendo la siguiente tabla:

Ya tenemos dos numeros u = 805 812 y v = 22 74 tales que


u2 (mod 642537) = 354025 y v 2 (mod 642537) = 354025, es decir,

u2 v 2 (mod 642537) (2.6)


12 2.2. Mejora de Kraitchik

xk P(xk ) Factores
802 667 23, 29
803 2272 25 , 71
804 3879 32 , 431
805 5488 24 , 73 X
806 7099 31, 229
807 8712 2 , 3 , 112
3 2

808 10327 23, 449


809 11944 23 , 1493
810 13563 32 , 11, 137
811 15184 24 , 13, 73
812 16807 75 X

mientras que por otro lado u (mod 642537) = 11123 y v (mod 642537) = 9604,
o lo que es lo mismo
u 6 v (mod 642537) (2.7)
por lo tanto tenemos

mcd(642537, 11123+9604) = 20727, mcd(642537, 111239604) = 1519 (2.8)

obteniendo as dos factores no triviales de 18601.

La complejidad del algoritmo de Kraitchik radica en encontrar los numeros


u y v apropiados. En torno al ano 1931, D.H. Lehmer y R.E. Powers de-
mostraron como encontrar dichos pares de numeros de una forma sistematica
utilizando fracciones continuas, sin embargo, su algoritmo no fue util hasta
que avanzo la capacidad de calculo de las computadoras. Daniel Shanks fue
uno de los primeros en aprovechar el trabajo realizado por Kraitchik, Lehmer
y Powers, dando lugar as al algoritmo de factorizacion de formas cuadraticas
(SQUFOF), que por su similitud teorica con los algoritmos de Fermat y Krait-
chik no se explicara en este trabajo. En 1975, John Brillhart y Michael Morison
utilizaron fracciones continuas y, apoyandose en los estudios de Lehmer y Po-
wers, publicaron un libro llamado A Method of Factoring and the Factorization
of F7 , que se ha convertido en la version estandar del algoritmo de fracciones
continuas (CFRAC), momento a partir del cual comenzo la factorizacion de
numeros realmente grandes.

Durante anos, el algoritmo de fracciones continuas se gano el atributo de


algoritmo mas rapido para factorizar numeros grandes con factores primos
elevados. Muchas maquinas dedicadas a la factorizacion de numeros enteros
Captulo 2. Algoritmos de factorizacion 13

ejecutaban este algoritmo. La maquina conocida por el nombre de Georgia


Cracker utilizaba el algoritmo de fracciones continuas manipulando enteros de
hasta 60 cifras. En las sucesivas decadas, la criba cuadratica de Carl Pomerance
llego a desbancar al algoritmo de fracciones continuas.

2.3 Algoritmos de John F. Pollard

Uno de los inconvenientes que tienen el algoritmo de fracciones continuas y


la criba cuadratica es que no son tan eficientes a la hora de buscar factores
primos de un tamano medio, entre 105 y 1010 , como lo son cuando se trata de
factores realmente grandes. Por ello, si un numero compuesto tiene un factor
primo demasiado grande para calcularlo utilizando la division por tentativa,
necesitamos una forma mas eficiente de calcularlo que la proporcionada por
los algoritmos mas potentes.

En este punto aparecen dos algoritmos propuestos por el matematico


britanico John Pollard. Pese a que ninguno de los dos es suficientemente efi-
ciente cuando se trata de enteros grandes, ambos son sencillos de entender y
faciles de implementar. En la practica, cuando estamos factorizando un nume-
ro y ya hemos exprimido al maximo la division por tentativa obteniendo los
factores inferiores a 105 , se ejecutan los algoritmos de Pollard para tratar de
encontrar algun factor antes de utilizar los algoritmos realmente potentes.

Se trata de dos algoritmos pseudoaleatorios ya que generan sucesiones que


son analizadas como si fueran completamente aleatorias. Actualmente se co-
nocen como metodo de Pollard y metodo p 1 de Pollard.

2.3.1 Algoritmo de Pollard

Para llevar a cabo la factorizacion de un numero N, consideramos en primer


lugar una funcion aleatoria f : A A, con A = {0, 1, . . . , l 1}, y donde f
sera generalmente un polinomio irreducible. Sea ahora a A tomado de forma
aleatoria, consideramos la secuencia

a, f (a), f (f (a)), . . . (2.9)

Como f es una funcion definida en un conjunto finito, llegara un punto en el que


f repetira un valor y a partir de ah obtendremos un ciclo. Si representamos este
comportamiento en forma de diagrama, llegaremos a una estructura similar a
14 2.3. Algoritmos de John F. Pollard

la de la letra griega , con una primera parte precclica que sera la cola de
la letra y posteriormente la parte cclica que representara el crculo del
caracter.

Figura 2.1: Forma de la sucesion de ai con forma similar a la letra griega


, motivo por el cual se le atribuye ese nombre al algoritmo desarrollado por
John F. Pollard.

En esta parte entra en juego la paradoja del cumpleanos1 , y se estima


que
la longitud de la cola y de la parte circular juntas, sean del orden de l.

Supongamos ahora que p es un numero primo y tomamos


A = {0, 1, . . . , p 1}. Trabajarmos con la siguiente funcion f :

f : A A
(2.10)
x x2 + 1(mod p)
de esta forma, si la funcion considerada es lo suficientemente aleatoria, espera-
mos que la sucesion {f (i) (a), a A} con i = 0, 1,. . . que parte de un numero
a aleatorio, comience a repetrise antes del paso l. Es decir, esperamos que
f (j) (a) = f (k) (a) con 0 j < k con k cercano a l.

Si ahora tratamos de factorizar un numero N y p es el menor fac-


tor primo de N , como no conocemos p, no podemos calcular la se-
cuencia a, f (a), f (f (a)), . . . , pero s que podemos calcular la secuencia
a, F (a), F (F (a)), . . . dada por la funcion

F : A A
(2.11)
x x2 + 1(mod N )

donde claramente f (x) = F (x)(mod p). De este modo

f (j) (a) = f (k) (a) = F (j) (a) F (k) (a)(mod p) (2.12)


1
La paradoja del cumpleanos estudia la probabilidad de que al tomar en un conjunto con
n elementos dos de ellos al azar, estos sean el mismo.
Captulo 2. Algoritmos de factorizacion 15

esto implica que p mcd(F (j) (a) F (k) (a), N ). Lo mas probable es que ese
maximo comun divisor no sea igual a N , lo que nos proporcionara un factor
no trivial del mismo.
Ejemplo. Factorizar N = 738031 mediante el algoritmo de Pollard.
Solucion. Primero determinamos cual sera la funcion f utilizada, en nuestro
caso tomamos f (x) = x2 + 1(mod N ) y partiremos del dato inicial a0 = 356
A = {0, 1, . . . , N 1}. El siguiente paso consiste en calcular la secuencia.

i ai = f (ai1 )
1 126737
2 498517
3 544598
4 367883
5 729034
6 500631
7 498748
8 647141
9 211118
10 379804

A continuacion, buscamos dos numeros aj , ak tales que


mcd(aj ak , N ) 6= 1. En nuestro caso, la primera vez que ocurre es con
el par (a2 , a3 ), con el cual obtenemos
mcd(544598 498517, 738031) = 7 (2.13)
obteniendo de esta forma la descomposicion en factores de
N = 738031 = 7 105433.

Una de las principales preocupaciones a la hora de aplicar este meto-


do es la de evitar el hecho de calcular todos los pares (j, k) y todos los
mcd(F (j) (a) F (k) (a), N ) para cada par. Hacer eso podra suponer mas tiem-
po del que costara encontrar el primer factor primo p mediante division por
tentativa.

Debemos buscar una alternativa para encontrar pares (j, k) validos y evitar
as examinarlos todos. Una de las alternativas que puede ser de gran ayuda es
el algoritmo busca-ciclos de Floyd, tambien conocido como el algoritmo de la
tortuga y la liebre.

Si tenemos la funcion f : ZN ZN y x0 = y0 ZN , definimos las dos


secuencias xi+1 = f (xi ) e yi+1 = f (f (yi )). Interpretamos la sucesion xi como la
16 2.3. Algoritmos de John F. Pollard

trayectoria de la tortuga, que recorre todos los nodos de la sucesion mientras


que yi representa a la liebre, saltando por los terminos de la sucesion de dos
en dos. Claramente ambas trayectorias coincidiran cuando la distancia entre
ellas sea igual a la longitud del ciclo formado por la sucesion inicial, cosa que
siempre ocurre antes de que la tortuga realice un ciclo completo.

Ejemplo. Factorizar N = 738031 mediante el algoritmo de Pollard y apli-


cando el algoritmo busca-ciclos de Floyd.

Solucion. Volvemos a utilizar la misma tabla del ejemplo anterior.

i ai = f (ai1 )
1 126737
2 498517
3 544598
4 367883
5 729034
6 500631
7 498748
8 647141
9 211118
10 379804

A continuacion se calcula mcd(ai a2i , N ) con i = 1, 2, . . . hasta encontrar


un caso en el que mcd(ai a2i , N ) 6= 1 (notar que el primer valor que toma
i no tiene por que ser necesariamente i = 1). En nuestro caso obtenemos un
resultado valido cuando i = 2:

mcd(a2 a4 , N ) = mcd(498517 367883, 738031) = 7 (2.14)

de esta forma hemos encontrado un factor tras solo 2 iteraciones, una forma
mas eficiente que la anterior, en la que necesitamos 23 iteraciones.

2.3.2 Algoritmo p 1 de Pollard

Este algoritmo es similar al algoritmo de Pollard salvo que se apoya en el


pequeno teorema de Fermat que se enuncia a continuacion.

Teorema 1 (Pequeno teorema de Fermat). Sea p un numero primo tal que


no divide a un entero a, entonces

ap1 1(mod p) (2.15)


Captulo 2. Algoritmos de factorizacion 17

Demostracion. Consideramos los enteros

a, 2a, . . . , (p 1)a (2.16)

ninguno de los enteros anteriores es divisible por p ya que eso significara que
p a, cosa que no ocurre por hipotesis. Notar que si

ra sa(mod p) s r(mod p) (2.17)

por lo tanto, a (mod p), 2a (mod p), . . . , (p1)a (mod p) son numeros distintos
y ninguno de ellos es cero, esto es lo mismo que decir que son congruentes con
1, 2, . . . , p 1 en algun orden.

Ahora multiplicamos todas las congruencias anteriores obteniendo as el


siguiente resultado

a 2a (p 1)a 1 2 (p 1) (mod p)
= (p 1)!ap1 (p 1)! (mod p) (2.18)
= ap1 1 (mod p)

Corolario 1. Sea p un numero primo e impar entonces

2p1 1 (mod p) (2.19)

Demostracion. Como p es un numero impar, claramente 2 - p por lo que apli-


camos el teorema anterior.2

Para el desarrollo del algoritmo p 1 de Pollard necesitaremos las dos


definiciones enunciadas a continuacion.

Definicion 1. Un numero N se dice B-liso si todos sus factores primos son


menores que B, es decir, si N = pk11 pk22 pknn entonces es B-liso si pi
B i = 1, . . . , n.

Definicion 2. Un numero N se dice B-potencia-lisa si las potencias de los


factores primos de N son menores que B. Si N = pk11 pk22 pknn entonces es
B-potencia-lisa si pki i B i = 1, . . . , n.

Una vez introducidos estos terminos vamos a explicar la estructura del


algoritmo p 1 de John F. Pollard.
2
La notacion a | b indica que a divide a b.
18 2.3. Algoritmos de John F. Pollard

Sea N el numero entero que queremos factorizar, el primer paso consiste en


elegir un entero positivo B, que generalmente no debe superar las seis cifras,
con la esperanza de que N tenga un factor p tal que p 1 sea B-potencia-lisa.
El objetivo sera encontrar p utilizando la siguiente estrategia. Sea a un entero
positivo no divisible por p, por el pequeno teorema de Fermat,

ap1 1(mod p) (2.20)

Sea m = mcm(1, 2, 3, . . . , B), como hemos asumido que p1 es B-potencia-lisa,


entonces se tiene claramente que p 1 | m, por lo tanto

am 1(mod p) (2.21)

o lo que es lo mismo p | am 1, de este modo tenemos

p | mcd(am 1, N ). (2.22)

Si mcd(am 1, N ) < N , entonces ya tenemos un factor no trivial de N .


Si por el contrario mcd(am 1, N ) = N , entonces debemos repetir el metodo
tratando de tomar un numero B menor o realizando una eleccion diferente de
a.

Aunque podemos tomar como a cualquier numero que no sea divisible por
p, en un primer intento es habitual tomar a = 2.

Como ya advertimos anteriormente, cuando aplicamos este algoritmo con


un numero B fijado previamente, este funcionara cuando el numero N a facto-
rizar contenga un factor p tal que p 1 sea B-potencia-lisa. Aproximadamente
el 15 % de los numeros primos p localizados en el intervalo (1015 , 1015 + 10000),
son de tal forma que p 1 es 105 -potencia-lisa. Esto significa que el algoritmo
p 1 de Pollar con B = 105 funciona en torno al 15 % de las veces cuando
tratamos de encontrar una raz de 15 dgitos situada en el rango especificado.

Ejemplo. Factorizar N = 124786124891235 mediante el metodo p 1 de


Pollard.

Solucion. En primer lugar determinamos los valores de las variables. En nues-


tro caso vamos a probar inicialmente con B = 8. Lo primero que haremos
sera calcular
m = mcm(1, 2, 3, . . . , 8) (2.23)
aunque en nuestro caso, como B se trata de un numero muy pequeno, podemos
tomar m = B! = 40320 porque claramente si p 1 | mcm(1, 2, . . . , 8) entonces
tambien p 1 | 8!.
Captulo 2. Algoritmos de factorizacion 19

A continuacion, tomamos a = 2 y de este modo tenemos

240320 1 47614174037505 (mod 124786124891235) (2.24)

y por ultimo calculamos

mcm(am1 , N ) = mcm(47614174037505, 124786124891235) = 135 (2.25)

encontrando, de esta forma, un factor compuesto no trivial p = 135.

2.4 Algoritmo de fracciones continuas

Como ya se introdujo anteriormente, el algoritmo de factorizacion mediante


fracciones continuas fue descrito en 1931 por D.H. Lehmer y R.E. Powers y fue
posteriormente en 1975 cuando John Brillhart y Michael Morison desarrollaron
un algoritmo de computadora basado en las ideas de Brillhart y Morison. A
continuacion se introducen varios conceptos necesarios para el desarrollo de
este apartado.

Se llama fraccion continua a una expresion del tipo:

1
x = a0 + (2.26)
1
a1 +
1
a2 +
1
a3 +
...

donde a0 Z, ai N cuando i 1. Se puede expresar la fraccion continua de


un numero x como:
x = [a0 , a1 , a2 , . . .] (2.27)

2.4.1 Representacion de un numero como una fraccion


continua

A continuacion se muestra como calcular cada valor ai que representa el numero


real x. Para ello definimos primero la serie

1 1
x0 = x, x1 = , . . . , xi = , i = 1, 2, . . . (2.28)
x0 bx0 c xi1 bxxi1 c
20 2.4. Algoritmo de fracciones continuas

y de este modo los coeficientes que representan la fraccion continua del numero
x seran
a0 = bx0 c, a1 = bx1 c, . . . , ai = bxi c, (2.29)

Las fracciones continuas permiten determinar la irracionalidad de un nume-


ro, ya que para que este sea racional, su desarrollo debe ser finito.

Definicion 3. Llamaremos i-esimo reducido de una fraccion continua a la


fraccion continua finita
mi
= [a0 , . . . , ai ] (2.30)
ni

mi
Notar que la sucesion de numeros racionales cumple que lm = x. Estos
i ni
reducidos se pueden obtener de forma recursiva
( ( (
m0 = a0 m 1 = a0 a1 + 1 mi = ai mi1 + mi2
i2 (2.31)
n0 = 1 n1 = a1 ni = ai ni1 + ni2

2.4.2 Algoritmo de fracciones continuas

Sea N el numero que queremos factorizar, en primer lugar debemos calcular


el i-esimo reducido de N y calcular bi m2i (mod N). Segun calculamos cada
valor bi descartaremos aquellos que no factoricen en la base de factores B
escogida, esta base de factores variara en funcion de N ya que dependiendo
del tamano del numero que queremos factorizar, sera suficiente con una base
de factores pequena o necesitaremos ampliarla.

Una vez que hayamos calculado suficientes numeros bi buscaremos un pro-


ducto de bi cuyos factores aparezcan un numero par de veces, es decir, tendre-
mos un conjunto {b1 , . . . , bk } tal que b1 bk= b2 . De
 esta forma habremos
k k
m2i (mod N).
Q Q
encontrado una congruencia del tipo bi
i=1 i=1

Por utlimo, para encontrar el factor de N se procedera como en el resto de


algoritmos que buscan congruencias cuadraticas, calculando el maximo comun
divisior de N con la diferencia de los numeros cuyo cuadrado era congruente
modulo N .

Ejemplo. Factorizar N = 173131 utilizando como base de factores B =


{1, 2, 3, 5, 7, 11, 13, 17}
Captulo 2. Algoritmos de factorizacion 21

Solucion.
En primer lugar calculamos una aproximacion de la expresion de
N como fraccion continua

173131 {416, 11, 10, 1, 1, 2, 1, 2, 2, 1, 4, 1, 1, 3, 2, 2, 2, 3, 7, 13} (2.32)

y a continuacion calculamos unos cuantos valores bi

[a0 , . . . , ai ] = mi
ni bi m2i (mod N) bi = pe11 pemm

[416] = 416 75 4162 (mod N) 75 = 1352


4577
[416,11] = 78 45772 (mod N) 78 = 2 3 13
11
46186
[416,11,10] = 455 461862 (mod N) 455 = 15713
111
50763
[416,11,10,1] = 365 507632 (mod N) 365 = 5 73
122
96949
[416,11,10,1,1] = 258 969492 (mod N) 258 = 12343
233
244661
[416,11,10,1,1,2] = 457 2446612 (mod N) 457 = 457 23
588
341610
[416,11,10,1,1,2,1] = 271 3416102 (mod N) 271 = 1 271
821
927881
[416,11,10,1,1,2,1,2] = 261 9278812 (mod N) 261 = 32 29
2230
2197372
[416,11,10,1,1,2,1,2,2] = 507 21973722 (mod N) 507 = 13132
5281

En este punto observamos que (75 507) = (1)2 32 52 132 o lo que


es lo mismo (75 507) = (1 3 5 13)2 por lo tanto tenemos la siguiente
congruencia:

4162 21973722 (1 3 5 13)2 (mod N) (2.33)

y a su vez tenemos que

416 2197372 148203 (mod N)


(2.34)
1 3 5 13 172936 (mod N)

de este modo calculamos ahora


mcd(148203 172936, 173131) = 24733
(2.35)
mcd(148203 + 172936, 173131) = 7

por lo que ya hemos encontrado dos factores no triviales de N

173131 = 7 24733 (2.36)


22 2.5. Curvas elpticas

2.5 Curvas elpticas

En 1987, Lenstra desarrollo un algoritmo que factorizaba numeros enteros


utilizando teora de curvas elpticas. Para explicar dicho proceso, vamos a
comenzar con una pequena introducion a teora de grupos.

2.5.1 Grupos

Definicion 4. Un grupo G es un conjunto no vaco con una operacion binaria

: G G G
(2.37)
(a, b) 7 a b

que cumple las siguientes propiedades:

1. La operacion es asociativa. Si a, b y c estan en G, entonces (a b) c =


a (b c).

2. Existe elemento identidad. e G tal que a e = a = e a a G.

3. Cada elemento de G posee inverso. Si a G entonces existe un elemento


b G tal que a b = e = b a.

Los enteros con la suma forman un grupo donde el cero es el elemento


identidad y a es el inverso de a. El grupo se llama (Z, +).

Si n es un numero entero positivo, entonces los numeros enteros positivos


menores que n y primos con n con la multiplicacion modular con n como
operacion binaria, forman un grupo definido de la siguiente forma:

U (n) := {a Zn | a es primo con n} (2.38)

Definicion 5. El orden de un grupo G es el numero de elementos que posee


el grupo y se denota por |G|.

Definicion 6. Sea G un grupo con la operacion binaria , elemento identidad


Captulo 2. Algoritmos de factorizacion 23

e y sea a G definimos las potencias de a de la siguiente forma:

a1 es el inverso de a
a0 = e
a1 = a
a2 = a a (2.39)
a3 = a a a
..
.
n
a = a a a n veces.

Definicion 7. El orden de un elemento a en un grupo G es el menor n N


tal que an = e. En caso de que no exista tal n diremos que el orden de a es
infinito.

2.5.2 Curvas elpticas

Consideremos la ecuacion
y 2 = x3 + ax + b, (2.40)
con x, y R y donde a y b son constantes escogidas tales que

4a3 + 27b 6= 0 (2.41)

esta restriccion garantiza que la ecuacion cubica

z = x3 + ax + b (2.42)

tiene tres races distintas. La ecuacion (2.40) tiene solucion en y solo cuan-
do la expresion
de la derecha es positiva, en ese caso las soluciones seran
3
y = x + ax + b. Por otro lado, si la ecuacion (2.42) tiene las tres races
positivas, entonces la ecuacion (2.40) presentara un aspecto parecido al de la
figura 2.2.

Estas curvas tienen la propiedad de que toda lnea no vertical que las
interseca en dos puntos, entonces tambien las interseca en un tercero. Para
las rectas tangentes a la curva se considera que el punto de tangencia es un
punto de interseccion doble. Veamos ahora como calcular el tercer punto de
tangencia.
Teorema 2. Sean P = (x1 , y1 ) y Q = (x2 , y2 ) dos puntos de la curva elptica
dada por la ecuacion

y 2 = x3 + ax + b, 4a3 + 27b2 6= 0 (2.43)


24 2.5. Curvas elpticas

Figura 2.2: Representacion de la curva y 2 = x3 13x 12

asumimos que si x1 = x2 entonces y1 6= y2 . No obstante permitiremos que


los dos puntos P y Q sean el mismo salvo en el caso y1 = 0. El tercer punto
de interseccion S = (x3 , y3 ) se calcula de la siguiente manera:
Si x1 6= x2 entonces
y1 y2
= (2.44)
x1 x2
Si x1 = x2 entonces
3x21 + a
= (2.45)
2y1
y finalmente tenemos

x 3 = 2 x1 x2 ,
(2.46)
y3 = (x3 x1 ) + y1

Demostracion. El valor de es la pendiente de la recta que une los dos puntos


P y Q. Esto esta claro cuando x1 6= x2 , as que vamos a probar que es dicha
pendiente cuando x1 = x2 . Como tanto P como Q satisfacen la ecuacion de la
curva elptica, tenemos la expresion

y12 y22 = x31 x32 + a(x1 x2 )


(2.47)
(y1 y2 )(y1 + y2 ) = (x1 x2 )(x21 + x1 x2 + x22 + a)

por lo tanto ya tenemos

y1 y2 x21 + x1 x2 + x22 + a
= = (2.48)
x1 x2 y1 + y2
Captulo 2. Algoritmos de factorizacion 25

y de este modo vemos claramente que

3x21 + a
= (2.49)
2y1

la ecuacion (2.48) se cumple para cualquier par de puntos de nuestra curva


elptica, por lo tanto, tambien tenemos que

(y3 + y1 ) = x23 + x3 x1 + x21 + a


(2.50)
(y3 + y2 ) = x23 + x3 x2 + x22 + a

de este modo, restando ambas ecuaciones tenemos

(y1 y2 ) = x3 (x1 x2 ) + x21 x22 (2.51)

si dividimos ahora la expresion anterior entre x1 x2 nos queda

y1 y2
= x3 + x1 + x2 (2.52)
x1 x 2

o lo que es lo mismo
2 = x3 + x1 + x2 (2.53)

de donde podemos calcular el valor de x3 y en consecuencia el de y3 .

Definicion 8. Dada un curva elptica y dos puntos racionales de la curva


P = (x1 , y1 ) y Q = (x2 , y2 ) 6= (x1 , y1 ) (llamaremos punto racional a todo
punto del cuerpo K sobre el que trabajemos que satisface la ecuacion de la
curva) definimos la operacion binaria

P + Q = (x3 , y3 ) (2.54)

donde x3 , y3 son los puntos definidos por el Teorema 2.

Notar que la suma de dos puntos P y Q dados de la curva elptica no es el


tercer punto de interseccion de la recta que une P y Q y la curva, es el punto
simetrico respecto al eje x de dicho tercer punto de interseccion, que tambien
se encuentra sobre la curva elptica, como se observa en la Figura 2.3.

Ya tenemos un conjunto de puntos racionales sobre la curva elptica y una


operacion binaria, el siguiente paso consiste en darle a ambos la estructura de
grupo.
26 2.5. Curvas elpticas

Figura 2.3: Representacion de la suma de dos puntos P y Q sobre una curva


elptica, el punto R = P + Q representa el inverso aditivo de S.

2.5.3 Estructura de grupo de las curvas elpticas

Comenzaremos este apartado con una definicion


Definicion 9. Tomamos como elemento identidad de la operacion binaria
+ y lo definimos de la siguiente manera
(x, y) + (x, y) = (x, y) + (x, y) = (2.55)
este punto puede ser visto como un punto lo suficiente lejano como para
que toda linea recta vertical pase por el. De este modo conseguimos que toda
recta que interseca con la curva elptica en dos puntos, lo haga en un tercero.

Vamos a estudiar a continuacion las curvas elpticas con un enfoque modu-


lar.

Sea E una curva elptica sobre Zq , con q primo, denotaremos por E(Zq )
al conjunto de puntos (x, y) Zq Zq que satisfacen la ecuacion de la curva,
Captulo 2. Algoritmos de factorizacion 27

al que le anadiremos como elemento identidad. De este modo tenemos el


conjunto
[
E(Zq ) = {(x, y) Zq Zq |y 2 = x3 + ax + b} {} (2.56)

Como Zq es finito con un numero q de elementos, obviamente el conjunto


E(Zq ) es un conjunto finito. Notar que ahora, respecto a la operacion binaria
tenemos que, si P = (x1 , y1 ) y Q = (x2 , y2 ) entonces podemos definir x3 e y3
de la siguiente manera

x3 = (2 x1 x2 ) (mod q)
(2.57)
y3 = ((x3 x1 ) + y1 ) (mod q)

y de esta forma
P + Q (x3 , y3 ) (mod q) (2.58)
no obstante seguiremos utilizando la notacion P + Q = (x3 , y3 ).

Por otro lado tambien debemos tener en cuenta en las expresiones de la


ecuacion (2.57) que si x1 6 x2 (mod q) entonces

= (y1 y2 ) s (mod q) (2.59)

donde s es el inverso multiplicativo modulo q de x1 x2 .

En caso de que x1 x2 (mod q), entonces tenemos y1 y2 (mod q) con

= (3x21 + a) s (mod q) (2.60)

y en este caso s es el inverso multiplicativo modulo q de 2y1 .

Existe otro caso particular que hay que destacar que es el caso en el que
x1 x2 (mod q) y, ademas, y1 y2 (mod q), entonces

(x1 , y1 ) + (x2 , y2 ) = (2.61)

Ejemplo. Si q = 7 y a = b = 1, tenemos la siguiente curva elptica

y 2 = x3 + x + 1 (2.62)

por lo que E(Z7 ) = {(0, 1), (0, 6), (2, 2), (2, 5), }. Completaremos el ejemplo
desarrollando los multiplos enteros del punto P = (0, 1). Notar que k P =
| + {z
P + P}.
k veces
28 2.5. Curvas elpticas

2P = (x2 , y2 ) = (0, 1)+(0, 1) (30+1)4 4 (mod 7)


x2 1600 2 (mod 7)
y2 4(20)+1 2 (mod 7)
= (2, 5);

3P = (x3 , y3 ) = (2, 5)+(0, 1) (51)4 2 (mod 7)


x3 420 2 (mod 7)
y3 2(22)+5 5 (mod 7)
= (2, 2);

4P = (x4 , y4 ) = (2, 2)+(0, 1) (21)4 4 (mod 7)


x4 1620 0 (mod 7)
y4 4(02)+2 1 (mod 7)
= (0, 6);

5P = (x5 , y5 ) = (0, 6)+(0, 1) =

Por ultimo, vamos a ver que efectivamente E(Z7 ) tiene estructura de grupo:

+ P 2P 3P 4P 5P
P 2P 3P 4P 5P 6P
2P 3P 4P 5P 6P 7P
3P 4P 5P 6P 7P 8P
4P 5P 6P 7P 8P P
5P 6P 7P 8P P 2P

2.5.4 Algoritmo de factorizacion utilizando curvas


elpticas

El algoritmo que se describe a continuacion parte de un numero entero N que


sera el que tratemos de factorizar, tambien se determinara un numero B que
indicara el numero maximo de iteraciones a realizar.

A continuacion se escogera una curva elptica E y 2 = x3 + ax + b con


4a3 + 27b2 6= 0, como ya se explico en los apartados anteriores. Tambien se
elegira un punto P = (x1 , y1 ) E(ZN ).

El siguiente paso es el que debemos iterar un maximo de m veces. Partire-


mos con un valor i = 2 y mientras i m se calculara el valor de i P como se
vio en el ejemplo del apartado anterior y la siguiente decision dependera del
resultado obtenido.
Captulo 2. Algoritmos de factorizacion 29

Si i P = , o si en alguna de las operaciones no se cumple la condicion


c =mcd(x1 x2 , N ) = 1 (para el caso x1 6 x2 (mod N)) o la condicion c =
mcd(y1 + y2 , N ) = 1 (para el caso x1 x2 (mod N)), entonces debemos cal-
cular p =mcd(c, N ) y si dicho p cumple que 1 < p < N entonces habremos
encontrado un factor no trivial de N . En cualquier otro caso, incrementaremos
el valor de i y volveremos a realizar los calculos.

Ejemplo. Factorizar N = 77 utilizando curvas elpticas

Solucion. Vamos a tomar para este ejemplo la curva elptica

y 2 = x3 + x + 1 (2.63)

y trabajaremos sobre Z77 . Lo primero que haremos sera fijar m = 10 como


el numero maximo de iteraciones a realizar y a continuacion fijamos el punto
P = (0, 1) E(Z77 ) sobre el que realizaremos las cuentas.

Del mismo modo que se realizo anteriormente, procedemos a calcular los


multiplos enteros de P

2P = (x2 , y2 ) = (0, 1)+(0, 1) (30+1)39 39 (mod 77)


x2 392 00 58 (mod 77)
y2 39(580)+1 30 (mod 77)
= (58, 47);

3P = (x3 , y3 ) = (58, 47)+(0, 1) (471)4 30 (mod 77)


x3 302 580 72 (mod 77)
y3 30(7258)+47 5 (mod 77)
= (72, 72);

4P = (x4 , y4 ) = (72, 72)+(0, 1) (721)46 32 (mod 77)


x4 322 720 28 (mod 77)
y4 32(2872)+72 50 (mod 77)
= (28, 27);

5P = (x5 , y5 ) = (28, 27)+(0, 1)

Vamos a estudiar que sucede con el multiplo 5P = (28, 27) + (0, 1). Para
calcular lo primero que tenemos que hacer es calcular s, que en este caso es el
inverso multiplicativo modulo 77 de x1 x2 = 28. Al tratar de calcular el inverso
modular de 28 vemos que no existe, esto se debe a que p =mcd(28, 77) = 7, es
decir no son primos entre s y como 1 < p < 77 ya hemos encontrado un factor
no trivial de 77, por lo que terminamos el proceso.
30 2.6. Criba cuadratica

2.6 Criba cuadratica

Una vez que se han encontrado todos los factores pequenos de un numero
mediante la division por tentativa y tambien se han aplicado los metodos
propuestos por John Pollard, pero algunos tests de primalidad determinan
que nuestro numero sigue siendo un numero compuesto, debemos proceder
aplicando algunos algoritmos mas potentes como pueden ser el metodo de la
curva elptica, el algoritmo de fracciones continuas o la criba cuadratica.

Como ya se comento anteriormente, las implementaciones actuales han con-


seguido que la criba cuadratica sustituya casi completamente al algoritmo de
fracciones continuas. La criba cuadratica es mas rapida para numeros N de
al menos 18-20 cifras, el tamano mnimo para el que dicho algoritmo resulta
realmente util.

El metodo de la curva elptica tiene la ventaja de ser eficiente en un rango


de numeros que comienza donde la division por tentativa deja de ser util y que
termina en torno a los numeros de 25-30 cifras, es decir, bien entrado el rango
de aplicacion de la criba cuadratica.

Para explicar como funciona la criba cuadratica, es mas facil comenzar con
un algoritmo mas simple propuesto en 1981 por John D. Dixon.

2.6.1 Algoritmo de Dixon

Como ya se explico en el apartado 2.2, Kraitchik propuso que se podan en-


contrar numeros x e y tales que

x2 y 2 (mod N ) (2.64)

teniendo as una alta probabilidad de que mcd(x y, N ) fuera un factor no


trivial de N . En esta idea se basa el algoritmo que propuso Dixon ya que trata
de encontrar enteros x e y que cumplan la congruencia anterior.

Supongamos que el numero a factorizar es N , elegimos un numero entero


aleatorio a y calculamos
d(a) = a2 (mod N ) (2.65)
y procedemos a realizar un intento rapido de factorizacion de d(a). Sin profun-
dizar en el intento, aplicamos la division por tentativa hasta aproximadamente
104 y, si no encontramos factores, probamos con un numero a diferente. Se
Captulo 2. Algoritmos de factorizacion 31

necesita un gran numero de factorizaciones, as que seguimos haciendo lo mis-


mo hasta que tengamos mas numeros d(a) factorizados que numeros primos
hay por debajo del lmite tomado para la division por tentativa (104 ). En este
caso necesitamos mas de 1229 numeros a para los cuales hemos encontrado la
factorizacion de d(a).

Sea ahora la base de factores B = {p1 , . . . , p1229 } que contiene los primeros
1229 numeros primos. Si d(a) ha sido factorizado completamente, entonces
podemos escribirlo como

d(a) = pe11 pe1229


1229
(2.66)

donde la mayor parte de los exponentes ei seran nulos. La factorizacion de d(a)


puede ser representada por el vector

v(a) = (e1 , . . . , e1229 ). (2.67)

Si ahora todas las entradas del vector v(a) son pares, entonces tenemos que
d(a) p
es un cuadrado perfecto y por lo tanto hemos encontrado dos numeros
x = d(a) e y = a tales que

x2 y 2 (mod N ). (2.68)

Desafortunadamente, esto no suele ser habitual, pero tenemos un numero de


vectores v(a) mayor que la longitud de los mismos. Esto significa que podemos
encontrar una suma de distintos vectores v(a) que contenga todas las entradas
pares. Para ello, definimos los vectores

w(a) = (b1 , . . . , b1229 ) (2.69)


(
0, si ei es par
con bi = y sobre dichos vectores w(a) se aplica elimi-
1, si ei es impar
nacion gaussiana, obteniendo as el subconjunto de vectores v(a) cuya suma
resulta un vector con coordenadas pares.

Llegados a este punto ya tenemos un subconjunto de numeros d(a)0 s tales


que el producto sera un cuadrado perfecto. Por lo que tenemos una congruencia
de la forma

d(a1 ) d(a2 ) d(ar ) a21 a22 a2t (mod N ) (2.70)

donde ambos lados son cuadrados perfectos, por lo que tendramos nuevamente
numeros x e y tales que x2 y 2 (mod N ). Aproximadamente en la mitad de
los casos obtendremos un factor no trivial de N a partir de x e y. En caso de
que no sea as, habra que buscar otro subconjunto de vectores v(a) que para
los que los vector w(a) correspondientes sean linealmente independientes.
32 2.6. Criba cuadratica

El algoritmo de Dixon es un algoritmo probabilstico. No tenemos garanta


de que nos vaya a proporcionar un factor de N pero en la practica es capaz
de, en ocasiones, encontrar factores muy grandes en un tiempo inferior al que
tardara cualquier algoritmo determinista.

Por otro lado, la eliminacion gaussiana cuando todas las entradas son 0 o 1,
funciona de una forma muy rapida incluso con matrices de tamano 12301230.
La mayor parte del tiempo de ejecucion del algoritmo se invierte en elegir de
forma aleatoria los numeros d(a) adecuados.
Ejemplo. Factorizar N = 12453 mediante el Algoritmo de Dixon utilizando
la base de factores B = {2, 3, 5, 7, 11, 13, 17}.
Solucion. Partiremos de las siguientes congruencias, que habran sido calcu-
ladas aleatoriamente:
i ai d(ai ) = a2i (mod N)
1 12015 5049 = 33 11 17
2 13023 1122 = 2 3 11 17
3 13380 72 = 23 32

A continuacion tomamos los siguientes vectores:


w(a1 ) = (0, 3, 0, 0, 1, 0, 1)
w(a2 ) = (1, 1, 0, 0, 1, 0, 1) (2.71)
w(a3 ) = (3, 2, 0, 0, 0, 0, 0)
cuya suma observamos que posee todas las entradas no nulas con valor par,
por lo tanto sabemos que el producto de dichos valores d(a) se trata de un
numero cuadrado. De este modo ya hemos encontrado dos numeros x e y tales
que
x2 y 2 (mod N ) (2.72)
Concretamente, los valores son
x = a1 a2 a3 = 12015 13023 13380
p (2.73)
y = d(a1 ) d(a2 ) d(a3 ) = 5049 1122 72
por lo tanto comprobamos que
20935865961002 201962 (mod N ) (2.74)

Llegados a este punto, vemos que los numeros x e y poseen los cua-
drados congruentes pero ellos no lo son, es decir x2 y 2 (mod N ) pero
x 6 y (mod N ), por lo tanto calculamos
mcd(2093586596100 20196, 12453) = 1779 (2.75)
Captulo 2. Algoritmos de factorizacion 33

encontrando as un factor no trivial de N .

2.6.2 Criba cuadratica

Introduccion

Carl Pomerance, un matematico estadounidense especializado en teora de


numeros, propuso en 1981 un algoritmo llamado criba cuadratica que extenda
las ideas de Dixon y de Kraitchik. La criba cuadratica era el algoritmo de
factorizacion mas rapido hasta que se descubrio la criba general del cuerpo de
numeros en torno a 1993. No obstante, la criba cuadratica sigue siendo incluso
mas rapida que la criba general del cuerpo de numeros cuando se trata de
numeros menores de 110 dgitos aproximadamente.

Estudiando la criba de Eratostenes, Pomerance se dio cuenta de que poda


escoger un intervalo de numeros y senalar aquellos que haban sido marcados
mas de una vez al aplicar a dicho intervalo la criba de Eratostenes, encontrando
as numeros que tenan varios factores primos pequenos.

Con el objetivo de aplicarlo en la criba cuadratica, se planteo el hecho de


que si realizamos la division de un numero N por todos los numeros p de un
intervalo y al final obtenemos 1, entonces ese numero N factoriza sobre dicho
intervalo. Si ademas el intervalo esta acotado por B, tenemos un numero B-liso.

Con la idea planteada hasta ahora, observamos que no estamos consideran-


do potencias de primos, por lo que aplicando lo anterior a un numero como
por ejemplo un numero como 63 = 32 7, no obtendramos 1, sino 3. Para
evitar esto, bastara con dividir el numero N por la mayor potencia posible
del numero primo.

Todo esto permite encontrar de un modo rapido que numeros son B-lisos en
un intervalo determinado. La criba cuadratica funciona eficientemente porque
cuando tomamos modulo p a la hora de ejecutar el algoritmo, los multiplos de
dicho numero p aparecen en posiciones concretas del intervalo.

Base teorica

Como ya se explico en el subapartado de introduccion a este algoritmo, la


criba cuadratica comparte la base fundamental del algoritmo de Dixon pero in-
troduciendo una serie de mejoras que ofrecen resultados mucho mas eficientes.
34 2.6. Criba cuadratica

Ademas, pasamos de tener un algoritmo probabilista, como era el de Dixon, a


tener un algoritmo determinista.

La primera novedad que introdujo Pomerance respecto al algoritmo de


Dixon la encontramos en la funcion
que utilizaremos, as como en el modo de
buscar los numeros ai = i + b N c validos. As bien, la funcion en este caso
sera
d(ai ) = a2i N (2.76)
recuperando as el polinomio que utilizo Kraitchik. Para elegir los numeros ai
debemo tener en cuenta la siguiente propiedad:

Si p | d(ai ) entonces p | d(ai + kp) k Z (2.77)

Demostracion. Si d(ai ) 0 (mod p) = a2i N 0 (mod p), entonces si


kZ

d(ai + kp) = a2i + 2ai kp + k 2 p2 N a2i N 0 (mod p) (2.78)

Ahora para encontrar numeros ai cuyo d(ai ) asociado factorice sobre la


base de factores fijada, lo que haremos sera escoger un numero primo p F
donde F denota la base de factores. El siguiente paso consiste en determinar
que numeros d(ai ) son divisibles por p dentro de un rango establecido para ai ,
ahorrandonos as el coste computacional de tratar de dividir d(ai ) entre todos
los numeros primos de nuestra base de factores que no dividen a d(ai ). Notar
que la division es una de las operaciones basicas mas costosas en terminos
computacionales.

Para saber que valores ai cumplen que p | d(ai ) basta con resolver la con-
gruencia cuadratica a2i N (mod p), una operacion que puede realizarse con
relativa rapidez y eficiencia. Aprovechando ahora la propiedad (2.77), calcula-
mos el resto de valores ai cuyo d(ai ) es divisible por p simplemente mediante
la operacion ai + kp con k Z.

Si queremos que este procedimiento funcione adecuadamente, necesitamos


que N sea un residuo cuadratico modulo p con los numeros primos p que se
encuentran en nuestra base de factores F , por lo que eliminaremos de F los
numeros que no cumplan dicha condicion.

Algoritmo
Captulo 2. Algoritmos de factorizacion 35

Es importante que los valores d(ai ) sean lo mas pequenos posible, aumen-
tando as la probabilidad de que se trate de un numero B-liso, es decir, que
factorice en la base de factores F . Para ello, solo consideraremos valores de
i cercanos a cero, por lo que elegiremos una cota M y tomaremos todos los
numeros i que cumplan M i M . Este intervalo recibira el nombre de
intervalo de criba. De este modo, cuando i [M, M ], p sea un numero
primo tal que p | d(ai ) = a2i N , entonces como se ha hecho notar antes, se
cumple la congruencia
a2i N (mod p) (2.79)
o lo que es lo mismo
(i + bN c)2 N (mod p) (2.80)
por lo que vemos que N es un residuo cuadratico modulo p, en este momento
necesitamos la siguiente definicion:

Definicion 10.Seap un numero primo y N un entero cualquiera, el smbolo


N
de Legendre se define como 0 si p divide a N , +1 si N es un residuo
p
cuadratico modulo p y 1 en otro caso.

Por lo tanto, necesitamos que la base de factores F este formada por nume-
ros primos p que cumplan
 
N
= +1 (2.81)
p
ademas, F contendra el factor 1 y estara acotada en tamano por B.

Respecto a la eleccion de las cotas M y B, Eric Landquist en su libro


The Quadratic Sieve Factoring Algorithm calculo por heurstica las siguientes
formulas que aportan valores validos en la mayor parte de los casos:

  42
$ %
B= e ln(N ) ln(ln(N ))

  34 2
$ %
M = e ln(N ) ln(ln(N ))

Como ya hemos comentado anteriormente, vamos a trabajar con el intervalo


completo en una sola vez, utilizando la propiedad (2.77). Para ello procedere-
mos de la siguiente forma:
36 2.6. Criba cuadratica

Para cada factor primo p de la base de factores F , resolvemos la congruencia


mostrada a continuacion. Esta operacion equivale a calcular las races modu-
lares de la funcion d(x) = (x + bN c)2 N :

d(x) = (x + bN c)2 N 0 (mod p) (2.82)

o equivalentemente
(x + bN c)2 N (mod p) (2.83)
como dichas races son infinitas, nos quedaremos con las dos que son menores
que el numero primo p.

Sea s = x b N c, entonces
Si p = 2, estamos ante un caso especial en el que solo tendremos una
solucion.

s2 N (mod 2) s2 1 (mod 2) sp = 1 b N c (mod 2) (2.84)

Si p > 2
s2 N (mod p) (2.85)
Entonces tenemos dos soluciones x1 = x1 y x2 = p x1 y por tanto

sp1 = x1 b N c (mod p) y sp2 = x2 b N c (mod p) (2.86)

Estas soluciones indican en que momento comienza la progresion aritmetica


de numeros que tienen a p como factor.

A continuacion, lo primero que tenemos que hacer es inicializar el intervalo


de criba antes descrito como un vector que contenga en cada entrada los valores
de d(ai ).

Para cada solucion obtenida en el paso anterior sp , dividiremos d(asp ) entre


p. Como ya se comento antes, sabemos por la propiedad (2.77) que todos los
elementos del intervalo de criba que se encuentren en la progresion aritmetica
son tambien divisibles por el numero primo p, por lo que no sera necesario
probar la divisivilidad de todos los elementos entre todos los numeros primos
de nuestra base de factores.

Iremos recorriendo toda la base de factores F hasta el final, cuando


obtendremos unos en varias posiciones del vector. Esto significa que el numero
inicial factoriza completamente en F , es decir, es B-liso y por lo tanto es uno
de los numeros que nos interesa.
Captulo 2. Algoritmos de factorizacion 37

Notar que no hemos tenido en cuenta la posibilidad de que un elemento de


nuestra base de factores aparezca mas de una vez como factor de un numero,
para solventar esto simplemente calcularemos la mayor potencia del primo
que divide a d(asp ).

El proceso de criba se itera hasta conseguir al menos B + 1 elementos del


intervalo de criba que sean B-lisos. El siguiente paso es bastante similar a
lo que propona el algoritmo de Dixon y consiste en buscar productos entre
dichos elementos B-lisos que proporcionen un cuadrado perfecto. Una forma de
hacerlo consiste en colocar para cada elemento B-liso un vector cuyas entradas
contengan los exponentes de cada factor modulo 2. Obtenemos as una matriz
A que tiene en cada columna los exponentes modulo 2 de los primos de nuestra
base de factores F .

Como nos interesa que el producto de los valores d(ai ) sea un cuadrado
perfecto, necesitamos que la suma de los exponentes de cada factor primo de
F sea par, que al trabajar con modulo 2, es equivalente a decir que necesitamos
una suma de vectores que posea todas las entradas nulas.

Por este motivo, para garantizar al menos un resultado, necesitamos tantos


elementos como primos posee F . Como ya se comento anteriormente, una vez
encontrada una suma que proporcione un vector nulo, comprobaremos si se
obtiene un factor no trivial.

Una vez planteada la matriz se procedera a buscar una combinacion de


d(ai ) que proporcione un cuadrado mediante algun algoritmo como puede ser
eliminacion gaussiana.

Por ultimo solo quedara proceder como en el resto de algoritmos anteriores


cuando tenemos congruencias de cuadrados, calcularemos el maximo comun
divisor para comprobar as si obtenemos un factor no trivial.

Ejemplo. Factorizar N = 87463 utilizando la criba cuadratica.

Solucion.

En primer lugar vamos a calcular los parametros M y B que determinaran


el tamano del intervalo de criba y de la base de factores respectivamente.
38 2.6. Criba cuadratica

  2
$ %
ln(N ) ln(ln(N )) 4
B= e =6

  34 2
$ %
M = e ln(N ) ln(ln(N )) = 264

De este modo ya tenemos el intervalo de criba [264, 264]. Para formar la


base
 de factores, necesitamos encontrar cinco numeros primos p que cumplan
N
= +1 por lo que calculamos el valor del smbolo de Legendre por la
p
definicion para unos cuantos. Es necesario tener en cuenta que, tanto 1 como
2, siempre van a formar parte de nuestra base de factores F .

p 3 5 7 11 13 17 19 23 29
 
N
1 1 1 1 1 1 1 1 1
p

Ya tenemos de esta forma nuestra base de factores

F = {1, 2, 3, 13, 17, 19, 29} (2.87)

A continuacion debemos calcular para cada elemento p de F , los valores


sp1 y sp2 como se indico en la ecuacion (2.86).

p 2 3 13 17 19 29
x 1 1, 2 5, 8 7, 10 5, 14 12, 17
sp1 , sp2 0 0, 1 9, 12 1, 4 4, 14 7, 12

Los valores sp1 y sp2 son los que nos indica para cada factor de nuestra base
F en que momento empieza la progresion aritmetica de numeros divisibles por
p. Por ejemplo para p = 13 una de las progresiones comienza en d(a9 ) y otra en
d(a12 ). A continuacion se muestra una tabla que contiene el proceso de criba
para un pequeno subintervalo de [M, M ] como es [0, 12].

Notar que b N c = 295. En la tabla no se muestran las potencias de cada
factor primo pero sera necesario almacenarlas, ademas de tenerlas en cuenta
en la columna final.
Captulo 2. Algoritmos de factorizacion 39

i i + b Nc d(ai ) 1 2 3 13 17 19 29 d(ai ) final
0 295 438 73
1 296 153 1
2 297 746 373
3 298 1341 149
4 299 1938 1
5 300 2537 2537
6 301 3138 523
7 302 3741 43
8 303 4346 2173
9 304 4953 127
10 305 5562 103
11 306 6173 6173
12 307 6786 1

En este intervalo encontramos tres elementos que tienen la propiedad de


ser B-lisos, es decir, factorizan completamente en nuestra base de factores F .
Este proceso debera realizarse sobre todo el intervalo de criba, es decir, para
i [264, 264]. No obstante, vamos a aplicar a estos tres numeros B-lisos el
proceso de obtencion del vector de exponentes modulo 2.

Vector de Vector de
d(ai ) Factorizacion exponentes exponentes (modulo 2)
153 32 17 [0, 0, 2, 0, 1, 0, 0] [0, 0, 0, 0, 1, 0, 0]
1938 2 3 17 19 [0, 1, 1, 0, 1, 1, 0] [0, 1, 1, 0, 1, 1, 0]
6786 2 32 13 29 [0, 1, 2, 1, 0, 0, 1] [0, 1, 0, 1, 0, 0, 1]

Una vez acabado el proceso de criba, debemos tener al menos B+1 numeros
que factoricen completamente sobre la base de factores para tener as garan-
tizado al menos un producto que sea cuadrado perfecto. En caso de no tener
B + 1 elementos, se debe repetir el proceso anterior ampliando el intervalo de
criba.

A continuacion construimos una matriz A cuyas columnas son los vectores


de los exponentes modulo 2 de los numeros B-lisos y buscamos una solucion
40 2.6. Criba cuadratica

para el sistema
1 1 0 0 0 0
1 0 0 1 1 0

1 1 0 1 0 0

v =0
0 1 0 0 1 0 (2.88)

1 0 1 1 0 1

0 0 0 1 0 0
0 1 0 0 1 0


1
1

1
Una posible solucion para el sistema anterior es v =
0


1
0

Por lo tanto, la solucion involucra las cuatro primeras columnas, esto sig-
nifica que el producto de los cuatro numeros d(ai ) = (i + bN c)2 N asociados
es un cuadrado, es decir
x2 = (265 278 296 307)2 = 44816869024979257600 (2.89)
por otro lado, si tomamos
y 2 = (2652 N )(2782 N )(2962 N )(3072 N ) = 182178565001316 (2.90)
tenemos dos numeros cuadrados que cumplen
x2 y 2 (mod N) (2.91)
ya que
44816869024979257600 10093 (mod N)
(2.92)
182178565001316 10093 (mod N)
pero por otro lado
x 6 y (mod N) (2.93)
donde tenemos
6694540240 34757 (mod N)
(2.94)
13497354 28052 (mod N)

Llegados a este punto, solo queda comprobar si x e y proporcionan un


factor no trivial de N . Para ello calculamos
mcd(x + y, N ) = mcd(6708037594, N ) = 587
(2.95)
mcd(x y, N ) = mcd(6681042886, N ) = 149

Por lo tanto concluimos que N = 587 149.


Captulo 2. Algoritmos de factorizacion 41

2.7 Criba general del cuerpo de numeros

La criba general del cuerpo de numeros es uno de los algoritmos de factorizacion


mas complejos aunque tambien es uno de los metodos mas rapidos a la hora
de factorizar numeros enteros con un tamano grande, considerando grande a
partir de unos 110 dgitos. En este apartado vamos a dar una idea de los pasos
en los que se basa dicho algoritmo, sin entrar en profundidad ya que el estudio
completo de este metodo de factorizacion es muy extenso, se puede consultar
en The development of the number field sieve de A.K. Lenstra y H.W. Lenstra.

El primer paso para factorizar un numero N mediante la criba general del


cuerpo de numeros consiste en encontrar un polinomio f (x) que sea irreducible
en Z[x] y que ademas tenga una raz m modulo N .

Para construir un polinomio en ZN [x] con una raz m podemos hacerlo


expresando el numero N en base-m, es decir, expresamos N de la forma
r
X
N= ak mk (2.96)
k=0

y tomamos el polinomio
r
X
f (x) = ak x k (2.97)
k=0

suponemos que f (x) y de este modo ya tenemos un polinomio que cumple los
requisitos.

Los polinomios candidatos a ser utilizados en el algoritmo son muchos y no


existe un metodo para determinar cual sera el que mejor funcionara al aplicar
la criba general del cuerpo de numeros a cada numero N .

El siguiente paso consiste en determinar el dominio sobre el que se va a


aplicar el algoritmo. Para ello debemos especificar las distintas bases de factores
que vamos a utilizar. Necesitaremos tres bases de factores: la base del factor
racional, la base del factor algebraico y la base del caracter cuadratico. Para
determinar el tamano de las bases de factores lo haremos de forma emprica y
dependera del tamano del numero a factorizar.

La base del factor racional contendra los numeros primos menores que un
numero w que representara la cota de la base. No obstante, la base del factor
racional no almacenara solo dicha informacion, ya que cada numero primo p
se guardara junto al valor p (mod m).
42 2.7. Criba general del cuerpo de numeros

Por otro lado, la base del factor algebraico contendra un lista con los pares
(p, r) donde los numeros p son numeros primos y r es el menor numero entero
tal que f (r) 0 (mod p). El tamano de la base del factor algebraico debe ser
superior al de la base del factor racional.

Por ultimo la base del caracter cuadratico tendra una continuacion de la


base del factor algebraico, es decir, pares de numeros primos y las races pero
con unos cuantos numeros p mayores que los anteriores. El tamano de esta
base de factores sera inferior al de las anteriores.

El siguiente paso consiste en realizar una criba. Este es el cuello de botella


del algoritmo ya que se realizan operaciones muy costosas en terminos compu-
tacionales sobre dominios muy grandes, por lo tanto la mayor parte del tiempo
del algoritmo se invierte en este paso.

El proceso de criba persigue el objetivo de encontrar pares de numeros


(a, b) que cumplan

mcd(a, b) = 1

a + bm tiene todos sus factores en la base del factor racional

(b)d f ( ab ) tiene todos sus factores en la base del factor algebraico.

Para ello, tomaremos b fijo y variaremos a en un intervalo [C, C] cuyo


tamano dependera directamente del tamano del numero a factorizar. Si el valor
escogido para C no es suficientemente grande, deberemos tomar un numero C
superior. De esta forma calcularemos para los pares (a, b) los factores de a+bm
y de aquellos que factoricen en la base del factor racional, nos quedaremos
con aquellos para los que (b)d f ( ab ) tenga los factores en la base del factor
algebraico.

Una vez hemos obtenido una lista de pares (a, b) que cumplen las pro-
piedades requeridas, el objetivo es encontrar un subconjunto de la lista cuyo
producto sea un numero cuadrado. Nuevamente no necesitamos encontrar en
la lista numeros cuadrados, nos basta con que el producto de varios de ellos
sea un numero cuadrado.

Este paso se puede llevar a cabo resolviendo un sistema de ecuaciones


lineales, ya que incluso para matrices de un tamano elevado, como el sistema
solo contendra un 1 en las posiciones de los numeros primos que aparezcan
como factor con potencia impar y un 0 en las posiciones de los numeros primos
Captulo 2. Algoritmos de factorizacion 43

que aparezcan como factor con potencia par o no aparezcan como factor, se
podra resolver de un modo relativamente eficiente.

Una vez se obtiene una solucion al sistema, es decir, cuando tenemos nume-
ros x e y cuyos cuadrados son congruentes modulo N , se procede como en el
resto de algoritmos calculando mcd(x y, N ) y mcd(x + y, N ) para ver si
obtenemos un factor no trivial de N .
Conclusiones

En este Trabajo de Fin de Grado he realizado un repaso general a la evolucion


de los algoritmos de factorizacion. En un primer lugar hemos visto que hasta la
aparicion de las computadoras, los algoritmos existentes no permitan realizar
factorizaciones de numeros grandes. Ha sido tras la aparicion de estas cuando
se han desarrollado algoritmos potentes que consiguen hallar los factores de
numeros mayores. No obstante, la rapida evolucion de las computadoras per-
mite que continuamente se desarrollen nuevos metodos que consiguen mejorar
los resultados.

Para el desarrollo de este trabajo he necesitado el uso de algunos conceptos


sobre teora de numeros que estan directamente relacionados con la base teorica
de ciertos algoritmos. Tambien he necesitado comprender ciertos apartados
mas relacionados con criptogra que internamente estan basados en algoritmos
de factorizacion.

45
Referencias

[1] D.M. Bressoud, Factorization and Primaly Testing. Springer-Verlag, 1989.

[2] R. Crandall and C. Pomerance, Prime Numbers. A Computational Pers-


pective. Springer, 2005.

[3] H. Riesel, Prime Numbers and Computer Methods for Factorization.


Birkhauser, 1994.

[4] W. Stein, Elementary Number Theory: Primes, Congruences and Secrets.


Springer, 2008.

[5] F.J. Smith, A Brief History of Factorization Techniques. University of


Washington, 2006.

[6] L.S. Carrasco Factorizacion de Enteros. Universidad Autonoma Metropo-


litana, 2012.

46

También podría gustarte