En teoría de números , el método de factorización de Dixon (también conocido como método de cuadrados aleatorios de Dixon [ 1 ] o algoritmo de Dixon ) es un algoritmo de factorización de enteros de propósito general ; es el método prototípico basado en factores . A diferencia de otros métodos basados en factores, su límite de tiempo de ejecución viene con una demostración rigurosa que no se basa en conjeturas sobre las propiedades de suavidad de los valores que toma un polinomio.
El algoritmo fue diseñado por John D. Dixon , un matemático de la Universidad de Carleton , y fue publicado en 1981. [ 2 ]
Idea básica
El método de Dixon se basa en encontrar una congruencia de cuadrados módulo el entero N que se pretende factorizar. Aquí explicamos la idea básica describiendo primero el método de factorización de Fermat y luego cómo el método de Dixon procede de manera diferente.
El método de factorización de Fermat encuentra dicha congruencia seleccionando valores x aleatorios o pseudoaleatorios y esperando que el entero x² mod N sea un cuadrado perfecto no trivial (en los enteros):
Por ejemplo, si N = 84923 (empezando por 292, el primer número mayor que √N y contando hacia arriba), 505² mod 84923 es 256, el cuadrado de 16. Entonces (505 − 16 )(505 + 16) = 0 mod 84923. Calculando el máximo común divisor de 505 − 16 y N usando el algoritmo de Euclides se obtiene 163, que es un factor de N.
En la práctica, seleccionar valores x aleatorios llevará un tiempo impracticablemente largo para encontrar una congruencia de cuadrados, ya que solo hay √ N cuadrados menores que N.
El método de Dixon reemplaza la condición "es un cuadrado perfecto no trivial" por la mucho más débil "tiene solo factores primos pequeños"; por ejemplo, hay 292 cuadrados menores que 84923; 662 números menores que 84923 cuyos factores primos son solo 2, 3, 5 o 7; y 4767 cuyos factores primos son todos menores que 30. (Estos números se denominan 7-suaves y 30-suaves, respectivamente, ya que son B-suaves con respecto a algún límite B ).
Una vez que se encuentren suficientes de estos valores B -suaves, se puede utilizar el álgebra lineal para buscar cuadrados perfectos no triviales para el método de factorización de Fermat. Si hay muchos númeroscuyos cuadrados pueden factorizarse comopara un conjunto fijode primos pequeños, álgebra lineal módulo 2 en la matrizdará un subconjunto de loscuyos cuadrados se combinan para dar un producto de primos pequeños elevados a una potencia par , es decir, un subconjunto de loscuyos cuadrados se multiplican para dar el cuadrado de un número (con suerte diferente) módulo N.
Método
Supongamos que se está factorizando el número compuesto N. Se elige el límite B y se identifica la base del factor (que se llama P ), el conjunto de todos los primos menores o iguales a B. A continuación, se buscan enteros positivos z tales que z² mod N sea B -suave. Por lo tanto , podemos escribir, para exponentes adecuados a i ,
Cuando se han generado suficientes de estas relaciones (generalmente basta con que el número de relaciones sea un poco mayor que el tamaño de P ), se pueden utilizar los métodos del álgebra lineal , como la eliminación gaussiana , para multiplicar estas diversas relaciones de tal manera que los exponentes de los primos del lado derecho sean todos pares:
Esto produce una congruencia de cuadrados de la forma a² ≡ b² (mod N ), que se puede convertir en una factorización de N , N = mcd ( a + b , N ) × ( N /mcd( a + b , N )). Esta factorización podría resultar trivial (es decir, N = N × 1 ), lo que solo puede ocurrir si a ≡ ± b (mod N ), en cuyo caso se debe intentar de nuevo con una combinación diferente de relaciones; pero si se alcanza un par de factores no triviales de N , el algoritmo termina.
Pseudocódigo
Esta sección está tomada directamente de Dixon (1981).
El algoritmo de Dixon
Inicialización. Sea L una lista de enteros en el rango [1, n ], y sea P = { p 1 , ..., p h } la lista de los h primos ≤ v . Sean B y Z listas inicialmente vacías ( Z será indexada por B ).
Paso 1. Si L está vacío, salir (el algoritmo no tuvo éxito). De lo contrario, tomar el primer término z de L , eliminarlo de L y proceder al Paso 2.
Paso 2. Calcula w como el menor resto positivo de z² mod n . Factoriza w como:
donde w ′ no tiene ningún factor en P . Si w ′ = 1, proceda al Paso 3; de lo contrario, regrese al Paso 1.
Paso 3. Sea a ← ( a 1 , ..., a h ). Agregue a a B y z a Z . Si B tiene como máximo h elementos, regrese al Paso 1; de lo contrario, proceda al Paso 4.
Paso 4. Encuentra el primer vector c en B que depende linealmente (módulo 2) de vectores anteriores en B. Elimina c de B yde Z . Calcular coeficientesde tal manera que:
Definir:
Continúe con el paso 5.
Paso 5. Calcular:
de modo que:
Sio, vuelva al paso 1. De lo contrario, devuelva:
lo que proporciona un factor no trivial de n y termina con éxito.
Ejemplo paso a paso
En este ejemplo, factorizamos ( n = 84923) usando el algoritmo de Dixon. Este ejemplo es una ligera adaptación del subconjunto de LeetArxiv. [ 3 ] Se reconoce el mérito del autor original.
- Inicialización :
- Defina una lista de números L , que va desde 1 hasta 84923:
- Defina un valor v , que es el factor de suavidad:
- Defina una lista P que contenga todos los números primos menores o iguales a v :
- Definimos B y Z , dos listas vacías. B es una lista de potencias, mientras que Z es una lista de números enteros aceptados:
- Paso 1 : Iterarvalores
- Inicia un bucle for que indexe la lista.. El elemento actual enestá etiquetado comoEl bucle for finaliza al término de la lista, o cuando el paso 5 interrumpe el bucle.
int n = 84923 ; for ( int i = 1 ; i <= n ; i ++ ) { int z = i ; // Los pasos restantes van aquí. // El paso 4 puede activar el paso 5. // El paso 5 puede romper el bucle. }
- Paso 2 : Cálculoy factorización prima v-suave
- Para continuar, calculePara cada z , exprese el resultado como una factorización prima.
- Este paso continúa para todos los valores de z en el rango.
- Paso 3 : Agregar resultados de v-smooth
- Sies 7-suave, luego agregue sus poderes a la listay añadirpara enumerar.
- Sitiene como máximoelementos, vuelva al paso 1. De lo contrario, proceda al paso 4.
- Por ejemplo, después de 537 iteraciones, tenemos:
- y procedemos al paso 4 ya que tendríamos más devectores en.
- Paso 4 : Este paso se divide en dos partes.
- Parte 1 : Hallazgomódulo 2
- Parte 2 : Encontrar una combinación de filas deque suman números pares
- Por ejemplo, sumando la filay filanos da un vector de números pares.
- y
- entonces
- .
- Paso 5 : Este paso se divide en cuatro partes.
- Parte 1 : Computación x
- Multiplica el correspondientevalores para las filas encontradas en el Paso 4 , móduloLlegar.
- Parte 1 : Computación x
- Las filas 2 y 3 corresponden a 513 y 537, por lo tanto
- Parte 2 : Informática
- Agregue las filas encontradas en el Paso 4 .
- Divide entre 2. (Como estos representan exponentes, esto equivale a calcular una raíz cuadrada).
- Aplicar como exponentes a los primos enLlegar.
- Regrese al paso 1 si.
- Calcula la mitad de la suma de las filas 2 y 3:
- Aplique esos como exponentes a:
- Desde, procedemos a la Parte 3 .
- Parte 3 : Informáticaydóndey
- Parte 4 : Informáticaydónde,y
Una comprobación rápida muestra.
El pseudocódigo dice que solo hay que calculary regresarEsto se debe a que es el MCD más rápido de calcular, y una vez que lo tienes, dividirpor el resultado es más rápido que el cálculo.
Optimizaciones
El método de la criba cuadrática es una optimización del método de Dixon. Selecciona valores de x cercanos a la raíz cuadrada de N tales que x² módulo N sea pequeño, lo que aumenta considerablemente la probabilidad de obtener un número suave.
Otras formas de optimizar el método de Dixon incluyen usar un mejor algoritmo para resolver la ecuación matricial, aprovechar la escasez de la matriz: un número z no puede tener más deLos factores son tan pequeños que cada fila de la matriz está compuesta casi en su totalidad por ceros. En la práctica, se suele utilizar el algoritmo de Lanczos por bloques . Además, es fundamental elegir cuidadosamente el tamaño de la base de factores: si es demasiado pequeña, será difícil encontrar números que se factoricen completamente sobre ella, y si es demasiado grande, habrá que recopilar más relaciones.
Un análisis más sofisticado, utilizando la aproximación de que un número tiene todos sus factores primos menores quecon probabilidad sobre(una aproximación a la función de Dickman-de Bruijn ), indica que elegir una base de factores demasiado pequeña es mucho peor que elegir una demasiado grande, y que el tamaño ideal de la base de factores es alguna potencia de.
La complejidad óptima del método de Dixon es
en notación de O grande , o
en notación L.
Referencias
- ↑ Kleinjung, Thorsten; et al. (2010). "Factorización de un módulo RSA de 768 bits". Avances en criptología – CRYPTO 2010. Notas de clase en ciencias de la computación. Vol. 6223. págs. 333–350 . doi : 10.1007/978-3-642-14623-7_18 . ISBN 978-3-642-14622-0. S2CID 11556080 .
- ↑ Dixon, JD (1981). "Factorización asintóticamente rápida de enteros" (PDF) . Math. Comp. 36 (153): 255–260 . doi : 10.1090/S0025-5718-1981-0595059-1 . JSTOR 2007743 .
- ↑ Kibicho, Murage (2025). Implementación en papel escrito a mano : factorización asintóticamente rápida de enteros.
- Algoritmos de factorización de enteros
- Cuadrados en la teoría de números