Un número natural p>1p>1 es primo si la única posible factorización es p=p1p=p\cdot 1. Siendo los átomos de la aritmética, es natural que nos surjan muchas preguntas en torno a ellos. ¿Cuántos hay? Se sabe que hay infinitos números primos. La primera demostración conocida es de Euclides. Lo que me gusta de esta demostración es la sutil forma de acercarse al infinito.

Esta demostración, aunque muy bella, no nos proporciona suficiente información sobre cómo se distribuyen los primos. Podemos preguntarnos entonces, ¿Cuántos números primos menores a un número dado xx existen? La respuesta aproximada a esta pregunta viene dada por el siguiente teorema:

Teorema del Número Primo: Sea π(x)=#{pprimo:px}.\pi(x)=\#\{p\,primo: p\leq x\}. Entonces, π(x)xlogx.\pi(x)\sim \frac{x}{\log x}. 1

Este teorema fue demostrado en 1986 por Hadamard y Valle Poussin de manera independiente y utiliza herramientas del análisis complejo y está estrechamente relacionada con la Hipótesis de Riemann.

Hay dos hechos sobre la distribución de los números primos que espero convencerles de forma tan contundente que se les quedarán grabados en la memoria. El primero es que, a pesar de su sencilla definición y su función como elementos fundamentales de los números naturales, los números primos crecen como la maleza entre ellos, sin obedecer a ninguna ley más que la del azar, y nadie puede predecir dónde brotará el siguiente. El segundo hecho es aún más asombroso, pues afirma justo lo contrario: que los números primos exhiben una regularidad asombrosa, que existen leyes que rigen su comportamiento y que obedecen a estas leyes con una precisión casi militar. 2

Don Zagier, 1975

¿Existe alguna fórmula para el nn-ésimo número primo pnp_n? Es común escuchar que, al contrario de la mayoría de los subconjuntos interesantes de los números naturales, los primos no obedecen a ninguna fórmula. Les cuento que esto no es cierto. La respuesta es que existen fórmulas, pero computacionalmente ineficientes. Un ejemplo es la fórmula de Willians (1964) 3 :

pn=1+m=12n[nj=1mcos2(π(j1)!+1j)]1/n.p_n = 1 + \sum_{m=1}^{2^n} \left\lfloor \left[ \frac{n}{\sum_{j=1}^m \left\lfloor \cos^2 \left( \pi \frac{(j-1)! + 1}{j} \right) \right\rfloor} \right]^{1/n} \right\rfloor.

Test de Primalidad

¿Cómo decidir si un número es primo? Si tuviera una maquinita eficiente a la cual le pongo un número natural y me dice con certeza si es primo o compuesto, me habría hecho rica. Uno de los motivos de mi afirmación es que los primos aparecen por doquier en criptografía. Problemas abiertos sobre ellos son la base de la seguridad de muchos protocolos criptográficos de clave pública . El ejemplo más claro es el Algoritmo RSA. De aquí un tema importante en criptografía en entender los test de primalidad, que son algoritmos que permiten decidir si un número es primo o compuesto.

Existen algunas herramientas que nos permiten aproximarnos a una respuesta.

Teorema: Si NN no es primo, al menos uno de sus factores primos debe ser menor que N\sqrt{N}.

Esto, pues si p1p_1 y p2p_2 son factores primos de NN con  p1>Np_1>\sqrt{N} y p2>Np_2>\sqrt{N} , entonces: Np1p2>NN=NN\geq p_1\cdot p_2>\sqrt{N}\cdot\sqrt{N}=N lo que es falso, pues NN  no puede ser más grande que  NN.   Por lo tanto, para saber si un número NN es primo hay que detectar si tiene factores entre 1 y N\sqrt{N}.

La Criba de Eratóstenes

Este algoritmo data de la época de la Grecia antigua y fue desarrollado por  Eratostenes de Cyrene (276-195 a.C). Consiste en poner en una lista todos los números del 2 hasta cierto límite. Primero se tachan todos los múltiplos de 2, excepto el 2. Después se hará lo mismo con los múltiplos de 3, excepto el 3 (será como ir saltando de 3 en 3). Se seguirá tachando los múltiplos de 5, salvo el 5, que no estén tachados, y así hasta terminar. Los números que no hayan sido tachados serán los primos.

Considerando que su complejidad para detectar primos entre 2 y nn es de 𝒪(nloglogn)\mathcal{O}(n\log\log n), dependiendo de la versión que se use, es viable utilizarlo entre n=6.41010on=1012n=6.4\cdot 10^{10}\, o\, n=10^{12} .4

Test de Fermat

Aquí tenemos un test para decidir si un número es compuesto. El (pequeño) Teorema de Fermat, dice que si pp es primo, y aa es un entero sin factores comunes con pp, entonces

ap11(modp).a^{p-1}\equiv 1\pmod p.

