fbpx
Wikipedia

Pollard's rho algorithm for logarithms

Pollard's rho algorithm for logarithms is an algorithm introduced by John Pollard in 1978 to solve the discrete logarithm problem, analogous to Pollard's rho algorithm to solve the integer factorization problem.

The goal is to compute such that , where belongs to a cyclic group generated by . The algorithm computes integers , , , and such that . If the underlying group is cyclic of order , by substituting as and noting that two powers are equal if and only if the exponents are equivalent modulo the order of the base, in this case modulo , we get that is one of the solutions of the equation . Solutions to this equation are easily obtained using the extended Euclidean algorithm.

To find the needed , , , and the algorithm uses Floyd's cycle-finding algorithm to find a cycle in the sequence , where the function is assumed to be random-looking and thus is likely to enter into a loop of approximate length after steps. One way to define such a function is to use the following rules: Partition into three disjoint subsets , , and of approximately equal size using a hash function. If is in then double both and ; if then increment , if then increment .

Algorithm edit

Let   be a cyclic group of order  , and given  , and a partition  , let   be the map

 

and define maps   and   by

 
input: a: a generator of G b: an element of G output: An integer x such that ax = b, or failure Initialise i ← 0, a0 ← 0, b0 ← 0, x0 ← 1 ∈ G loop ii + 1 xif(xi−1), aig(xi−1, ai−1), bih(xi−1, bi−1) x2i−1f(x2i−2), a2i−1g(x2i−2, a2i−2), b2i−1h(x2i−2, b2i−2) x2if(x2i−1), a2ig(x2i−1, a2i−1), b2ih(x2i−1, b2i−1) while xix2irbib2iif r = 0 return failure return r−1(a2iai) mod n 

Example edit

Consider, for example, the group generated by 2 modulo   (the order of the group is  , 2 generates the group of units modulo 1019). The algorithm is implemented by the following C++ program:

#include <stdio.h> const int n = 1018, N = n + 1; /* N = 1019 -- prime */ const int alpha = 2; /* generator */ const int beta = 5; /* 2^{10} = 1024 = 5 (N) */ void new_xab(int& x, int& a, int& b) {  switch (x % 3) {  case 0: x = x * x % N; a = a*2 % n; b = b*2 % n; break;  case 1: x = x * alpha % N; a = (a+1) % n; break;  case 2: x = x * beta % N; b = (b+1) % n; break;  } } int main(void) {  int x = 1, a = 0, b = 0;  int X = x, A = a, B = b;  for (int i = 1; i < n; ++i) {  new_xab(x, a, b);  new_xab(X, A, B);  new_xab(X, A, B);  printf("%3d %4d %3d %3d %4d %3d %3d\n", i, x, a, b, X, A, B);  if (x == X) break;  }  return 0; } 

The results are as follows (edited):

 i x a b X A B ------------------------------ 1 2 1 0 10 1 1 2 10 1 1 100 2 2 3 20 2 1 1000 3 3 4 100 2 2 425 8 6 5 200 3 2 436 16 14 6 1000 3 3 284 17 15 7 981 4 3 986 17 17 8 425 8 6 194 17 19 .............................. 48 224 680 376 86 299 412 49 101 680 377 860 300 413 50 505 680 378 101 300 415 51 1010 681 378 1010 301 416 

That is   and so  , for which   is a solution as expected. As   is not prime, there is another solution  , for which   holds.

Complexity edit

The running time is approximately  . If used together with the Pohlig–Hellman algorithm, the running time of the combined algorithm is  , where   is the largest prime factor of  .

References edit

  • Pollard, J. M. (1978). "Monte Carlo methods for index computation (mod p)". Mathematics of Computation. 32 (143): 918–924. doi:10.2307/2006496. JSTOR 2006496.
  • Menezes, Alfred J.; van Oorschot, Paul C.; Vanstone, Scott A. (2001). "Chapter 3" (PDF). Handbook of Applied Cryptography.

