Baby-step giant-step

Da testwiki.
Versione del 9 mar 2024 alle 16:11 di imported>Italaid (+portale)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca

Template:Algoritmo

In crittografia e in teoria dei gruppi, l'algoritmo Baby-step giant-step (Template:Lett[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

Sia 𝔾 un gruppo ciclico di ordine n, sia g un generatore di 𝔾 e sia y=gx. Inoltre, sia m=n e sia h=gm.

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

* Passo 0 (Inizializzazione): Si crea una tabella T con le coppie (j,gj) per ogni j[0,m]. Si pone s=y e i=0
* Passo 1: Si determina se esiste j tale che (j,s)T. In caso affermativo si restituisce im+j
* Passo 2: Si pone s=sh, i=i+1 e si torna al passo 1

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

Note

Bibliografia

Template:Portale