Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ttulo
Factorizacin
Autor/es
Director/es
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
Grado en Matemticas
Ttulo
Factorizacin
Autor/es
Matemticas y computacin
Curso acadmico
2013-2014
ii
Resumen
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
2 Algoritmos de factorizacion 9
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.
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.
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 .
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.
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.
a + c = mn, d + b = ln (1.8)
1
N = (k 2 m2 + k 2 l2 + n2 m2 + n2 l2 ) (1.10)
4
1 1
N = (2a2 + 2b2 + 2c2 + 2d2 ) = (2N + 2N ) = N (1.11)
4 4
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.
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
9
10 2.1. Algoritmo de Fermat
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
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.
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)
x2 y 2 (mod N )
(2.4)
x 6 y (mod N )
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
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
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.
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.
F : A A
(2.11)
x x2 + 1(mod N )
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
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.
i ai = f (ai1 )
1 126737
2 498517
3 544598
4 367883
5 729034
6 500631
7 498748
8 647141
9 211118
10 379804
de esta forma hemos encontrado un factor tras solo 2 iteraciones, una forma
mas eficiente que la anterior, en la que necesitamos 23 iteraciones.
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
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.
a 2a (p 1)a 1 2 (p 1) (mod p)
= (p 1)!ap1 (p 1)! (mod p) (2.18)
= ap1 1 (mod p)
am 1(mod p) (2.21)
p | mcd(am 1, N ). (2.22)
Aunque podemos tomar como a cualquier numero que no sea divisible por
p, en un primer intento es habitual tomar a = 2.
1
x = a0 + (2.26)
1
a1 +
1
a2 +
1
a3 +
...
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)
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
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)
[a0 , . . . , ai ] = mi
ni bi m2i (mod N) bi = pe11 pemm
2.5.1 Grupos
: G G G
(2.37)
(a, b) 7 a b
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.
Consideremos la ecuacion
y 2 = x3 + ax + b, (2.40)
con x, y R y donde a y b son constantes escogidas tales que
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
x 3 = 2 x1 x2 ,
(2.46)
y3 = (x3 x1 ) + y1
y1 y2 x21 + x1 x2 + x22 + a
= = (2.48)
x1 x2 y1 + y2
Captulo 2. Algoritmos de factorizacion 25
3x21 + a
= (2.49)
2y1
y1 y2
= x3 + x1 + x2 (2.52)
x1 x 2
o lo que es lo mismo
2 = x3 + x1 + x2 (2.53)
P + Q = (x3 , y3 ) (2.54)
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
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 ).
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
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
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
y 2 = x3 + x + 1 (2.63)
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
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.
Para explicar como funciona la criba cuadratica, es mas facil comenzar con
un algoritmo mas simple propuesto en 1981 por John D. Dixon.
x2 y 2 (mod N ) (2.64)
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
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)
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
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
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
Introduccion
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
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.
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:
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.
42
$ %
B= e ln(N ) ln(ln(N ))
34 2
$ %
M = e ln(N ) ln(ln(N ))
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)
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.
Solucion.
2
$ %
ln(N ) ln(ln(N )) 4
B= e =6
34 2
$ %
M = e ln(N ) ln(ln(N )) = 264
p 3 5 7 11 13 17 19 23 29
N
1 1 1 1 1 1 1 1 1
p
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
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.
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)
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.
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.
mcd(a, b) = 1
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.
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
45
Referencias
46