Anda di halaman 1dari 40

Avances en la factorizacin

entera

DISI 2007
Hugo D.Scolnik
con la colaboracin de :
Martn P.Degrati (tesista de doctorado)
Julia Picabea (tesista de licenciatura en
Matemtica)
Juan Pedro Hecht (investigador)
Departamento de Computacin
Facultad de Ciencias Exactas y
Naturales

Universidad de Buenos Aires


Argentina
Hoy en da todava se ignora si el problema de descomponer a un
entero en sus factores primos tiene complejidad subexponencial o
polinomial (usando computadoras normales, dejaremos las
cunticas para otro momento)
Aparte del inters terico, existe uno muy prctico: si se pudiese
factorizar enteros grandes entonces se quebraran las firmas
digitales hechas con el algoritmo ms popular (RSA)

Veamos la razn:
El algoritmo RSA:

Seleccionar al azar dos nmeros primos de gran longitud.


Calcular n =pq
Elegir un entero impar e primo relativo con (n) = (p 1)(q 1)
Calcular d tal que e.d (mod (n)) = 1 (d existe y es nico).
Publicar el par P = (e,n) que es la clave pblica del mtodo RSA.
Mantener en secreto el par S = (d,n) que es la clave privada del
mtodo RSA.
Para encriptar un mensaje M con la clave privada se calcula
S(M) = M d (mod n) y para desencriptarlo,
P(S(M)) = (S(M))c (mod n) = M

(si se factoriza n se obtienen p,q, de ah (n) = (p 1)(q 1), y


al resolver e.d (mod (n)) = 1 , se obtiene la clave privada a
partir de la pblica)
La empresa RSA Data Security publica diversos desafos
conocidos como RSAm (donde m indica la longitud en bits del
nmero). El logro ms reciente es el RSA640 =

31074182404900437213507500358885679300373460228427
27545720161948823206440518081504556346829671723286
78243791627283803341547107310850191954852900733772
4822783525742386454014691736602477652346609

Cuyos factores son:

16347336458092538484431338838650908598417836700330
9231218111085238933310010450815121211 8167511579

19008712816648221131268515739354139754718967899685
1549366663853908802710380210449895719 1261465571
Uno fundamental pues ese tamao es un estndar

RSA1024 =

13506641086599522334960321627880596993888147560566
70275244851438515265106048595338339402871505719094
41798207282164471551373680419703964191743046496589
27425623934102086438320211037295872576235850964311
05640735015081875106765946292055636855294752135008
52879416377328533906109750544334999811150056977236
890927563
Recordemos algunas definiciones

Los enteros mdulo n se denotan por Z n = {0,1,..., n 1}


