Baby-step giant-step

De testwiki
Ir a la navegación Ir a la búsqueda

Plantilla:Complicado En teoría de grupos, el algoritmo baby-step giant-step (también conocido como algoritmo de Shanks[1]) es un método para calcular el logaritmo discreto de un elemento en un grupo. Es un algoritmo genérico, es decir que funciona para cualquier grupo, siempre que conozcamos el orden del mismo (o una buena cota para él).

El problema del logaritmo discreto es de fundamental importancia para el área de la criptografía asimétrica . Muchos de los sistemas criptográficos más utilizados (por ejemplo el cifrado ElGamal) se basan en el supuesto de que el logaritmo discreto es extremadamente difícil de calcular.

El algoritmo

Sea un grupo G con orden k, g un elemento de G, h en el subgrupo generado por g. La salida del algoritmo será un x<k tal que gx=h.

  1. Sea m=(k1) , donde   indica la función techo.
  2. Calcular α0=eG, α1=gm, α2=g2m,,αm1=g(m1)m. Armar y ordenar la lista L={(1,0);(α1,1),(α2,2),(α3,3),}.
  3. Calcular β0=h,β1=hg1,β2=h(g1)2,... hasta encontrar βi que sea igual a algún αj de la lista L.
  4. Si βi=αj entonces la salida del algoritmo será n=jm+i.

Explicación

¿Por qué la respuesta dada por el algoritmo es correcta? Si βi=αj significa que gjm=hgi, de donde se deduce que gjm+i=h.

¿Por qué el algoritmo siempre da una respuesta? Sea h=gn. Dividimos n entre m y obtenemos n=qm+r, con 0r<m (por definición del resto) y 0q<m (porque m2k>n). O sea: gqm+r=h, de donde αq=gqm=grh=βr.

Este algoritmo mejora el método de "fuerza bruta". Mientras que este último lleva un tiempo de orden O(k), el "baby-step giant-step" tiene un orden O(k).

Ejemplo

Tomemos G como el grupo multiplicativo de los enteros módulo 37. Queremos hallar n tal que 5n = 13 (mod 37). Utilicemos el algoritmo de Shanks.

1. m=36 =6,

2. Calculamos con esto:

α1=5611 (mod 37)
α2=51211×1110 (mod 37),
α3=51810×1136 (mod 37),
α4=52436×1126 (mod 37),
α5=53026×1127 (mod 37).
Armamos la lista: L={(1,0),(10,2),(11,1),(26,4),(27,5),(36,3)}.

3. La inversa de 5 módulo 37 es 15. O sea que β1=13×1510 (mod 37), que coincide con α2.

4. El n buscado es 2×6+1=13.

Referencias

Plantilla:Listaref

Plantilla:Control de autoridades