pollard, algorithm, logarithms, algorithm, introduced, john, pollard, 1978, solve, discrete, logarithm, problem, analogous, pollard, algorithm, solve, integer, factorization, problem, goal, compute, displaystyle, gamma, such, that, αγ, displaystyle, alpha, gam. Pollard s rho algorithm for logarithms is an algorithm introduced by John Pollard in 1978 to solve the discrete logarithm problem analogous to Pollard s rho algorithm to solve the integer factorization problem The goal is to compute g displaystyle gamma such that ag b displaystyle alpha gamma beta where b displaystyle beta belongs to a cyclic group G displaystyle G generated by a displaystyle alpha The algorithm computes integers a displaystyle a b displaystyle b A displaystyle A and B displaystyle B such that aabb aAbB displaystyle alpha a beta b alpha A beta B If the underlying group is cyclic of order n displaystyle n by substituting b displaystyle beta as ag displaystyle alpha gamma and noting that two powers are equal if and only if the exponents are equivalent modulo the order of the base in this case modulo n displaystyle n we get that g displaystyle gamma is one of the solutions of the equation B b g a A modn displaystyle B b gamma a A pmod n Solutions to this equation are easily obtained using the extended Euclidean algorithm To find the needed a displaystyle a b displaystyle b A displaystyle A and B displaystyle B the algorithm uses Floyd s cycle finding algorithm to find a cycle in the sequence xi aaibbi displaystyle x i alpha a i beta b i where the function f xi xi 1 displaystyle f x i mapsto x i 1 is assumed to be random looking and thus is likely to enter into a loop of approximate length pn8 displaystyle sqrt frac pi n 8 after pn8 displaystyle sqrt frac pi n 8 steps One way to define such a function is to use the following rules Partition G displaystyle G into three disjoint subsets S0 displaystyle S 0 S1 displaystyle S 1 and S2 displaystyle S 2 of approximately equal size using a hash function If xi displaystyle x i is in S0 displaystyle S 0 then double both a displaystyle a and b displaystyle b if xi S1 displaystyle x i in S 1 then increment a displaystyle a if xi S2 displaystyle x i in S 2 then increment b displaystyle b Contents 1 Algorithm 2 Example 3 Complexity 4 ReferencesAlgorithm editLet G displaystyle G nbsp be a cyclic group of order n displaystyle n nbsp and given a b G displaystyle alpha beta in G nbsp and a partition G S0 S1 S2 displaystyle G S 0 cup S 1 cup S 2 nbsp let f G G displaystyle f G to G nbsp be the map f x bxx S0x2x S1axx S2 displaystyle f x begin cases beta x amp x in S 0 x 2 amp x in S 1 alpha x amp x in S 2 end cases nbsp and define maps g G Z Z displaystyle g G times mathbb Z to mathbb Z nbsp and h G Z Z displaystyle h G times mathbb Z to mathbb Z nbsp by g x k kx S02k modn x S1k 1 modn x S2h x k k 1 modn x S02k modn x S1kx S2 displaystyle begin aligned g x k amp begin cases k amp x in S 0 2k pmod n amp x in S 1 k 1 pmod n amp x in S 2 end cases h x k amp begin cases k 1 pmod n amp x in S 0 2k pmod n amp x in S 1 k amp x in S 2 end cases end aligned nbsp input a a generator of G b an element of G output An integer x such that ax b or failure Initialise i 0 a0 0 b0 0 x0 1 G loop i i 1 xi f xi 1 ai g xi 1 ai 1 bi h xi 1 bi 1 x2i 1 f x2i 2 a2i 1 g x2i 2 a2i 2 b2i 1 h x2i 2 b2i 2 x2i f x2i 1 a2i g x2i 1 a2i 1 b2i h x2i 1 b2i 1 while xi x2ir bi b2iif r 0 return failure return r 1 a2i ai mod nExample editConsider for example the group generated by 2 modulo N 1019 displaystyle N 1019 nbsp the order of the group is n 1018 displaystyle n 1018 nbsp 2 generates the group of units modulo 1019 The algorithm is implemented by the following C program include lt stdio h gt const int n 1018 N n 1 N 1019 prime const int alpha 2 generator const int beta 5 2 10 1024 5 N void new xab int amp x int amp a int amp b switch x 3 case 0 x x x N a a 2 n b b 2 n break case 1 x x alpha N a a 1 n break case 2 x x beta N b b 1 n break int main void int x 1 a 0 b 0 int X x A a B b for int i 1 i lt n i new xab x a b new xab X A B new xab X A B printf 3d 4d 3d 3d 4d 3d 3d n i x a b X A B if x X break return 0 The results are as follows edited i x a b X A B 1 2 1 0 10 1 1 2 10 1 1 100 2 2 3 20 2 1 1000 3 3 4 100 2 2 425 8 6 5 200 3 2 436 16 14 6 1000 3 3 284 17 15 7 981 4 3 986 17 17 8 425 8 6 194 17 19 48 224 680 376 86 299 412 49 101 680 377 860 300 413 50 505 680 378 101 300 415 51 1010 681 378 1010 301 416 That is 26815378 1010 23015416 mod1019 displaystyle 2 681 5 378 1010 2 301 5 416 pmod 1019 nbsp and so 416 378 g 681 301 mod1018 displaystyle 416 378 gamma 681 301 pmod 1018 nbsp for which g1 10 displaystyle gamma 1 10 nbsp is a solution as expected As n 1018 displaystyle n 1018 nbsp is not prime there is another solution g2 519 displaystyle gamma 2 519 nbsp for which 2519 1014 5 mod1019 displaystyle 2 519 1014 5 pmod 1019 nbsp holds Complexity editThe running time is approximately O n displaystyle mathcal O sqrt n nbsp If used together with the Pohlig Hellman algorithm the running time of the combined algorithm is O p displaystyle mathcal O sqrt p nbsp where p displaystyle p nbsp is the largest prime factor of n displaystyle n nbsp References editPollard J M 1978 Monte Carlo methods for index computation mod p Mathematics of Computation 32 143 918 924 doi 10 2307 2006496 JSTOR 2006496 Menezes Alfred J van Oorschot Paul C Vanstone Scott A 2001 Chapter 3 PDF Handbook of Applied Cryptography Retrieved from https en wikipedia org w index php title Pollard 27s rho algorithm for logarithms amp oldid 1188106187, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.