Método de factorización de Dixon

En teoría de números, el método de factorización de Dixon (conocido también como método de los cuadrados aleatorios de Dixon[1]​ o algoritmo de Dixon) es un algoritmo general de factorización de enteros; es el método prototípico de base de factores, y el único método de este tipo para el cual los límites de ejecución no se basan en conjeturas sobre las propiedades de suavidad de los valores de un polinomio conocido.

Historia del algoritmo

Las ideas de este algoritmo provienen de Maurice Kraitchik, quien en la década de 1920 generalizó un famoso método debido a Pierre de Fermat[2]​ (que funciona bien cuando los factores son cercanos). D. H. Lehmer y R. E. Powers sugirieron una idea parecida en un artículo publicado en 1931,[3]​ utilizando fracciones continuas.

John Brillhart y Michael Morrison en 1975[4]​ muestran cómo mejorar el algoritmo utilizando el álgebra lineal sobre F 2 {\displaystyle F_{2}} (el cuerpo con dos elementos). John D. Dixon muestra la eficiencia del algoritmo en un artículo publicado en 1981.[5]

El algoritmo de criba cuadrática, debido a Carl Pomerance,[6]​ utiliza ideas similares a las de este método.

Ideas matemáticas sobre las que se basa

Si n N {\displaystyle n\in \mathbb {N} } es primo y a 0   ( m o d   n ) {\displaystyle a\not \equiv 0\ (mod\ n)} , entonces la ecuación x 2 a 2   ( m o d   n ) {\displaystyle x^{2}\equiv a^{2}\ (mod\ n)} tiene dos soluciones distintas: a ,   a {\displaystyle a,\ -a} .

Sin embargo, si n {\displaystyle n} es compuesto y no es la potencia de un primo, la ecuación x 2 a 2   ( m o d   n ) {\displaystyle x^{2}\equiv a^{2}\ (mod\ n)} tiene más soluciones; estas soluciones vienen de la factorización de n {\displaystyle n} como producto de dos enteros coprimos entre sí. Si n = p q {\displaystyle n=p\cdot q} con p , q {\displaystyle p,q} coprimos entonces tomando x {\displaystyle x} tal que x a   ( m o d   p ) {\displaystyle x\equiv a\ (mod\ p)} y x a   ( m o d   q ) {\displaystyle x\equiv -a\ (mod\ q)} (esto se puede hacer gracias al Teorema chino del resto) encontramos una solución a x 2 a 2   ( m o d   n ) {\displaystyle x^{2}\equiv a^{2}\ (mod\ n)} que es distinta de a {\displaystyle a} y a {\displaystyle -a} .

Recíprocamente, si x {\displaystyle x} verifica x 2 a 2   ( m o d   n ) {\displaystyle x^{2}\equiv a^{2}\ (mod\ n)} y x ± a {\displaystyle x\not \equiv \pm a} , entonces x a {\displaystyle x-a} no es coprimo con n {\displaystyle n} ni múltiplo de él.

La idea básica del algoritmo es intentar encontrar dos enteros x ,   a {\displaystyle x,\ a} tales que x ± a {\displaystyle x\not \equiv \pm a} y x 2 a 2   ( m o d   n ) {\displaystyle x^{2}\equiv a^{2}\ (mod\ n)} , con lo que m c d ( x a , n ) {\displaystyle mcd(x-a,n)} será un divisor de n {\displaystyle n} no trivial. Buscar al azar estos enteros lleva mucho tiempo y no hace eficaz el método. Lo que se hace para tener más probabilidad de "colisión" es tomar enteros cuyos cuadrados tengan factores primos pequeños.

Más concretamente: tomamos una "base de factores" B = { p 1 , , p k } {\displaystyle B=\{p_{1},\ldots ,p_{k}\}} formada por enteros pequeños y buscamos c 1 , c k + 1 {\displaystyle c_{1},\ldots c_{k+1}} tales que c 1 2 p 1 α 1 , 1 × × p k α 1 , k   ( m o d   n ) {\displaystyle c_{1}^{2}\equiv p_{1}^{\alpha _{1,1}}\times \ldots \times p_{k}^{\alpha _{1,k}}\ (mod\ n)} , . . . , c k + 1 2 p 1 α k + 1 , 1 × × p k α k + 1 , k   ( m o d   n ) {\displaystyle c_{k+1}^{2}\equiv p_{1}^{\alpha _{k+1,1}}\times \ldots \times p_{k}^{\alpha _{k+1,k}}\ (mod\ n)} . Luego escogemos c i 1 , , c i r {\displaystyle c_{i_{1}},\ldots ,c_{i_{r}}} de forma que c i 1 2 × × c i r 2 p 1 β 1 × × p k β k   ( m o d   n ) {\displaystyle c_{i_{1}}^{2}\times \ldots \times c_{i_{r}}^{2}\equiv p_{1}^{\beta _{1}}\times \ldots \times p_{k}^{\beta _{k}}\ (mod\ n)} , con cada uno de los β i {\displaystyle \beta _{i}} par.