Si para un entero aa entre 2 y p2p-2 la ecuación no es válida, entonces pp no puede ser primo. Sin embargo, si la ecuación vale para todos estos enteros aa, no es posible concluir nada.

Test de Miller-Rabin

Este test es probabilista, es decir, el resultado que entrega tiene una alta probabilidad de ser válido. Fue propuesto por Gary L. Miller5 en 1976, y modificado por Michael O. Rabin6 en 1980.

Sea n2n \ge 2 un número impar, con n1=2sdn – 1 = 2^s\cdot d, y dd un número entero impar y s1s\ge 1. Se tiene que aa \in \mathbb{Z} es un testigo de Miller-Rabin de nn si no tienen factores comunes y las siguientes condiciones valen simultáneamente:

  1. ad≢1(modn)a^d \not\equiv 1 \pmod{n}
  2. a2id≢1(modn)a^{2^i d} \not\equiv -1 \pmod{n} , para cualquier i=0,1,2,,k1.i = 0, 1, 2, \dots, k – 1.

Este número base demuestra, cuando es el caso, que nn no es primo.

Algoritmo de Miller-Rabin

Entrada: Un número impar n>3n > 3 y una base aa tal que 2an22 \leq a \leq n-2. Salida: COMPUESTO (si aa es testigo) o PROBABLE PRIMO.

  1. Factorización: Hallar ss y dd tales que n1=2sdn – 1 = 2^s \cdot d , con dd impar.
  2. Cálculo inicial: Calcular x=ad(modn)x = a^d \pmod{n}.
  3. Primer test: Si x=1x = 1 o x=n1x = n – 1, retornar PROBABLE PRIMO.
  4. Bucle de elevación al cuadrado: Repetir s1 s – 1 veces:
    • x=x2(modn)x = x^2 \pmod{n}
    • Si x=n1x = n – 1, retornar PROBABLE PRIMO.
  5. Conclusión: Si el bucle termina sin haber retornado, retornar COMPUESTO (aa es un testigo).

Si el test se repite kk veces con todas las salidas siendo PROBABLE PRIMO, entonces la probabilidad de error verifica

P(error)(14)k.P(\text{error}) \leq \left(\frac{1}{4}\right)^k.

¿Es útil el Test de Miller-Rabin?

Para números menores a 232 2^{32} , basta utilizar las bases 2, 7 y 61 para obtener certeza 7. La eficiencia del test de Miller-Rabin no depende solo del número de rondas, sino de la velocidad con la que se realizan las operaciones de exponenciación modular.

El test de Miller-Rabin tiene un papel vital como filtro de alta velocidad en el proyecto GIMPS (Great Internet Mersenne Prime Search), del cual han aparecido los primos más grandes conocidos a la fecha.

Existen estándares de seguridad que indican que para una clave RSA de 2048 bits, se deben realizar al menos 64 rondas del test. Esto garantiza una probabilidad de error inferior a 2128 2^{-128}, 8 lo que significa que la probabilidad de generar una clave insegura por accidente es menor que la de adivinar una clave AES-128 en el primer intento.

La lista de test de primalidad y la historia sobre los primos no terminan acá.

Continuará….

  1. MacLean, S. (2014). Teorema del Número Primo: Dos enfoques de la demostración [Tesis de Licenciatura en Matemáticas, Universidad de Valparaíso]. Repositorio de la Universidad de Valparaíso. ↩︎
  2. Esta frase corresponde a parte de la clase inaugural del matemático Don Zagier en la Universidad de Bonn en 1975. https://people.mpim-bonn.mpg.de/zagier/files/doi/10.1007/BF03039306/fulltext.pdf ↩︎
  3. C. P. Willans, On Formulae for the nth Prime Number, The Mathematical Gazette
    Vol. 48, No. 366 (Dec., 1964), ↩︎
  4. R. Crandall, C. Pomerance, Prime Numbers: A Computational Perspective
    Springer, 2nd Edition, 2005 ↩︎
  5. Miller, G. L. (1976). Riemann’s hypothesis and tests for primality. Journal of Computer and System Sciences, 13(3), 300-317. ↩︎
  6. Rabin, M. O. (1980). Probabilistic algorithm for testing primalityJournal of Number Theory, 12(1), 128–138 ↩︎
  7. https://miller-rabin.appspot.com/#records ↩︎
  8. Damgård, I., Landrock, P., & Pomerance, C. (1993). Average case error estimates for the strong probable prime testMathematics of Computation, 61(203), 177-194 ↩︎

Deja un comentario

Bienvenidos/as!

Soy Amalia Pizarro Madariaga. Doctora en Matemáticas, académica en la U. de Valparaíso y senior researcher en CoreDevx. Investigo en Teoría de Números y sus aplicaciones a la criptografía, divulgo y escribo en este blog.

Descubre más desde Matemáticas, Criptografía y otras hierbas

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo