Baby-step giant-step

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Baby-step giant-step
ClasseLogaritmo discreto
Struttura datiHash table
Caso peggiore temporalmente
Caso peggiore spazialmente

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].

Descrizione[modifica | modifica wikitesto]

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 | modifica wikitesto]

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

Bibliografia[modifica | modifica wikitesto]