Dadas las k-uplas ( α 1 , 1 , , α 1 , k ) {\displaystyle (\alpha _{1,1},\ldots ,\alpha _{1,k})} , . . . , ( α k + 1 , 1 , , α k + 1 , k ) {\displaystyle (\alpha _{k+1,1},\ldots ,\alpha _{k+1,k})} , encontrar i 1 , , i r {\displaystyle i_{1},\ldots ,i_{r}} tales que c i 1 × × c i r   ( m o d   n ) {\displaystyle c_{i_{1}}\times \ldots \times c_{i_{r}}\ (mod\ n)} sea un producto de elementos de B {\displaystyle B} al cuadrado no es otra cosa que obtener una combinación lineal de las k-uplas que sea la nula módulo 2. O sea que es un problema de álgebra lineal en F 2 {\displaystyle F_{2}} , que puede resolverse en forma rápida.

El método

Sea n N {\displaystyle n\in \mathbb {N} } el entero compuesto que deseamos factorizar.

Tomamos H {\displaystyle H} una cota, llamemos B {\displaystyle B} al conjunto de los primos menores o iguales que H {\displaystyle H} unión el -1.

Inicialmente, buscamos enteros z {\displaystyle z} tales que z 2   ( m o d   n ) {\displaystyle z^{2}\ (mod\ n)} se pueda escribir como producto de elementos de B {\displaystyle B} .

Supongamos que hemos encontrado suficientes de estos números (suficientes en general significa poco más que el cardinal de B {\displaystyle B} ): z 1 , , z r {\displaystyle z_{1},\ldots ,z_{r}} . Utilizamos el álgebra lineal (como se describe en la sección anterior) para encontrar un producto z j 1 2 × × z j t 2 {\displaystyle z_{j_{1}}^{2}\times \ldots \times z_{j_{t}}^{2}} que módulo n es el cuadrado de un producto de elementos de B {\displaystyle B} .

O sea, hemos obtenido z j 1 2 × × z j t 2 = p 1 2 α 1 × × p h 2 α h   ( m o d   n ) {\displaystyle z_{j_{1}}^{2}\times \ldots \times z_{j_{t}}^{2}=p_{1}^{2\alpha _{1}}\times \ldots \times p_{h}^{2\alpha _{h}}\ (mod\ n)} , o, escribiéndolo de otra manera: ( z j 1 × × z j t ) 2 = ( p 1 α 1 × × p h α h ) 2   ( m o d   n ) {\displaystyle (z_{j_{1}}\times \ldots \times z_{j_{t}})^{2}=(p_{1}^{\alpha _{1}}\times \ldots \times p_{h}^{\alpha _{h}})^{2}\ (mod\ n)} . Por lo tanto, el máximo común divisor entre z j 1 × × z j t p 1 α 1 × × p h α h {\displaystyle z_{j_{1}}\times \ldots \times z_{j_{t}}-p_{1}^{\alpha _{1}}\times \ldots \times p_{h}^{\alpha _{h}}} y n {\displaystyle n} será distinto de 1 y n {\displaystyle n} siempre que z j 1 × × z j t ± p 1 α 1 × × p h α h   ( m o d   n ) {\displaystyle z_{j_{1}}\times \ldots \times z_{j_{t}}\neq \pm p_{1}^{\alpha _{1}}\times \ldots \times p_{h}^{\alpha _{h}}\ (mod\ n)} .

En caso de que z j 1 × × z j t = ± p 1 α 1 × × p h α h   ( m o d   n ) {\displaystyle z_{j_{1}}\times \ldots \times z_{j_{t}}=\pm p_{1}^{\alpha _{1}}\times \ldots \times p_{h}^{\alpha _{h}}\ (mod\ n)} se busca otra combinación lineal que nos dé un producto de cuadrados de elementos de B {\displaystyle B} .

Ejemplo

Sea n = 50861 {\displaystyle n=50861} . Tomamos H = 5 {\displaystyle H=5} , por lo que B = { 1 , 2 , 3 , 5 } {\displaystyle B=\{-1,2,3,5\}} .

Encontramos varios enteros cuyos cuadrados son factorizados (módulo n {\displaystyle n} ) sobre B {\displaystyle B} :

1295 2 2 2 × 3 × 5 ; {\displaystyle 1295^{2}\equiv 2^{2}\times 3\times 5;}

1726 2 1 × 3 ; {\displaystyle 1726^{2}\equiv -1\times 3;}

2449 2 1 × 3 × 5 ; {\displaystyle 2449^{2}\equiv -1\times 3\times 5;}

2567 2 3 ; {\displaystyle 2567^{2}\equiv 3;}

2624 2 1 × 3 2 × 5 {\displaystyle 2624^{2}\equiv -1\times 3^{2}\times 5} .

