Documente Academic
Documente Profesional
Documente Cultură
El-Gamal
Luciana Morogan
ATM
2 Parte practica
1. Scrieti un program care sa calculeze logaritmii discreti modulo un numar
prim p. Fie g ∈ Zp∗ si un h ∈ Zp∗ a.i. h = g x unde 1 ≤ x ≤ 240 . Scopul este sa
determinati acei x, mai exact, daca intrarile in program vor fi p, g, h.
Algoritmul trivial consta in a incerca toate cele 240 puteri ale lui x pana ce
va fi gasita valoarea buna (pana cand va fi gasit acel x care satisface relatia
h = g x in Zp ). Acest algoritm presupune un numar de 240 de inmultiri. In
acest exercitiu, veti implementa un algoritm care va rula intr-un timp de
√
240 = 220 folosind un atac de tip ”meet in the middle” dupa cum urmeaza
descris in cele de mai jos.
(g, h, B) fiind cunoscut. Puteti gasi acum o solutie folosind ”meet in the
middle”:
– Construiti o functie hash cu toate valorile posibile din partea stanga a
ecuatiei pentru x1 ∈ 0, ..., 220
– Pentru fiecare x0 ∈ 0, ..., 220 , verificati daca membrul drept al ecuatiei se
gaseste in aceasta tabela hash construita deja. Daca da, atunci ati gasit
o solutie (x0 , x1 ) de unde puteti calcula x-ul cerut (x = x0 B + x1 ).
p=134078079299425970995740249982058461274793658205923933 \
77723561443721764030073546976801874298166903427690031 \
858186486050853753882811946569946433649006084171
g=11717829880366207009516117596335367088558084999998952205 \
59997945906392949973658374667057217647146031292859482967 \
5428279466566527115212748467589894601965568
h=323947510405045044356526437872806578864909752095244 \
952783479245297198197614329255807385693795855318053 \
2878928001494706097394108577585732452307673444020333