1. Quadratic Sieve: Concepto, ALgoritmo y Ejemplos
Daniel Cam Urquizo
dancourbano@gmail.com
Ingenier´ıa informatica
Algebra universal para C.C
Universidad Nacional de Trujillo
12 de junio de 2014
1. Introducci´on
Estos algoritmos tienden a no ser tan eficiente cuando se trata de factorizar un
n´umero general de que es un producto de dos n´umeros primos , cada uno de los cua-
les son aproximadamente del mismo tama˜no , sin embargo , existen algoritmos que
Factor n´umero como estos en aproximadamente la misma cantidad de tiempo como
estos son factores cualquier n´umero del mismo tama˜no . Tales algoritmos de facto-
rizaci´on se llaman de prop´osito general, ya que, la velocidad no depende del tama˜no
de los factores primos, el n´umero de factores primos, o la forma del n´umero. En la
pr´actica, los mejores algoritmos de factorizaci´on de prop´osito general conocidos son
la criba cuadr´atica y el tamiz campo de n´umero. Versi´on tamiz de segundo grado se
han utilizado para definir todos los registros generales de factorizaci´on entre 1981 y
1994, la m´as grande fue la factorizaci´on del n´umero 129 d´ıgitos conocen como RSA
-129 El campo de n´umero de asint´oticamente m´as r´apido es relativamente nuevo en
comparaci´on con el tamiz cuadr´atica, y no se cree que es pr´actico en primero. No
fue sino hasta despu´es de RSA -129 que los nfs convirtieron en lo suficientemente
desarrollados como para factorizar n´umeros enteros grandes algunos de manera efi-
ciente. Uno de los ingredientes necesarios para el ´exito de nfs fue la implementaci´on
de algunas rutinas de ´algebra lineal muy r´apidos. En 1994, se utiliz´o nfs para fac-
torizar un n´umero de 130 d´ıgitos conocido como RSA- 130, rompiendo el r´ecord qs
en un d´ıgito . Los investigadores que realizaron este tamizado calim para RSA -130
se podr´ıan haber hecho en menos de 15 % del tiempo de permanencia en el tiempo
empleado en el n´umero 129 d´ıgitos. El m´etodo descrito mediante el algoritmo de
Quadratic sieve creado por Carl Pomerance en 1981, hizo posible por primera vez
factorizar n´umeros de m´as cien d´ıgitos. Tuvo gran suceso cuando factorizo un entero
de 129 d´ıgitos, conocido como RSA-129 cuya factorizaci´on fue considerado como un
descubrimiento por los creadores del RSA.
2. Definici´on
Es un algoritmo de factorizaci´on de enteros y, en la pr´actica, el segundo m´etodo
m´as r´apido conocido (despu´es de Number field Sieve). Es todav´ıa el m´as r´apido
para enteros que tienen 100 o menos d´ıgitos decimales, y es considerado mucho m´as
sencillo que la NFS. Es un algoritmo de factorizaci´on de prop´osito general, lo que
1
2. significa que su tiempo de ejecuci´on ´unicamente depende el tama˜no del entero a ser
factorizado, y no sobre una estructura especial o propiedades.
2.1. Teorema: Principio B´asico.
Si n es un n´umero factorizado, el quadratic sieve intenta encontrar dos n´umeros
xey tal que x ≡ ±y (m´od n) y x2
(m´od n). Esto deber´ıa implicar que(x−y)(x+y) ≡
0modn, y nosotros calculamos (x − y, n) usando el algoritmo de Euclides para ver
si es una divisi´on no trivial. Hay por lo menos un 1
2
de posibilidad de que el factor
sea no trivial. Nuestro primer paso para hacerlo es definir:
Q(x) = (x + |
√
n|)2
–n = x2
− n.
cY calcular Q(x1), Q(x2), . . . Q(xk). Determinando el xi, ser´a explicado asi: de las
evaluaciones de Q(x), queremos recoger un subconjunto que Q(xi1), Q(xi2), . . . Q(xir)
es un cuadrado, y2
. Entonces notamos que para todo x, Q(x) ≡ x2
(m´od n). as´ı que
lo que tenemos es:
Q(xi1)Q(xi2)...Q(xir) ≡ (xi1xi2...xir)2
(m´od n)
Y si las condiciones anteriores de retenci´on, entonces tienen factores de n.
Demostraci´on. Sea d = mcd(x − y, n), implica que d es un divisor de n entonces
1 ≤ d ≤, si d = n entonces n|(x−y) entonces x ≡ y (m´od n), donde es contrario con
la hip´otesis. Si d = 1 entonces n no divide a x−y. pero n divide x2
–y2
= (x−y)(x+y)
por hip´otesis, entonces n debe por lo tanto dividir el segundo factor x + y, por el
lema de Euclides. En otras palabras x ≡ −y (m´od n), que es otra vez contrario a la
hip´otesis. Esta demostraci´on que 1 < d < n, asi d es un factor no-trivial de n, esto
es lo que necesitamos para demostrar.
3. Proposito
La criba cuadr´atica se utiliza actualmente como un algoritmo eficiente para facto-
rizar enteros compuestos. La idea es encontrar varias relaciones de la forma: (Xi)2
=
un producto de peque˜nos n´umeros primos (m´od n)
Si usted consigue bastantes relaciones de esa forma, a continuaci´on, algunos de
ellos se pueden combinar para dar una congruencia x2
≡ y2
(m´od n)
4. Algoritmo General
Entrada : Un n´umero entero compuesto n que no sea una potencia prima.
Salida : Factor no trivial d.
Seleccionar el factor base p1, p2, ...pt donde pi = −1, pj, j ≥ 2 es el j − 1 ´esimo
primo p, para el cual n es un residuo cuadrativo modulo p;
Hallar m = |
√
n|;
i ← 1:
while i ≤ t + 1 do
Hallar b = q(x) = (x + m)2
− n; // x = 0, ±1, ±2, ...
Testar cuando b es pt − suave. Si no lo es, escoger nuevo x e ir al paso anterior;
if b = t
j=1 p
eij
j then
ai ←(x+m);
2
3. i x q(x) factorizaci´on q (x) ai vi
1 0 -312 {{-1,1},{2,3},{3,1},{13,1}} 157 }1,1,1,0,1,0}
2 1 3 {{3,1}} 158 }0,0,1,0,0,0}
3 -1 -625 {{-1,1},{5,4}} 156 {1,0,0,0,0,0}
4 2 320 {{2,6},{5,1}} 159 {0,0,0,1,0,0}
5 -2 -936 {{-1,1},{2,3},{3,2},{13,1}} 155 {1,1,0,0,1,0}
6 4 960 {{2,6},{3,1},{5,1}} 161 {0,0,1,1,0,0}
7 -6 -2100 {{-1,1},{2,4},{3,3},{5,1}} 151 {1,0,1,1,0,0}
Cuadro 1: Matriz de bucle
bi ← b;
vi ← (vi1 , vi2 , ..., vit ) donde vij = eij (m´od 2), 1≤ j ≤ t ;
end if
i ← i + 1
end while
En Z2 hallar φ = T ⊆ 1,2,3,...,t+1 tal que i∈T vi=0;
Hallar x= i∈T ai (m´od n);
for j, 1 ≤ j ≤ t do
lj = i∈T eij
2
;
end for
y= t
j=1 p
lj
j (m´od n);
if x ≡ ±y (m´od n) then
En Z2 hallar φ = T ⊆ 1, 2, 3, ..., t + 1 tal que i∈T vi=0;
Ir a computar otro x;
end if
d=mcd(x-y,n);
retornar d
5. Algoritmo Paso a Paso
Algoritmo: M´etodo Quadratic sieve se explicar´a con un ejemplo
1. Algoritmo de factorizaci´on de quadratic sieve para el numero 24961
Estableciendo la base de factores con la que se va a trabajar y se obtiene al
aplicar el simbolo Jacobi, cuya posible respuesta es 1 y -1, a cada uno con n a partir
de -1 s=p1, p2, ..., pt={-1,2,3,5,13,23} El tama˜no de s es t=6 Hallando m, donde
m=
√
24961=157
Luego hallando el cuadro 1 segun se muestra
Siguiendo los pasos dentro del primer bucle para cada i hallamos un q(x), donde
x comenzar´a a usar el positivo como negativo de sus valores que comenzara en 0 e
ir´a aumentando, como tambi´en tomar valores entre un m ± X (donde X puede ser
un rango de 20 o m´as dependiendo, lo cual veremos mas adelante), cada vez que se
cumpla que b es un primo-suave asignar´a valores a ai y bi y tambien la matriz vi con
los valores del exponente para cada Pj en modulo 2. El algoritmo requiere identificar
aquellas filas que resultan combinaci´on lineal de otras en la matriz formada por los
vi obtenidos de los exponentes de los primos en la base de factorial s.
3
4. A =
1 1 1 0 1 0
0 0 1 0 0 0
1 0 0 0 0 0
0 0 1 0 0 0
1 1 1 0 1 0
0 0 1 1 0 0
1 0 1 1 0 0
Las filas de la matriz A (donde sus elementos est´an en mod 2) que cumplen
e∈T vij = 0
{1, 2, 5}, {2, 4, 6}, {3, 6, 7}, {1, 4, 5, 6}, {2, 3, 4, 7}, {1, 3, 4, 5, 7}, {1, 2, 3, 5,
6, 7} Es decir si yo multiplico cada uno de las de las filas como combinacion lineal
tendr´e 0, estas son las que cumplen.
Se comienza a estudiar cada uno de estos grupos de filas, As´ı, T ⊆ {1, 2, ...,
t+1}
Sea T ⊆= {1, 2, 5}
x = i∈T ai (m´od n) = 3844930
Para cada j, 1 ≤ j ≤ t, se calcula lj= (
ey
i∈t)2
l( 1 )=1
l(2)=3
l(3)=2
l(4)=0
l(5)=1
l(6)=0
Sea y = t
j=1 p
tj
j (m´od n) = 24025
Se debe comprobar si x ≡ ±y (m´od n). Si es asi se debe comprobar otro subcon-
junto de T.
Se cumple que 936≡ ± 24025
Se debe probar por tanto con el siguiente T.
Sea T ⊆= {2,4,6} x = ai
i∈T (m´od n) = 4044642
Para cada j,1≤ j ≤ t, se calcula lj= (
ey
i∈t)2
.
Asi se tiene los siguientes valores:
l(1)=0
l(2)=6
l(3)=1
l(4)=1
l(5)=0
l(6)=0
Sea y = t
j=1 p
tj
j (m´od n) = 960
Se debe comprobar si x ≡ ±y (m´od n). Si es asi se debe comprobar otro subcon-
junto de T.
Se cumple que 960 ≡ ± 960
Se debe probar con el siguiente T
Sea T ⊆={3,6,7} x = ai
i∈T (m´od n) = 3792516
Para cada j,1≤ j ≤ t, se calcula lj= (
ey
i∈t)2
.
Asi se tiene los siguientes valores:
l(1)=1
4
5. i xi q(x) 2 3 5 7 13 vi
1 4122 147875 0 0 3 1 2 }0,0,1,1,0}
2 4150 454272 7 1 0 1 2 }1,1,0,1,0}
3 4187 687960 3 3 1 2 1 {1,1,1,0,1}
4 4241 1143072 5 6 0 2 0 {1,0,0,0,0}
5 4407 3380000 5 0 4 0 2 {1,0,0,0,0}
Cuadro 2: Matriz de bucle
l(2)=5
l(3)=2
l(4)=3
l(5)=0
l(6)=0
Sea y = t
j=1 p
tj
j (m´od n) = 13922
Se debe comprobar si x ≡ ±y (m´od n). Si es asi se debe comprobar otro subconjunto
de T.
Se cumple que 23405 ≡ ± 13922. Se ha llegado a la soluci´on final Dos factores no
triviales 24961 son 109 x 229
6. Prueba con n´umero de 6 d´ıgitos
El n´umero con el que vamos a trabajar es n=16843009.
El n´umero entero m´as pr´oximo de su ra´ız es 4104. Si tomamos la base del factor de
S como {2, 3, 5, 7, 13} obtenidos por la evaluaci´on de el s´ımbolo Jacobi donde se
aceptan cuyo valor sea 1 al realizar Jacobi(n, i), donde i es un n´umero primo que ira
aumentando hasta un cierto valor, los primeros posibles valores de x se daran como
un rango entre 4104+310 como factores de y = f(x) :
x=4105, y = 24
.3.167; x=4106,y = 33
.601 x=4017,y = 23
.5.13.47,
sin embargo en x= 4122 y y=147875 =53
,7,132
y apartir de all´ı se encuentran los
primeros 5 Primos suaves de yi = f(xi) = x2
i − n, pues sus factores que se des-
componen est´an dentro de la base de factores, estos se incluyen, caso contrario no,
obteniendose el cuadro 2:
Lo que tenemos que hacer ahora es buscar las combinaciones de filas en el ´ulti-
mo conjunto de columnas (los exponentes vi (mod 2)) que suman cero. Al hacerlo
hemos garantizado una combinaci´on de valores que dan incluso exponentes y por lo
tanto un cuadrado perfecto para y. por lo tanto una combinaci´on sumando a cero.
Esta combinaci´on producir´a un conjunto de bases de factores a una potencia par y
los valores de x correspondientes se multiplican. Un m´etodo para obtener el vector
que multiplica las columnas es aumentar una matriz identidad y luego hacer una
reducci´on escalonada, de tal manera que aquellas filas que tengan 0´s hasta el tama˜no
de la matriz original, se toman la siguiente posicion hasta el final convirtiendose en
uno de los posibles valores para resolver la combinacion lineal. En nuestro ejemplo,
esto resulta ser f´acil: Podemos ver que las filas 4 y 5 son id´enticos en los exponentes
(mod 2) de la matriz y por lo que la adici´on es el vector cero (mod 2). Obteniendo:
x = x4.x5= 4241.4497 = 19071777 y = y4 −y5=1143072.3380000= (25
,33
,52
,71
,131)2
Podemos ver que x2
≡ 16054517 ≡ y (m´od n). Estableciendo z = 25
,33
,52
,71
,131,
donde nosotros calculamos d=mcd(x-z,n) donde d = 257 que es factor de n.
Si tomamos ahora a S=2,3,5,7,13,17 entonces tenemos dos relaciones para los valores
5
6. peque˜nos de j como x=4129, y=205632= 26
,33,7,17y x=4133,y=248680=23
,33
,5,13,17
multiplicando tenemos en mod 2 el vector (1,0,1,1,1,0). Cuando esto se agrega
a la segunda, tercera y cuarta filas de la matriz anterior se tiene el vector cero
(mod 2) y por lo que tomar: x= 4129.4133.4159.4187.4241 = 1260289859516184521,
z = 212
,38
,5,73
,132
,17, donde y = z2
. Nosotros vemos que x2
≡ y = z2
mod n, ahora
mcd(x-z,n)=65537, que es otro factor de n
6