Tenemos las 4-uplas: (0,2,1,1), (1,0,1,0), (1,0,1,1), (0,0,1,0) y (1,0,2,1); estos son los exponentes de la factorización de los cuadrados como productos de elementos de B {\displaystyle B} . Al tener 5 4-uplas, debe haber una que sea combinación de las otras (módulo 2); o lo que es lo mismo, una suma de estas 4-uplas tendrá todas sus entradas pares.

De hecho, la suma de las primeras cuatro da (2,2,4,2). Esto quiere decir que al multiplicar los primeros cuatro números, su cuadrado será ( 1 ) 2 × 2 2 × 3 4 × 5 2 {\displaystyle (-1)^{2}\times 2^{2}\times 3^{4}\times 5^{2}} (módulo n). O sea que ( 1295 × 1726 × 2449 × 2567 ) 2 ( 2 × 3 2 × 5 ) 2   ( m o d   n ) {\displaystyle (1295\times 1726\times 2449\times 2567)^{2}\equiv (2\times 3^{2}\times 5)^{2}\ (mod\ n)} .

Reducimos: 1295 × 1726 × 2449 × 2567 19639   ( m o d   n ) {\displaystyle 1295\times 1726\times 2449\times 2567\equiv 19639\ (mod\ n)} . Esta combinación hallada no nos da ningún factor, ya que 19639 ( 2 × 3 2 × 5 ) {\displaystyle 19639\equiv -(2\times 3^{2}\times 5)} .

Buscamos otra suma que nos dé con entradas pares: las tres últimas. Obtenemos de allí que ( 2449 × 2567 × 2624 ) 2 ( 3 2 × 5 ) 2   ( m o d   n ) {\displaystyle (2449\times 2567\times 2624)^{2}\equiv (3^{2}\times 5)^{2}\ (mod\ n)} , o lo que es lo mismo: 4751 2 45 2   ( m o d   n ) {\displaystyle 4751^{2}\equiv 45^{2}\ (mod\ n)} . De aquí sí sacamos un factor no trivial de n {\displaystyle n} : m c d ( 4751 45 , n ) = 181 {\displaystyle mcd(4751-45,n)=181} .

Tiempo de ejecución

Si en el algoritmo escogemos un H {\displaystyle H} pequeño entonces es fácil saber si un entero se factoriza sobre B {\displaystyle B} , pero es difícil encontrar naturales cuyo cuadrado sea producto de elementos de B {\displaystyle B} . A la inversa, si H {\displaystyle H} es grande será sencillo encontrar naturales cuyo cuadrado sea producto de elementos de B {\displaystyle B} pero complicado saber si un entero se factoriza sobre B {\displaystyle B} .

La clave para optimizar este método es escoger el valor adecuado de H {\displaystyle H} . Puede probarse que si n {\displaystyle n} tiene r {\displaystyle r} dígitos es bueno tomar H {\displaystyle H} con aproximadamente r {\displaystyle {\sqrt {r}}} dígitos. Esto hace que el tiempo de ejecución del algoritmo tenga un orden O ( e C ( l o g ( n ) l o g ( l o g ( n ) ) ) ) {\displaystyle O(e^{C({\sqrt {log(n)log(log(n))}})})} para cierta constante C R {\displaystyle C\in \mathbb {R} } .[7]​ Dixon mostró que podía tomar C = 3 2 {\displaystyle C=3{\sqrt {2}}} , pero Schnorr y Knuth lograron mejorar la prueba, asegurando que C = 2 2 {\displaystyle C=2{\sqrt {2}}} .[6]

Referencias

  1. Kleinjung, Thorsten; et al. (2010). «Factorization of a 768-bit RSA modulus». Advances in Cryptology – CRYPTO 2010. Lecture Notes in Computer Science 6223. pp. 333-350. doi:10.1007/978-3-642-14623-7_18. 
  2. Pomerance, Carl. (1996). «A tale of two sieves». Notices of the American Mathematical Society 43 (12): 1473-1485. 
  3. D.H. Lehmer; R.E. Powers (1931). «On factoring large numbers». Bulletin American Math. Soc. 37: 1770-776. 
  4. M.A. Morrison; J. Brillhart (1975). «A method of factoring and the factorization of F7». Mathematics of computation 29: 183-205. 
  5. Dixon, J. D. (1981). «Asymptotically fast factorization of integers». Math. Comp. 36 (153): 255-260. JSTOR 2007743. doi:10.1090/S0025-5718-1981-0595059-1. 
  6. a b Pomerance, Carl (1982). «Analysis and Comparison of Some Integer Factoring Algorithms». Math. Centre Tract 154: 89-139. 
  7. Koblitz, Neal (2006). «Fermat factorization and factor bases». A course in number theory and cryptography (en inglés) (segunda edición). Springer. pp. 148-153. ISBN 0-387-94293-9. Consultado el 22 de junio de 2015. 

Enlaces externos

Control de autoridades
  • Proyectos Wikimedia
  • Wd Datos: Q1231787
  • Wd Datos: Q1231787