Algorisme cangur de Pollard

En teoria computacional de nombres i àlgebra computacional, l'algoritme cangur de Pollard (també l'algoritme lambda de Pollard, vegeu Naming a continuació) és un algorisme per resoldre el problema del logaritme discret. L'algorisme va ser introduït l'any 1978 pel teòric dels nombres John M. Pollard, en el mateix article que el seu més conegut algorisme rho de Pollard per resoldre el mateix problema. Tot i que Pollard va descriure l'aplicació del seu algorisme al problema del logaritme discret en el grup multiplicatiu d'unitats mòdul un p primer, de fet és un algorisme genèric de logaritme discret: funcionarà en qualsevol grup cíclic finit.[1][2]

Algorisme

Suposem G {\displaystyle G} és un grup cíclic finit d'ordre n {\displaystyle n} que és generada per l'element α {\displaystyle \alpha } , i busquem trobar el logaritme discret x {\displaystyle x} de l'element β {\displaystyle \beta } a la base α {\displaystyle \alpha } . En altres paraules, un busca x Z n {\displaystyle x\in Z_{n}} de tal manera que α x = β {\displaystyle \alpha ^{x}=\beta } . L'algorisme lambda permet cercar x {\displaystyle x} en algun interval [ a , , b ] Z n {\displaystyle [a,\ldots ,b]\subset Z_{n}} . Es pot cercar tot el rang de possibles logaritmes mitjançant la configuració a = 0 {\displaystyle a=0} i b = n 1 {\displaystyle b=n-1} .[3]

1. Trieu un conjunt S {\displaystyle S} de nombres enters positius de mitjana aproximadament b a {\displaystyle {\sqrt {b-a}}} i definir un mapa pseudoaleatori f : G S {\displaystyle f:G\rightarrow S} .

2. Trieu un nombre enter N {\displaystyle N} i calcular una seqüència d'elements de grup { x 0 , x 1 , , x N } {\displaystyle \{x_{0},x_{1},\ldots ,x_{N}\}} d'acord amb: [4]

x 0 = α b {\displaystyle x_{0}=\alpha ^{b}\,}

x i + 1 = x i α f ( x i )  per  i = 0 , 1 , , N 1 {\displaystyle x_{i+1}=x_{i}\alpha ^{f(x_{i})}{\text{ per }}i=0,1,\ldots ,N-1}

3. Calcular

d = i = 0 N 1 f ( x i ) . {\displaystyle d=\sum _{i=0}^{N-1}f(x_{i}).}

Observeu que:

x N = x 0 α d = α b + d . {\displaystyle x_{N}=x_{0}\alpha ^{d}=\alpha ^{b+d}\,.}

4. Comenceu a calcular una segona seqüència d'elements de grup { y 0 , y 1 , } {\displaystyle \{y_{0},y_{1},\ldots \}} d'acord amb:

y 0 = β {\displaystyle y_{0}=\beta \,}

y i + 1 = y i α f ( y i )  for  i = 0 , 1 , , N 1 {\displaystyle y_{i+1}=y_{i}\alpha ^{f(y_{i})}{\text{ for }}i=0,1,\ldots ,N-1}

i una seqüència de nombres enters corresponent { d 0 , d 1 , } {\displaystyle \{d_{0},d_{1},\ldots \}} d'acord amb:

d n = i = 0 n 1 f ( y i ) {\displaystyle d_{n}=\sum _{i=0}^{n-1}f(y_{i})}

Observeu que:

y i = y 0 α d i = β α d i  per  i = 0 , 1 , , N 1 {\displaystyle y_{i}=y_{0}\alpha ^{d_{i}}=\beta \alpha ^{d_{i}}{\mbox{ per }}i=0,1,\ldots ,N-1}

5. Deixeu de calcular els termes de { y i } {\displaystyle \{y_{i}\}} i { d i } {\displaystyle \{d_{i}\}} quan es compleix alguna de les condicions següents:

A) y j = x N {\displaystyle y_{j}=x_{N}} per a alguns j {\displaystyle j} . Si les seqüències { x i } {\displaystyle \{x_{i}\}} i { y j } {\displaystyle \{y_{j}\}} "xocar" d'aquesta manera, llavors tenim:
x N = y j α b + d = β α d j β = α b + d d j x b + d d j ( mod n ) {\displaystyle x_{N}=y_{j}\Rightarrow \alpha ^{b+d}=\beta \alpha ^{d_{j}}\Rightarrow \beta =\alpha ^{b+d-d_{j}}\Rightarrow x\equiv b+d-d_{j}{\pmod {n}}}
i així hem acabat.
B). d i > b a + d {\displaystyle d_{i}>b-a+d} Si això passa, l'algoritme no ha pogut trobar. Els intents posteriors es poden fer canviant l'elecció de S {\displaystyle S} i/o f {\displaystyle f} .

Referències

  1. «Kangaroos, Monopoly and Discrete Logarithms» (en anglès). [Consulta: 18 maig 2024].
  2. «Discrete logarithms: a guide» (en anglès). [Consulta: 18 maig 2024].
  3. «JeanLucPons/Kangaroo» (en anglès), 01-05-2024. [Consulta: 18 maig 2024].
  4. «Pollard's Kangaroo Method» (en anglès). [Consulta: 18 maig 2024].