Ir al contenido

Test de Solovay-Strassen

De Wikipedia, la enciclopedia libre
Esta es una versión antigua de esta página, editada a las 14:54 8 ago 2020 por Elwikipedistaincesante (discusión · contribs.). La dirección URL es un enlace permanente a esta versión, que puede ser diferente de la versión actual.

El test de Solovay-Strassen, creado por Robert M. Solovay and Volker Strassen en 1977,[1]​ es un test de primalidad probabilístico. Analiza si un número entero dado es primo, dando una respuesta segura en caso de que la respuesta sea negativa, mientras que si la respuesta es afirmativa lo hace con cierta probabilidad de error (tan baja como uno se proponga, según cómo aplique el test).

Históricamente tiene importancia ya que fue el algoritmo probabilístico para verificar la primalidad de un entero. [2]​ Además, lo hace con un tiempo de ejecución de orden polinomial, lo que permitió asegurar que el sistema criptográfico RSA puede utilizarse en la práctica. El test ya no se utiliza en general, ya que ha sido superado por el test de primalidad de Miller-Rabin.[3]

Conceptos matemáticos que utiliza el test

El símbolo de Legendre nos dice cuándo un entero a es un cuadrado módulo p, donde p es primo. La definición es la siguiente:

El criterio de Euler afirma que .

El símbolo de Jacobi se define a partir del de Legendre. Si y n es impar, según el teorema fundamental de la aritmética podemos descomponerlo como producto de primos . Definimos en este caso:

Según la definición, para conocer debemos saber la descomposición en producto de primos de n. Sin embargo, el cálculo del símbolo de Jacobi puede hacerse de forma eficiente (sin factorizar n) usando las siguientes propiedades:

(I) si

(II) si n es impar,

(III)

(IV)

El algoritmo

Como acabamos de mencionar, si p es primo impar entonces para todo . O sea que (utilizando el contrarrecíproco) si para un n dado encontramos a que no verifica esta congruencia entonces n no es primo. Esta es la idea del algoritmo de Solovay-Strassen. Debido a que calcular el símbolo de Jacobi puede hacerse en tiempo polinomial (gracias a las propiedades (I)-(IV)) y a que hacer potencias módulo n también se puede hacer en tiempo polinomial (gracias al algoritmo de exponenciación binaria), este test es rápido de efectuar.

Sin embargo, si ocurre que encontramos a tal que no podemos afirmar que p es primo.

Lo que sí ocurre es lo siguiente: si n no es primo entonces al menos la mitad de los a naturales con 0<a<n verifican . Es decir que si nuestro test consta de probar con k enteros a distintos entonces (el test dé mal | n no es primo)=1/2k. [4]

Esto hace que el test, si bien no determina si un n es primo, sí nos da con cierta certeza (grande si probamos con muchos a distintos) que lo sea.

Esquema del test

Entrada: n natural impar,

Salida: "n no es primo" o "n es un probable primo".

(1) Se elige a un natural al azar entre 2 y n-2.

(2) Se calculan y .

(3) Si , responde "n no es primo".

(4) Si u=v, responde "n es un probable primo".

Si repetimos el procedimiento varias veces y siempre respondió "n es un probable primo", entonces con probabilidad muy grande n es primo.

Ejemplo

Queremos determinar si n = 221 es primo. Escribimos (n−1)/2=110.

Elegimos al azar a = 47 < n. Calculamos:

  • a(n−1)/2 mod n  =  47110 mod 221  =  −1 mod 221
  • mod n  =  mod 221  =  −1 mod 221.

Esto hace que el test responda "221 es un probable primo". Probamos con otro a escogido al azar, en este caso a = 2:

  • a(n−1)/2 mod n  =  2110 mod 221  =  30 mod 221
  • mod n  =  mod 221  =  −1 mod 221.

Por lo tanto, obtenemos que 221 es un número compuesto.

Referencias

  1. Robert Solovay; Volker Strassen (1977). «A Fast Monte-Carlo Test for Primality». SIAM J. Comput 6: 84-85. 
  2. Borges Hernández, Cruz Enrique (2005). Test de primalidad, el AKS (Tesis). Universidad de La Laguna. Consultado el 12 de agosto de 2015. 
  3. Stinson, p. 186
  4. Koblitz, p.129

Bibliografía

  • Koblitz, Neal (2006). A course in number theory and cryptography (en inglés) (segunda edición). Springer. ISBN 0-387-94293-9. 
  • Stinson, Douglas (2006). Cryptography: theory and practice (en inglés) (tercera edición). Chapman & Hall/ CRC. ISBN 978-1-58488-508-5. 

Enlaces externos