Baby-step giant-step
Baby-step giant-step | |
---|---|
Classe | Logaritmo discreto |
Struttura dati | Hash 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]Bibliografia
[modifica | modifica wikitesto]- Daniele Venturi, Crittografia nel Paese delle Meraviglie, collana UNITEXT, Springer Milan, 2012, DOI:10.1007/978-88-470-2481-6, ISBN 978-88-470-2480-9.
- (EN) V. I. Nechaev, Complexity of a determinate algorithm for the discrete logarithm, in Mathematical Notes, vol. 55, n. 2, 1994, pp. 165-172, DOI:10.1007/bf02113297.