El grupo multiplicativo de Z n es Z n* = {a Z n /MCD(a, n) = 1}
Decimos que a Z n* , es un residuo cuadrtico mdulo n
2 2
si existe x tal que x a ( n)
Al conjunto de todos los residuos cuadrticos mdulo n
se lo denota por Qn .
Notar que 0 Qn pero como lo necesitaremos, definimos
RoS n = Qn {0}
Veamos el clculo de residuos en
forma eficiente
El clsico mtodo de Fermat
Sea n = p.q el nmero a factorizar.
pq 2 2 p+q 2
Si x = (( ) , y = (( ) son enteros
2 2
entonces
n + x 2 = y 2 p = MCD(n,( x y )), q = MCD(n, x + y )
La idea del viejo mtodo de Fermat es lograr una
representacin n + x 2 = y 2 y esto slo funciona si
los factores primos estn prximos.
Ejemplo:
N = 2581 que se puede escribir como
2581 = 592 302 = (59+30)(59-30) =
= 89.29
Pero en general es casi imposible conseguir una
representacin as. Por ese motivo un
matemtico ruso, Maurice Kraitchik , plante
buscar congruencias
xi2 yi2 (n)
Los mtodos modernos ms eficientes (quadratic
sieve, number field sieve) tienen su origen en estas
ideas, pero conducen a resolver sistemas de
ecuaciones mdulo 2 de millones de incgnitas.
Se considera que han llegado a su lmite.
Pretendemos mirar al mtodo de Fermat desde otro punto
de vista.
Mi idea surgi del problema de decidir cuando un entero k
es un cuadrado perfecto SIN calcular su raz cuadrada.
El enfoque actual (ver por ejemplo GNU) es calcular k(m)
para valores elegidos de m y ver si se obtiene un valor en
RoSm
Ejemplo: k = 52. Como k(7)=3 y RoS(7) = {0,1,2,4} entonces 52
no es un cuadrado perfecto. Tampoco k = 53 es un cuadrado pero
53(7) = 4 y entonces m=7 no filtra ese caso. Pero
RoS(5) = {0,1,4} y 53(5) = 3
Veamos la idea central:
Sea por ejemplo n = 507527 y tomemos m = 9
RoS9 = {0,1,4,7} y como 507527(9) = 8 resulta que
( n + x 2 )(9) = y 2 (9)
8 + {0,1,4,7} = y 2 (9)
El nico valor que da un elemento de RoS9 es 1
y por lo tanto resulta que x 2 (9) = 1 x 2 = 1 + 9t
(realmente x 2 = 64009 y entonces x 2 = 1 + 9t con t = 7112)
Ms formalmente la idea es:
Para cualquier valor de m debe cumplirse que
2 2 2
x (m) ROS m pero de n + x = y resulta que debe ser
(n + x 2 )(m) ROS m para obtener un cuadrado perfecto (y 2 ) .

Esto conduce a la siguiente definicin:


Dado n diremos que a ROSc es un target para c
s y slo si (n + a )(c) ROS m
Nota: si n es par pero n(4) 0 los targets no existen.
Hemos demostrado que ciertos valores de m SIEMPRE
dan targets NICOS para n =pq
Otro ejemplo:

n= 2851
RoS(4) = {0,1}, n(4)=1
(n + x2)(4) = (1 + {0,1})(4)
o sea que x2(4) =0 es el nico valor posible.
De hecho era x2=900 o sea que x2(4) =0
Nota:
si x 2 a (c) x 2 = a + c.t para un cierto valor de t y
si b = (n + x 2 )( c) ROSc y 2 = b + c.u para un
cierto valor de u resulta que
n+ a b
n + a + c.t =b + c.u = = u t
c

La idea clave es usar a este ltimo nmero


como el nuevo nmero a factorizar
Ejemplo:
n = 200902987, x 2 = 510172569, y 2 = 711075556
Algunos targets nicos:
(1,0,4),(9,4,24),...,(9,36,80)
El ltimo nos dice que
x 2 = 510172569 = 9 + 80t (t = 6.377.157)
y 2 = 711075556 = 36 + 80u (u = 8.888.444)
x 2 = 9 + 80.t , y 2 = 36 + 80.u
n + a b 200.902.987 + 9 36
and 1 = = = 2.511.287
c 80
2.511.287
Notar que = 0.0125
200902987
Veamos el clculo de targets nicos
para algunos ejemplos
Un ejemplo ms grande (RSA640):

3107418240490043721350750035888567930037346022842727545
7201619488232064405180815045563468296717232867824379162
7283803341547107310850191954852900733772482278352574238
6454014691736602477652346609

Algunos targets nicos:


x 2 = 112+144.t , y 2 = 81 + 144.u pero
x2 =
17707310304697763704988588404966391536460583169180617283
10221792542243033899082714379867416033308084880126742247
17053142964634912722230646040554621999009792271208389177
81467155547546153184016
Es claro que todava los targets no ayudan en forma
sensible porque calcular t es un problema exponencial
El prximo paso da algo mejor

x 2 = 16096 +23760.t1

Pero todava no alcanza


RSA 1024
13506641086599522334960321627880596993888147560566
70275244851438515265106048595338339402871505719094
41798207282164471551373680419703964191743046496589
27425623934102086438320211037295872576235850964311
05640735015081875106765946292055636855294752135008
52879416377328533906109750544334999811150056977236
890927563
Algunos targets nicos para RSA1024

( 57, 4, 96)
( 81, 4, 120)
( 9, 100, 144)
( 121, 4, 160)
( 81, 64, 180)
( 201, 4, 240)
( 153, 100, 288)
( 81, 244, 360)
( 441, 4, 480)
( 441, 244, 720)
( 441, 964, 1440)
Una conclusin:

2 2
rsa 1024 + (24 z + 3) = (36u + 10)
Volvamos al ejemplo:
2 2
n = 507527 x = 64009 y = 571536

a b c Delta = (n+a-b)/c
1 0 3 169176
1 0 4 126882
4 1 5 105506
1 0 8 63441
89 216 360 1410
649 576 720 705
Comenzando con (649,576,720) y
delta =705, la siguiente iteracin conduce a

2 2
x = 3529 + 30240u que da x con u = 2

Entonces queda claro que hay que iterar


Sea (a1 , b1 , c1 ) un target nico.
n + a1 b1
Calculamos 1 =
c1
y, si es impar, un target nico (a2 , b2 , c2 )
Un poco de lgebra indica como frmulas posibles:
x 2 = a1 + c1a2 + c1c2t2
y 2 = b1 + c1b2 + c1c2u2
que a veces funcionan y a veces no
(luego veremos como "filtrarlas" "corregirlas")
Tn( 649, 576, 720): D = 705

TD( 0, 1, 4): (aa, bb, cc) = ( 649, 1296, 2880) -> OK <-.
TD( 0, 1, 8): (aa, bb, cc) = ( 649, 1296, 5760) -> OK <-.
TD( 0, 1, 16): (aa, bb, cc) = ( 649, 1296, 11520).

Las frmulas anteriores dieron bien en los dos primeros casos


pero no en el ltimo.

Lo correcto sera (6409.7056,11520). Ahora,


6409 649 = 5760 = 7056 1296 = 8.720=8.c1

Esto no es casualidad, es un teorema


Filtros:
Tn( 169, 96, 240): D = 2115
TD( 1, 0, 4): (aa, bb, cc) = ( 409, 96, 960) F2 F3b F6.
TD( 1, 4, 8): (aa, bb, cc) = ( 409, 1056, 1920) F2 F3b F6.
TD( 1, 4, 16): (aa, bb, cc) = ( 409, 1056, 3840) F2 F3b F6.
TD( 1, 4, 32): (aa, bb, cc) = ( 409, 1056, 7680) F2 F3b F6.

Los filtros eliminaron todos los casos, pero son corregibles.

Por ejemplo, el ltimo debera ser (2569, 3216,7680)


Nuevamente si planteamos que x 2 = 409 + x2 + c1c2t
x2 =2569 - 409 = 2160 = 9.240 = x2 c1
Luego veremos que esto se deduce
Caso simtrico:
cuando tiene targets que tambin lo eran del
nivel anterior
(1) x 2 = a1 + c1a 2 + x2 + c1c2t22 = a1 + c1t11 = a2 + c2t12
(TU del primer paso).
Por lo tanto
x 2 a1 (c1 ), x 2 a2 (c2 )
(2) x2 0 (c1 ) x2 = x2c1
(3) x2 ( a2 a1 c1a2 )(c2 ) x2 = a2 a1 c1a2 + c2 x2
(4) x 2 = a2 + c2 a 1 + x1 + c1c2t21 = a1 + c1t11
(5) x1 0 (c2 ) x1 = x1c2
(6) x1 (a1 a2 c2 a1 )(c1 ) x1 = a1 a2 c2 a1 + c1 1x
(7) y 2 = b1 + c1b2 + y2 + c1c2u22 = b1 + c1u11 = b2 + c2u12
(8) y2 0 (c1 ) y2 = y2c1
(9) y2 = (b2 b1 c1b2 )(c2 ) y2 = b2 b1 c1b2 + c2 y2
(10) y 2 = b2 + c2b1 + 1y + c1c2u12 = b1 + c1u11
(11) 1y 0 (c2 ) 1y = 1y c2
(12) 1y = (b1 b2 c2b1 )(c1 ) 1y = b1 b2 c2b1 + c1 1y
A partir de n + x 2 = y 2 ,
usando (1),(3),(7) y (9) resulta
n + x 2 = n + a1 + c1a 2 + a2 a1 c1a2 + c2 x2 + c1c2t22 =
b1 + c1b2 + b2 b1 c1b2 + c2 y2 + c1c2u22
obteniendo
n + a2 b2
(13) + x2 y2 = c1 (u22 t22 )
c2
n + a2 b2
+ x2 y2 0 (c1 )
c2
anlogamente
n + a1 b1
(14) + 1x 1y = c2 (u12 t21 )
c1
n + a1 b1
+ 1x 1y 0 (c2 )
c1

De (2) y (3)
x2c1 + a1 a2 + c1a2
(15) x2 = (diofntica lineal)
c2
Similarmente
x1c2 + a2 a1 + c2 a1
(16) 1x =
c1
y2c1 + b1 b2 + c1b2
(17) y2 =
c2
1y c2 + b2 b1 + c2b1
(18) 1y =
c1
Tambin se obtiene:

(19) a1 + c1 1x a2 + c2 x2 (c1c2 )
1 2
(20) b1 + c1 b2 + c2 (c1c2 )
y y
Ejemplo:
(49,96,120), (1,0,9)
1y c2 + b2 b1 + c2b1
resolviendo la ecuacin 1y =
c1
resulta
1y = 512 + 27 z , 1y = 768 + 40 z
Con z = 0 1y = 512
1y = 96 9.96 + 120(512) = 62208
y 2 = 864 62208 + 1080u12 cierto con u12 =586
Tareas futuras
Todava falta, tenemos filtros
casi perfectos pero todava
no alcanzan pues si se siguen
ramas equivocadas
Hay varias ideas que estn en
desarrollo.
Finalizado el tiempo disponible
Aqu terminamos

Muchas gracias !
hugo@dc.uba.ar