Baby-step giant-step

algoritmo per calcolare il logaritmo discreto

In crittografia e in teoria dei gruppi, l'algoritmo Baby-step giant-step (lett. "Passi-nani e passi-giganti"[1]) è un algoritmo meet-in-the-middle che consente di calcolare il logaritmo discreto o l'ordine di un elemento in un gruppo abeliano finito. Questo metodo fu pubblicato per la prima volta da Daniel Shanks nel 1971, ma era probabilmente noto già ad Aleksandr Osipovič Gel'fond nel 1962[2].

Baby-step giant-step
ClasseLogaritmo discreto
Struttura datiHash table
Caso peggiore temporalmente
Caso peggiore spazialmente

Descrizione modifica

Sia   un gruppo ciclico di ordine  , sia   un generatore di   e sia  . Inoltre, sia   e sia  .

L'algoritmo Baby-step giant-step permettere di calcolare  , ovvero il logaritmo discreto di   in base  , come segue.

* Passo 0 (Inizializzazione): Si crea una tabella   con le coppie   per ogni  . Si pone   e  
* Passo 1: Si determina se esiste   tale che  . In caso affermativo si restituisce  
* Passo 2: Si pone  ,   e si torna al passo 1

Si noti che il modo migliore per implementare la tabella   è quello di usare una tabella hash, in modo che la ricerca effettuata al Passo 1 richieda tempo costante  . L'algoritmo ha complessità temporale e spaziale pari a  [1].

Note modifica

  1. ^ a b Venturi, pp. 486-7.
  2. ^ Nechaev, p. 165.

Bibliografia modifica