Home  

Random  

Nearby  



Log in  



Settings  



Donate  



About Wikipedia  

Disclaimers  



Wikipedia





Baby-step giant-step





Article  

Talk  



Language  

Watch  

Edit  





Ingroup theory, a branch of mathematics, the baby-step giant-step is a meet-in-the-middle algorithm for computing the discrete logarithmororder of an element in a finite abelian groupbyDaniel Shanks.[1] The discrete log problem is of fundamental importance to the area of public key cryptography.

Many of the most commonly used cryptography systems are based on the assumption that the discrete log is extremely difficult to compute; the more difficult it is, the more security it provides a data transfer. One way to increase the difficulty of the discrete log problem is to base the cryptosystem on a larger group.

Theory

edit

The algorithm is based on a space–time tradeoff. It is a fairly simple modification of trial multiplication, the naive method of finding discrete logarithms.

Given a cyclic group   of order  , a generator   of the group and a group element  , the problem is to find an integer   such that

 

The baby-step giant-step algorithm is based on rewriting  :

 
 
 
 

Therefore, we have:

 
 
 

The algorithm precomputes   for several values of  . Then it fixes an   and tries values of   in the right-hand side of the congruence above, in the manner of trial multiplication. It tests to see if the congruence is satisfied for any value of  , using the precomputed values of  .

The algorithm

edit

Input: A cyclic group G of order n, having a generator α and an element β.

Output: A value x satisfying  .

  1. m ← Ceiling(n)
  2. For all j where 0 ≤ j < m:
    1. Compute αj and store the pair (j, αj) in a table. (See § In practice)
  3. Compute αm.
  4. γβ. (set γ = β)
  5. For all i where 0 ≤ i < m:
    1. Check to see if γ is the second component (αj) of any pair in the table.
    2. If so, return im + j.
    3. If not, γγαm.


In practice

edit

The best way to speed up the baby-step giant-step algorithm is to use an efficient table lookup scheme. The best in this case is a hash table. The hashing is done on the second component, and to perform the check in step 1 of the main loop, γ is hashed and the resulting memory address checked. Since hash tables can retrieve and add elements in   time (constant time), this does not slow down the overall baby-step giant-step algorithm.

The space complexity of the algorithm is  , while the time complexity of the algorithm is  . This running time is better than the   running time of the naive brute force calculation.

The Baby-step giant-step algorithm could be used by an eavesdropper to derive the private key generated in the Diffie Hellman key exchange, when the modulus is a prime number that is not too large. If the modulus is not prime, the Pohlig–Hellman algorithm has a smaller algorithmic complexity, and potentially solves the same problem.[2]

Notes

edit

Further reading

edit

References

edit
  1. ^ Daniel Shanks (1971), "Class number, a theory of factorization and genera", In Proc. Symp. Pure Math., vol. 20, Providence, R.I.: American Mathematical Society, pp. 415–440
  • ^ Maurer, Ueli M.; Wolf, Stefan (2000), "The Diffie-Hellman protocol", Designs, Codes and Cryptography, 19 (2–3): 147–171, doi:10.1023/A:1008302122286, MR 1759615
  • ^ V. I. Nechaev, Complexity of a determinate algorithm for the discrete logarithm, Mathematical Notes, vol. 55, no. 2 1994 (165-172)
  • ^ Panagiotis Chatzigiannis, Konstantinos Chalkias and Valeria Nikolaenko (2021-06-30). Homomorphic decryption in blockchains via compressed discrete-log lookup tables. CBT workshop 2021 (ESORICS). Retrieved 2021-09-07.
  • ^ Steven D. Galbraith, Ping Wang and Fangguo Zhang (2016-02-10). Computing Elliptic Curve Discrete Logarithms with Improved Baby-step Giant-step Algorithm. Advances in Mathematics of Communications. Retrieved 2021-09-07.
  • edit

    Retrieved from "https://en.wikipedia.org/w/index.php?title=Baby-step_giant-step&oldid=1226817367"
     



    Last edited on 2 June 2024, at 00:47  





    Languages

     


    Deutsch
    Español
    Français
    Italiano
    Nederlands
    Русский

     

    Wikipedia


    This page was last edited on 2 June 2024, at 00:47 (UTC).

    Content is available under CC BY-SA 4.0 unless otherwise noted.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Terms of Use

    Desktop